Запрос на синтез VHDL для проектирования микросхем (не FPGA), особенно в случае назначения переменных

Если для данного процесса я объявляю переменную (скажем, 1-битную переменную, variable temp : std_logic;), то могу ли я присвоить значение переменной, если данное условие возвращает true, т.е.

if (xyz=1) then --Assuming that this condition returns TRUE
temp:= '1';

?? Будет ли эта логика синтезирована для ASIC?


person Gaurav Singh    schedule 22.04.2017    source источник


Ответы (1)


Да. Переменные синтезируются как для 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
comment
Итак, я не могу присвоить логические значения переменным?? Придется ли мне назначать сигналы и управлять ими с входного контакта на микросхеме?? - person Gaurav Singh; 23.04.2017
comment
Я не понимаю вашего вопроса. boolean – это тип. У вас может быть boolean сигналов или переменных. Оба были бы синтезируемы. Но лучше использовать тип std_logic, чем boolean, потому что тип boolean не может представлять неизвестный/неинициализированный/пофиг. Я отредактировал вопрос, чтобы попытаться сделать его более ясным. - person Matthew Taylor; 23.04.2017
comment
Я думаю, что я не правильно сформулировал свой вопрос. Я имел в виду, что если мне нужно присвоить значение, скажем, '0' переменной temp, как определено в вопросе выше, нужно ли мне управлять этим значением '0' с вывода на IC (отображается как входной порт) через сигнал, а затем присвойте его переменной или, скажем, в любом процессе для заданного условия, если условие истинно, то присвойте это значение переменной temp, т.е. temp<='0'; Итак, могу ли я напрямую присвоить постоянное значение любой переменной и надеяться, что она будет синтезирована ?? - person Gaurav Singh; 23.04.2017
comment
Я снова отредактировал первый пример. Он поддается синтезу. Константы можно синтезировать. Это отвечает на ваш вопрос? - person Matthew Taylor; 23.04.2017
comment
Да, теперь я думаю, что получил свой ответ. - person Gaurav Singh; 23.04.2017