Virtex 6
Есть два частотных домена, 50 MHz и 200 MHz
Клоки идут с Xilinx'го ClockWizard, утверждается, что они на 100% совпадают по фазе. Я так понимаю это не гарантированная фигня и из-за роутинга мы в некоторых местах плисины можем получить небольшое различие по времени прихода фронта волны ?
Соответственно логика моих рассуждений, раз во фронт медленного клока попадают два фронта быстрого, то во втором фронте быстрого мы можем сэмплить данные с медленного.
Код
constant MAINCLK_SAMPLE_STEP : integer := 1;
signal main_clk_cnt : integer range 0 to 3 := 0;
process (data_clock) --50 MHZ
begin
if (rising_edge(data_clock)) then
data_mainclk <= i_data;
data_ready_mainclk <= i_data_ready;
o_result <= result_mainclk;
end if;
end process;
process (clock) --200MHZ
begin
if (rising_edge(clock)) then
if (reset = '0') then
if (main_clk_cnt = 3) then main_clk_cnt <= 0; else main_clk_cnt <= main_clk_cnt + 1; end if;
case SM_STATE is
when SM_DATA_INPUT_FIRST_1 =>
if (data_ready_mainclk = '1') and (main_clk_cnt = MAINCLK_SAMPLE_STEP) then
dinp(63 downto 32) <= data_mainclk;
SM_STATE <= SM_DATA_INPUT_FIRST_2;
end if;
............... и т.д.
Сиё творчество в симуляторе работает нормально.
Насколько вообще правилен такой подход ?
Интуитивно он мне не нравится, чувствую, что тут надо как-то по другому и все законстрейнить, но пока не могу понять как.
Ткните меня пожалуйста, как это нормально сделать ?
Сообщение отредактировал v1vas - Mar 30 2015, 19:43