Как переменная VHDL синтезируется средствами синтеза


9

Я знаю два способа, которыми переменная VHDL синтезируется инструментом синтеза:

  • Переменная, синтезированная как комбинационная логика
  • Переменная, непреднамеренно синтезированная как Latch (когда неинициализированная переменная назначается сигналу или другой переменной)

Каковы другие способы, которыми переменная VHDL может быть синтезирована? (Пример: это можно интерпретировать как FF?)

Ответы:


8

Я бы выделил три варианта:

  1. Переменная VHDL не имеет аппаратного представления вообще. Предположим, что следующий пример

    signal a,b,c : integer;  
    ...  
    process ( clk ) is  
    variable var : integer := 0;  
    begin  
    if ( rising_edge(clk) ) then  
    var := a + b;  
    c <= var;  
    end if;  
    end process;

    Переменная на varсамом деле вообще не синтезируется как комбинаторная логика (при условии, что это и было в вопросе). Это скорее правая часть задания, a + bкоторая синтезируется в аппаратные средства. Строго говоря, переменная никогда не синтезируется в комбинаторную логику.

  2. Переменная просто содержит промежуточный результат, который либо оценивается в одном и том же тактовом цикле -> аппаратно не синтезировано (это снова 1)), либо оценивается в следующем тактовом цикле -> синтезируется триггер.

  3. Одна из этих страшных защелок выводится в тех случаях, когда существуют условные ветви, в которых переменной не присваивается ни новое значение (в зависимости от некоторых сигналов), ни значение по умолчанию. Обычно этот случай происходит непреднамеренно :-)


«Страшная защелка» может произойти только вне синхронизированного процесса, и большинство людей (по моему опыту) в наши дни не используют не синхронизированные процессы. Так что боязнь зацепки больше не проблема (ИМХО) - она ​​проистекает из тех давних времен, когда вам приходилось писать свою комбинаторную логику в отдельном процессе для своих триггеров
Мартин Томпсон,

4

Если вы используете значение в переменной до его сохранения, вы получите значение, которое было сохранено в прошлый раз, когда процесс сохранил его (в синхронизированном процессе - значение из предыдущего тактового цикла). Это синтезируется как регистр или FF.

Конечно, в первом такте вы получаете мусор, если только вы не инициализировали переменную в предложении сброса.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.