logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zmienić częstotliwość z 4MHz na 10MHz w XC9536XL Xilinx?

S2t 22 Kwi 2007 17:39 3987 7
REKLAMA
  • #1 3811156
    S2t
    Poziom 11  
    Posty: 53
    Witam
    Mam pewien problem slabo znam sie na elektronice.
    Chodzi mi glownie o przerobienie wsadu do tego CPLD - mam zrodla i wiem mniejwiecej co i jak.
    Chodzi o to ze w calej konstrukcji programu - bo wg tego ja widze jako schemat w postaci graficznej VHDL:
    Mam generator z kilkoma dzielnikami na wyjsciach:
    - 1mhz CLK
    - 4mhz CLK
    Chodzi o to zeby jeden z tych imulsow 4mhz przerobic na 10mhz
    Zalaczam foto ale tylko tej czesci schematu odp. za wyjscie zegarowe 4mhz
    Przepraszam ze w takim formacie ale nie wiem jak ta calosc zapisac jako jpeg a jest troche duze
    Za pomoc ofiaruje punkty.


    Jak zmienić częstotliwość z 4MHz na 10MHz w XC9536XL Xilinx?
    Załączniki:
    • 1.rar (89.83 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • Pomocny post
    #2 3812836
    griva
    Poziom 17  
    Posty: 203
    Pomógł: 12
    Ocena: 1
    problem jest do rozwiazania przez Pana, niech Pan polaczy neta z wyjscia bufg sprzed tych div-ow do przerzutnika na gorze na wejscie clk i bedzie pan mial podzielony zegar z wejscia IN1 przez 2
  • REKLAMA
  • #3 3813126
    S2t
    Poziom 11  
    Posty: 53
    griva napisał:
    problem jest do rozwiazania przez Pana, niech Pan polaczy neta z wyjscia bufg sprzed tych div-ow do przerzutnika na gorze na wejscie clk i bedzie pan mial podzielony zegar z wejscia IN1 przez 2

    Dzieki ale to moja wina bo zle to opisalem chodzi o to ze na wejsciu IN przed BUFG podlaczony jest oscylator 100mhz jezeli tak zrobie to wynik otrzymam 50mhz a nie 10mhz
    Jeszcze dodam do tych zrodel mam 2 plik graficzny w ktorym jest schemat skrotow DIVIN OUT
    Zalaczam w pliku
    I jeszcze takie glupie pytanie - jak przekonwertowac caly projekt do pliku w postaci JED?


    Jak zmienić częstotliwość z 4MHz na 10MHz w XC9536XL Xilinx?
    Załączniki:
    • 2.rar (106.28 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #4 3813419
    griva
    Poziom 17  
    Posty: 203
    Pomógł: 12
    Ocena: 1
    tu masz kod - funkjonalnie prawie taki sam ;-))

    zmien stale COUNTER_WIDTH (szerokosc licznika w bitach - jak dzielisz przez 10 to 4 bity itd. jak dasz za duzo to nic sie nie stanie)

    i DIV_ON_CLK4MHZ - przez ile ma byc podzielony zegar wejsciowy
    tak zeby Ci pasilo (jak dasz 10 to na wyjsciu bedziesz mia 10 MHz).

    Dodaj do pliku kod, ustaw swoja kosc w xilinx i kliknij Generate Programming file i bedziesz mial jed-a

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    entity clk_divider is
    port(
    IN1 : in std_logic;
    CLK4MHZ : out std_logic;
    CLK1MHZ : out std_logic
    );
    end;

    architecture rtl of clk_divider is
    constant COUNTER_WIDTH : integer := 4;
    constant DIV_ON_CLK4MHZ : integer := 10;

    constant N : integer := DIV_ON_CLK4MHZ/2;

    signal counter : std_logic_vector(COUNTER_WIDTH-1 downto 0) := (others=>'0');
    signal overflow_N : std_logic;
    signal reg_out_4mhz : std_logic := '0';
    signal reg_out_1mhz_1 : std_logic := '0';
    signal reg_out_1mhz_2 : std_logic := '0';
    begin
    CLK4MHZ <= reg_out_4mhz;
    CLK1MHZ <= reg_out_1mhz_2;

    overflow_N <= '1' when (conv_integer(counter)=(N-1)) else
    '0';

    p_counter : process (IN1)
    begin
    if rising_edge(IN1) then
    if overflow_N='1' then
    counter <= (others=>'0');
    else
    counter <= counter + 1;
    end if;
    end if;
    end process;

    p_reg_out_4mhz : process (overflow_N)
    begin
    if rising_edge(overflow_N) then
    reg_out_4mhz <= not reg_out_4mhz;
    end if;
    end process;

    p_reg_out_1mhz_1 : process (overflow_N)
    begin
    if rising_edge(overflow_N) then
    reg_out_1mhz_1 <= not reg_out_1mhz_1;
    end if;
    end process;

    p_reg_out_1mhz_2 : process (reg_out_1mhz_1)
    begin
    if rising_edge(reg_out_1mhz_1) then
    reg_out_1mhz_2 <= not reg_out_1mhz_2;
    end if;
    end process;

    end;

    czy to nie jest przypadkiem cos do unloopera?
  • REKLAMA
  • #5 3813788
    S2t
    Poziom 11  
    Posty: 53
    griva napisał:
    tu masz kod - funkjonalnie prawie taki sam ;-))

    zmien stale COUNTER_WIDTH (szerokosc licznika w bitach - jak dzielisz przez 10 to 4 bity itd. jak dasz za duzo to nic sie nie stanie)

    i DIV_ON_CLK4MHZ - przez ile ma byc podzielony zegar wejsciowy
    tak zeby Ci pasilo (jak dasz 10 to na wyjsciu bedziesz mia 10 MHz).

    Dodaj do pliku kod, ustaw swoja kosc w xilinx i kliknij Generate Programming file i bedziesz mial jed-a

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;

    entity clk_divider is
    port(
    IN1 : in std_logic;
    CLK4MHZ : out std_logic;
    CLK1MHZ : out std_logic
    );
    end;

    architecture rtl of clk_divider is
    constant COUNTER_WIDTH : integer := 4;
    constant DIV_ON_CLK4MHZ : integer := 10;

    constant N : integer := DIV_ON_CLK4MHZ/2;

    signal counter : std_logic_vector(COUNTER_WIDTH-1 downto 0) := (others=>'0');
    signal overflow_N : std_logic;
    signal reg_out_4mhz : std_logic := '0';
    signal reg_out_1mhz_1 : std_logic := '0';
    signal reg_out_1mhz_2 : std_logic := '0';
    begin
    CLK4MHZ <= reg_out_4mhz;
    CLK1MHZ <= reg_out_1mhz_2;

    overflow_N <= '1' when (conv_integer(counter)=(N-1)) else
    '0';

    p_counter : process (IN1)
    begin
    if rising_edge(IN1) then
    if overflow_N='1' then
    counter <= (others=>'0');
    else
    counter <= counter + 1;
    end if;
    end if;
    end process;

    p_reg_out_4mhz : process (overflow_N)
    begin
    if rising_edge(overflow_N) then
    reg_out_4mhz <= not reg_out_4mhz;
    end if;
    end process;

    p_reg_out_1mhz_1 : process (overflow_N)
    begin
    if rising_edge(overflow_N) then
    reg_out_1mhz_1 <= not reg_out_1mhz_1;
    end if;
    end process;

    p_reg_out_1mhz_2 : process (reg_out_1mhz_1)
    begin
    if rising_edge(reg_out_1mhz_1) then
    reg_out_1mhz_2 <= not reg_out_1mhz_2;
    end if;
    end process;

    end;

    czy to nie jest przypadkiem cos do unloopera?

    Dzieki o to mi chodzilo.
    Masz odemnie 40 punktow
    Tak to jest cos do unloopera a dokladnie zrodla wsadu SCH.JED (niepubliczne)

    Chce przestawic ten imuls na 10 dlatego ze :
    Atmel CLK - 4mhz
    ISO CLK - 1mhz
    GLITCH IN
    GLITCH OUT
    W przypadku tego wsadu atmel taktowany jest przy niskiej czestotliwosci jak przerobie na 10mhz wowczas atmel bedzie mogl wykonac szybszy glitch
  • #6 3813917
    griva
    Poziom 17  
    Posty: 203
    Pomógł: 12
    Ocena: 1
    [quote="S2tTak to jest cos do unloopera a dokladnie zrodla wsadu SCH.JED (niepubliczne)
    [/quote]

    prosze zdradz mi tajemnice po co w tym unlooperze jest zegar 100MHz??
  • #7 3813977
    S2t
    Poziom 11  
    Posty: 53
    griva napisał:
    [quote="S2tTak to jest cos do unloopera a dokladnie zrodla wsadu SCH.JED (niepubliczne)


    prosze zdradz mi tajemnice po co w tym unlooperze jest zegar 100MHz??[/quote]
    Oscylator na wejsciu xilinxa jest zapewne po to zeby moc xilinxem wygenerowac rozne czestotliwosci potrzebne do poprawnej pracy unloopa.

    Jezeli masz unlooper i chec mam jeszcze 1 pomysl do zrealizowania.
  • #8 3814161
    zorg666
    Poziom 22  
    Posty: 556
    Pomógł: 30
    Ocena: 28
    No to nie jest tak do końca: xilinx jest po to aby generowac rózne f ale ścisle zsynchronizowane i o tym samym przesunieciu fazowym na wyjsciu.
    Bez tej synchronizacji glitch Ci nie wyjdzie.
    Dlatego też w modelu N2 sa szybkie Maxy !!!
    No ale schodzimy na śliski temat.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy zmiany częstotliwości sygnału zegarowego z 4 MHz na 10 MHz w układzie CPLD Xilinx XC9536XL. Problem polega na modyfikacji wsadu (projektu VHDL) generującego sygnały zegarowe 1 MHz i 4 MHz, aby uzyskać sygnał 10 MHz. Wskazano, że wejściowy oscylator ma częstotliwość 100 MHz, a obecne dzielniki generują 4 MHz i 1 MHz. Propozycja rozwiązania obejmuje modyfikację parametrów licznika w kodzie VHDL, w szczególności szerokości licznika (COUNTER_WIDTH) oraz wartości dzielnika (DIV_ON_CLK4MHZ), aby uzyskać pożądaną częstotliwość wyjściową. Podano przykładowy fragment kodu VHDL z opisem, jak wygenerować plik programujący (.jed) w środowisku Xilinx. Dyskusja porusza także rolę oscylatora 100 MHz jako źródła sygnału bazowego do generacji różnych częstotliwości zsynchronizowanych fazowo, co jest istotne dla poprawnej pracy układu i generowania impulsów glitch. Wspomniano zastosowanie w projekcie unloopera oraz wpływ zmiany częstotliwości na szybkość działania mikrokontrolera Atmel taktowanego sygnałem zegarowym.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA