|
|
  |
Много тактовых в большом проекте |
|
|
|
Aug 7 2015, 05:59
|
Частый гость
 
Группа: Свой
Сообщений: 108
Регистрация: 31-12-07
Из: Фрязино М.О.
Пользователь №: 33 753

|
Цитата(johan @ Aug 6 2015, 18:16)  Одна системная по разработке и поддержке, конечно, приятнее чем куча клоков.
Какие значения частот у этих 20 клоков? Меняются ли они динамически во время работы? Или все клоки это RX_CLK, от каких-то трансиверов? 150-166 MHz. Да все TX RX от трансиверов. Частоты могут динамически меняться. Интерфейсы критичны к джиттеру и ppm.
|
|
|
|
|
Aug 7 2015, 08:17
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Посмотрите, это, возможно поможет Код library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL;
library UNISIM; use UNISIM.VComponents.all;
entity dcm_clockgen_test is Port ( clk_in : in STD_LOGIC; clk_out : out STD_LOGIC; sw : in STD_LOGIC_VECTOR (3 downto 0)); end dcm_clockgen_test;
architecture Behavioral of dcm_clockgen_test is signal prog_data_sr : std_logic_vector(27 downto 0) := (others => '0'); signal prog_en_sr : std_logic_vector(27 downto 0) := (others => '0'); signal prog_data : std_logic; signal prog_en : std_logic; signal desired_mode: std_logic_vector(3 downto 0) := "0001"; signal current_mode: std_logic_vector(3 downto 0) := "0000"; begin prog_data <= prog_data_sr(0); prog_en <= prog_en_sr(0); process(clk_in) begin if rising_edge(clk_in) then -- Update the clock reprogramming signals prog_en_sr <= '0' & prog_en_sr((prog_en_sr'length)-1 downto 1); prog_data_sr <= '0' & prog_data_sr((prog_data_sr'length)-1 downto 1); -- Do we need to switch modes? if desired_mode /= current_mode and unsigned(prog_en_sr) = 0 then case desired_mode is when "0001" => -- switch to 25MHz prog_en_sr <= "1000" & "11111111" & "11" & "0000" & "11111111" & "11"; -- Two 10-bit xfers + 1-bit 'go' prog_data_sr <= "0000" & "00001010" & "11" & "0000" & "00001101" & "01"; -- Code for D 14 M 11 current_mode <= desired_mode;
when "0010" => -- switch to 40MHz prog_en_sr <= "1000" & "11111111" & "11" & "0000" & "11111111" & "11"; -- Two x 10-bit xfers + 1-bit 'go' prog_data_sr <= "0000" & "00000100" & "11" & "0000" & "00000011" & "01"; -- Code for D 5 M 4 current_mode <= desired_mode;
when "0100" => -- switch to 64.0MHz prog_en_sr <= "1000" & "11111111" & "11" & "0000" & "11111111" & "11"; -- Two x 10-bit xfers + 1-bit 'go' prog_data_sr <= "0000" & "00000001" & "11" & "0000" & "00000000" & "01"; -- Code for D 1 M 2 current_mode <= desired_mode;
when "1000" => -- switch to 74.6MHz prog_en_sr <= "1000" & "11111111" & "11" & "0000" & "11111111" & "11"; -- Two x 10-bit xfers + 1-bit 'go' prog_data_sr <= "0000" & "00000110" & "11" & "0000" & "00000010" & "01"; -- Code for D 3 M 7 current_mode <= desired_mode;
when others => end case; end if; if sw /= "0000" then desired_mode <= sw; end if; end if; end process;
DCM_CLKGEN_inst : DCM_CLKGEN generic map ( CLKFXDV_DIVIDE => 2, CLKFX_DIVIDE => 14, CLKFX_MD_MAX => 2.0, CLKFX_MULTIPLY => 11, CLKIN_PERIOD => 31.25, SPREAD_SPECTRUM => "NONE", STARTUP_WAIT => FALSE ) port map ( CLKIN => clk_in, CLKFX => clk_out, CLKFX180 => open, CLKFXDV => open, LOCKED => open, PROGDONE => open, STATUS => open, FREEZEDCM => '0', PROGCLK => clk_in, PROGDATA => PROG_DATA, PROGEN => PROG_EN, RST => '0' );
end Behavioral; чтобы не плодить тактовые частоты - программировал "на лету" DCM_CLKGEN (xilinx - Spartan 6 Clocking Resources User Guide for more info)
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|