logo
Пособие_VHDL

Типичные ошибки при представлении комбинационных схем на vhdl

Из наиболее распространенных ошибок представления комбинационных схем, приводящих к явно избыточным затратам, а иногда к некорректному поведению синтезированной схемы, отметим следующие.

  1. Неполный список чувствительности процесса порождает «неожиданные» триггеры. Рассмотрим для примера такой оператор

PROCESS(x0, x1)

BEGIN

z <= x0 AND x1 AND x2:

END PROCESS;

Отсутствие в списке чувствительности сигнала x2 синтезатор воспринимает как необходимость использовать триггер, управляемый сигналами x0 и x1.

2. Неполное представление альтернатив в операторах IF и CASE, а также в условных присваиваниях, порождает «неожиданные» триггеры.

Например, казалось бы, конъюнктор можно описать так:

PROCESS( x0, x1 )

BEGIN

IF x0 = '1' THEN z <= x1; END IF;

END PROCESS;

А что делать, если x0 = '0', а x1 изменяется? Такая запись предполагает в этом случае сохранение состояния. Синтезатор в этом случае выбирает триггер с управлением записью уровнем сигнала x1. Для схемы без памяти следовало бы записать

z <= '0';

IF x0 = '1' AND x1 = '1' THEN z <= '1' ;

END IF;

В данном примере это достаточно очевидно, тем более что здесь пользователь, попросту, будет использовать операцию И. Однако в сложных разложениях и случаях не полностью заданных функций подобная ошибка возможна, неочевидна и требует внимательного анализа.

3. Отнесение промежуточных членов разложения логических функций в процессах к категории сигналов может привести к неадекватному моделированию или породить «неожиданные» триггеры.

Пример:

-- a , b, c, d, e, f – сигналы типа BIT

PROCESS (a, b, c)

BEGIN

d <= a AND b;

e <= d AND c;

f <= d AND NOT c;

END PROCESS;

Изменение a или b вызывает исполнение процесса и предсказание изменения сигнала d. Но ввиду того, что это предсказание не изменяет сигнала до окончания процесса, e и f будут определяться на основании устаревшего значения d, а изменение d скажется только при следующей инициализации процесса.