Применение языка VHDL при проектировании специализированных СБИС. Ивченко В.Г. - 39 стр.

UptoLike

Составители: 

40
'0' after 140 ns,
wait for 150 ns; -- 150 нc - oбщий пepиoд
end process;
Рис. 23. Гeнepaтop cинxpocигнaлa co cлoжнoй вpeмeннoй диaгpaммoй
Приведенные выше примеры моделировались с применением поведенческого стиля описания. Однако
генератор можно описать и в потоковом стиле, как показано на рис. 24. Данный генератор вырабатывает
четырехфазный синхросигнал, реализованный с помощью сигнала типа bit_vector длиной в 4 бита.
signal phases : bit_vector (1 тo 4):="0000";
...
with phases select
phases<="1000" after 100 ns when "0000",
"1000" after 25 ns when "0001",
"0100" after 20 ns when "1000",
"0010" after 25 ns when "0100",
"0001" after 30 ns when "0010",
"0000" when others;
Рис. 24. Четырехфазный генератор
Мы иcпoльзyeм в блoкe пpeдлoжeниe нaзнaчeния c выбopoм cигнaлa для инициaлизaции phases и
кoppeктиpoвки eгo знaчeния. Cнaчaлa phases бyдeт paвeн "0000". Пocлe выпoлнeния нaзнaчeния phases
ycтaнoвитcя в "1000" c зaдepжкoй oтнocитeльнo нaчaлa, paвнoй 100 нc. Зaтeм пpи кaждoм измeнeнии phases
нaзнaчeниe бyдeт выпoлнятьcя внoвь и вычиcлять нoвoe знaчeниe. Bce вoзмoжныe знaчeния дoлжны быть
yчтeны, и пoэтoмy было иcпoльзoвaно ключeвoe cлoвo others для peaкции нa дpyгиe (нeдoпycтимыe) cocтoяния
(в cлyчae, кoгдa имeютcя дpyгиe фopмиpoвaтeли этoгo cигнaлa, кoтopыe мoгyт пpивecти к недoпycтимoмy
cocтoянию). В этoм cлyчae вce биты phases устанавливаются в "0" c дeльтa зaдepжкoй и генератор возвращается
в нaчaльное состояние.
3.5. Контроль ошибок в VHDL
В VHDL предусмотрен оператор для отслеживания ошибок, возникающих при функционировании
моделируемого устройства. Это оператор утверждения (assertion_statement), который проверяет истинность
заданного условия и формирует сообщение об ошибке, если это условие ложно. Например:
assert not(s='1' and r='1')
report "input error: s,r=1"
severity warning;
Сигналы s и r не должны одновременно принимать значение '1'. Ключевые слова report и severity входят в
синтаксис оператора assert. Описание сообщения ("input error: s,r=1") содержит выражение предопределенного
типа STRING, задающее текст сообщения. Описание серьезности содержит выражение предопределенного
перечислимого типа SEVERITY_LEVEL, задающее уровень серьезности утверждения. Возможные значения
типа SEVERITY_LEVEL следующие: NOTE, WARNING, ERROR, FAILURE.
При отсутствии описания сообщения в конкретном утверждении неявным значением строки сообщения
является строка "Assertion violation". При отсутствии описания серьезности в конкретном утверждении неявным
значением уровня серьезности является ERROR.
Вычисление оператора утверждения состоит из вычисления логического булева выражения, задающего
условие. Если это выражение вырабатывает значение FALSE, то имеет место нарушение утверждения. Если это
происходит, то заданная строка сообщения и уровень серьезности (или соответствующие неявные значения)
используются для формирования сообщения об ошибке.
Сообщение об ошибке состоит по крайней мере из:
1) указания, что данное сообщение сгенерировано утверждением;
2) значения уровня серьезности;
3) значения строки сообщения;
4) имени модуля проекта, содержащего это утверждение.
Операторы контроля могут включаться в описание интерфейса или в архитектурное тело объекта
проектирования. Если операторы контроля помещены в архитектурное тело, они будут распространяться только
на конкретную реализацию объекта проектирования. Если же их поместить в описание интерфейса, их можно
будет использовать для проверки временных параметров входных и выходных сигналов любого архитектурного
тела объекта проектирования.
Приведем пример контроля временных параметров:
assert STRB'STABLE(W)
report "Minimum pulse width failure";
-- "ошибка минимальной длительности импульса"