Да. Переменные синтезируются как для FPGA, так и для IC. Процесс — это небольшая часть программного обеспечения, которое моделирует небольшую часть оборудования. Эта небольшая часть программного обеспечения может использовать переменные, но поскольку переменные доступны только внутри процесса, в конечном итоге вы должны управлять сигналом - выходом небольшой части оборудования.
Например, вот некоторая комбинационная логика:
process (A, B, C, D)
variable TMP : std_logic;
begin
if A = '1' then
TMP := B and C;
TMP := TMP and D;
else
TMP := '0';
end if;
F <= TMP;
end process;
Вот пример использования переменной, которая будет синтезировать комбинационную логику на входе D триггера (поскольку он находится в синхронизированном процессе):
process (CLOCK)
variable TMP : std_logic;
begin
if rising_edge(CLOCK) then
TMP := A and B;
Q <= TMP;
end if;
end process;
А вот пример использования переменной в тактируемом процессе, который будет синтезироваться в триггер (с логическим элементом И на входе D):
process (CLOCK)
variable TMP : std_logic;
begin
if rising_edge(CLOCK) then
Q <= TMP;
TMP := A and B;
end if;
end process;
Единственная разница между двумя синхронизируемыми процессами — это порядок. В первом переменная присваивается перед доступом; во втором к нему обращаются до того, как он будет назначен.
Если вы присваиваете значение переменной перед доступом к ней в синхронизированном процессе, будет выведена комбинационная логика;
если вы обращаетесь к переменной перед назначением ей в синхронизированном процессе, будет выведен триггер.
Никогда не обращайтесь к переменной до назначения ей в комбинационном процессе: защелки будут выведены.
Переменные сохраняют свое значение между выполнениями процесса. Следовательно, если доступ к переменной осуществляется до того, как ей присваивается значение в синхронизированном процессе, считанное значение должно быть записано при предыдущем выполнении процесса. В тактированном процессе это предыдущее выполнение будет на предыдущем фронте тактового сигнала: следовательно, предполагается триггер.
person
Matthew Taylor
schedule
22.04.2017