VHDL: Правильная синхронизация другого компонента относительно настройки

Я работаю над проектом FPGA на VHDL.

Мне нужно копировать 16-битный регистр сдвига в FIFO каждый раз, когда он заполняется (например, после того, как 16 новых бит данных были введены в сдвиговый регистр, я хочу взять вновь сформированное 16-битное слово и отправить его в FIFO)

Мой вопрос: нужно ли мне настраивать данные на входе в FIFO one clock перед тем, как утверждать линию синхронизации в FIFO? На самом деле это общий вопрос VHDL, а не только для FIFO.

В принципе, можно ли установить данные и переключить часы в одной операции, или мне нужен какой-то базовый конечный автомат, чтобы настроить данные на одном фронте тактового сигнала и переключить часы FIFO на следующем?

например:

fifo_d_in( 7 downto 0 ) <= shift_register;
fifo_clk <= '1';

or

if( state = one ) then
    fifo_d_in( 7 downto 0 ) <= shift_register;
    state <= two;
elsif( state = two ) then
    fifo_clk <= '1';
end if;

Моя интуиция подсказывает мне, что я должен сначала настроить данные, чтобы удовлетворить требованиям настройки и удержания входных регистров.

Спасибо!


person Marcus10110    schedule 09.04.2013    source источник
comment
Есть ли у вашего FIFO вход типа включения часов (CLKEN)?   -  person Austin Phillips    schedule 09.04.2013
comment
@AustinPhillips, да, это так. Могу ли я просто утверждать, что в тот же момент, когда я установил данные, на том же фронте тактового сигнала?   -  person Marcus10110    schedule 09.04.2013


Ответы (1)


Данные должны присутствовать для времени настройки до фронта тактового сигнала, поэтому установка часов одновременно с любыми возможными изменениями данных может привести к нестабильному поведению.

Один из способов сконфигурировать регистр сдвига - иметь выходной сигнал, который утверждается после того, как последний бит данных был синхронизирован. Для 8-битного регистра сдвига после 8-го такта сигнал будет утвержден. Любой простой способ сделать это - использовать 3-битный счетчик, когда все биты равны 1, на выходе будет 1. Этот сигнал затем подключается к CLKEN вашего FIFO, так что на 9-м фронте тактового сигнала данные на выходе вашего сдвига Регистр синхронизируется с FIFO. Также можно было бы синхронизировать следующий последовательный бит данных в сдвиговый регистр на 9-м такте.

       shift reg             FIFO
       -------------        ---------
      -|DIN   DOUT |--------| DIN   |
       |      FULL |--------| CLKEN |
     - |>          |      --|>      |
     | -------------      | ---------
     |                    | 
CLK -----------------------

На приведенной выше диаграмме FULL будет объявлен в момент после того, как последний бит данных был синхронизирован для заполнения регистра сдвига, и сброшен в следующем цикле. FULL может быть комбинаторной логикой.

person Austin Phillips    schedule 09.04.2013