2013-12-08 2 views
0

Я работаю над проектом VHDL, который включает fsm. Некоторые состояния изменяются в зависимости от счетчика. Это не работает, пока я не добавлю «clk» в список чувствительности, помимо текущего состояния и ввода. Я знаю, что во время синтеза чувствительность не используется или отбрасывается. Но как это может повлиять на результат моделирования? если оставить этот clk, будет ли fsm работать, как я хочу, чтобы FPGA?В чем разница между синтезом и симуляцией (VHDL)

спасибо,

Дэвид

+0

см. Http: // stackoverflow.com/questions/8991223/when-a-signal-must-be-insert-in-the-sensitive-list-of-the-process – Bull

+0

@David Kester: вы должны показать соответствующий код, чтобы получить точный и конкретный ответ. –

ответ

1

Это простое объяснение:

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

Когда вы синтезируете код в ASIC или FPGA, процесс всегда «работает», поскольку он имеет выделенное оборудование.

Когда вы моделируете конечный автомат без часов в списке чувствительности, процесс никогда не будет работать на краях тактового сигнала, но только при внесении изменений в ваш вход. Если у вас есть переход состояния, реализованный как флип-флоп (если clk'event и clk = '1'), то ваш переход состояния никогда не будет моделироваться, если вы не измените свой вход одновременно с нарастающим фронтом часов. Вероятно, вы должны оставить часы в списке чувствительности, считая изменения FSM на краях тактовых импульсов.

Также попробуйте исправить свои вопросы.

0

Инструменты синтезатора фокусируются на логическом дизайне (FPGA, ASIC) и игнорируют списки чувствительности, поскольку существует только три основных типа логики: комбинационная логика, чувствительная к краям память (триггеры и некоторая оперативная память) и чувствительная к уровню память (защелки) и некоторое ОЗУ).

Комбинационная логика требует, чтобы все входные сигналы находились в списке чувствительности. С точки зрения синтезатора, если он отсутствует, они могут либо игнорировать список чувствительности, либо обрабатывать его так, как если бы все входы находились в списке чувствительности или создавали сложную комбинацию триггеров и комбинационной логики, которые, вероятно, не будут делать то, что пользователь хотел все равно. У обоих из них есть стоимость реализации поставщику, следовательно, зачем вкладывать деньги (время разработки) для создания чего-то, что не полезно. В результате единственная хорошая инвестиция - это упрощение и игнорирование списка чувствительности.

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

Долгий срок может вас радовать, что VHDL-2008 позволяет использовать ключевое слово «все» в списке чувствительности для замены входных сигналов. Это предназначено для упрощения моделирования комбинационной логики. Синтаксис выглядит следующим образом:

MyStateMachine : process(all) 
begin 
    -- my statemachine logic 
end process MyStateMachine ; 

Включите VHDL-2008 переключатель и это в ваш инструмент синтеза. Если он не работает, обязательно сообщите об ошибке в отношении инструмента.

Смежные вопросы