[an error occurred while processing this directive]
|
Первый способ не только Альтера рекомендует, его и в книжках по Верилогу приводят как канонический способ описания конечного автомата. И в описаниях на синтезаторы. Этот способ (с разделением на комбинационную и последовательностную части) синтезатору проще распознать как конечный автомат. Оный способ считается менее error prone, что при сложной логике и большом количестве состояний/переходов как бы более подходяще. Но тут есть и неудобство: если в комбинационной части описываются не только переходы (next_state), но и сопутствующая логика (например, сигнал разрешения какого-нибудь счетчика), то в каждой ветке case нужно описывать все сигналы, в противном случае синтезатор вынужден будет сгенерить защелки (о чем, кстати, он обычно сообщает в предупреждениях), а это не есть то, что нам надо. И описывание всех сигналов в каждой ветке не есть большое удобство. Хотя тут могут помочь, например, task'и.
Второй способ дает абсолютно тот же результат (по синтезу), но в силу того, что в нем все в куче, тут и синтезатору распознать конечный автомат сложнее (хотя Синплифай у меня пока еще ни разу тут не лажанулся :), и, якобы, ошибку сделать проще. Возможно это так, но лично я предпочитаю второй вариант, по крайней мере, на небольших (до 10 стейтов) автоматах. Мне и логика кажется прозрачнее, и писанины меньше, и защелок никаких не образуется.
По конечному результату (по синтезу), как уже говорилось, оба варианта дают одно и то же. Результат в бОльшей степени зависит от синтезатора, нежели от способа описания.
E-mail: info@telesys.ru