Entity example IS. Architecture behave1 of example IS. 2. 2. Переменные и сигналы
ENTITY Example IS PORT ( x0 : IN std_logic; x1 : IN std_logic; x2 : IN std_logic; z : OUT std_logic ); END Lab21;
ARCHITECTURE behave1 OF Example IS
BEGIN z < = '1' WHEN (x2 = '0' AND x1 = '0' AND x0 = '1') OR (x2 = '1' AND x1 = '0' AND x0 = '1') ELSE '0';
END ARCHITECTURE behave1;
В примере описанию комбинационной схемы соответствует параллельный оператор присвоения значения сигналу. Иногда для аналогичных целей используют параллельный оператор PROCESS, в теле которого размещаютпоследовательный оператор присвоения значения сигналу: z < = NOT x2 AND NOT x1 AND x0 OR x2 AND NOT x1 AND NOT x0 OR x2 AND NOT x1 AND x0; С точки зрения и системы моделирования, и системы синтеза различий нет (разве что существует вероятность расхождения между поведением выхода схемы в системе моделирования и реальной схеме. К такому расхождению может приводить ошибка, связанная с неполным перечислением сигналов в списке чувствительности процесса, пункт 1 в разделе 2. 4). Для сложных схем желательно каскадное соединение их фрагментов между собой. Пусть для удобства записи сложной схемы (будем считать схему рисунка 2 сложной) вводятся дополнительные данные, разбивающую сложную схему на отдельные фрагменты. Выходы таких фрагментов обозначим y1, y2, y3. Архитектурное тело программы, когда выходы y1, y2, y3 являются сигналами параллельных операторов, приведено в листинге 2. 2.
Листинг 2. 2 Описание модифицированной схемы рис. 2. 2.
ARCHITECTURE behave2 OF Example IS
SIGNAL y1, y2, y3: std_logic;
BEGIN y1 < = NOT x2 AND NOT x1 AND x0; y2 < = x2 AND NOT x1 AND NOT x0; y3 < = x2 AND NOT x1 AND x0;
z< = y1 OR y2 OR y3;
END ARCHITECTURE behave2;
Однако для сложных последовательных алгоритмов описание исключительно через параллельные операторы иногда считается не удобным и не наглядным, в таком случае предлагается пользоваться оператором PROCESS. Сам оператор PROCESS определяется как параллельный, а в его теле допустимо использование только последовательных операторов, которые исполняются друг за другом в порядке их записи как и в обычных языках программирования. Однако следует иметь в виду, что исполнение последовательного оператора присвоения значения сигналу отличается от исполнения других последовательных операторов. Так как он подчиняется общим правилам присвоения сигналу значения драйвера. Подобный пример приведен в листинге 2. 3. Исполнение последовательности, входящей в оператор PROCESS, инициируется по событийному принципу, то есть при изменении любого сигнала из списка, заключенного в скобках, находящихся непосредственно после ключевого слова PROCESS. Такой список инициирующих сигналов называют списком чувствительности оператора. Иными словами: оператор PROCESS определяет последовательное в порядке записи исполнение входящих (вложенных) в него операторов после каждого возникновения инициирующего события. При отсутствии списка чувствительности у какого либо оператора PROCESS, предполагается безусловное его исполнение после начала моделирования и автоматическая ре-инициализация исполнения после исполнения всех вложенных операторов.
Листинг 2. 3 Описание модифицированной схемы рис. 2. 2.
ARCHITECTURE behave3 OF Example IS
BEGIN
u1: PROCESS (x0, x1, x2) BEGIN z < = NOT x2 AND NOT x1 A ND x0 OR x2 AND NOT x1 AND NOT x0 OR x2 AND NOT x1 AND x0; END PROCESS;
END ARCHITECTURE behave3;
С точки зрения и системы моделирования, и системы синтеза различий нет (разве что возможность появления расхождения между результатами поведения выхода схемы в системе моделирования и реальной схеме, при ошибке, приведенной в пункте 1 в разделе 2. 3).
Ещё больше возможностей для ошибочной реализации поведения схемы в моделирующей программе появляется в случае использования параллельного оператора PROCESS, в теле которого размещенпоследовательный оператор присвоения значения сигналу (листинг 2. 4):
Листинг 2. 4 Описание модифицированной схемы рис. 2. 2.
ARCHITECTURE behave4 OF Example IS
SIGNAL y1, y2, y3: std_logic;
BEGIN u1: PROCESS (x0, x1, x2) BEGIN
y1 < = NOT x2 AND NOT x1 AND x0; y2 < = x2 AND NOT x1 AND NOT x0; y3 < = x2 AND NOT x1 AND x0;
z< = y1 OR y2 OR y3; END PROCESS; END ARCHITECTURE behave4;
В варианте, приведенном в листинге 2. 5, для промежуточных данных используются не сигналы, а переменные. Вместо последовательных операторов назначения значений сигналов используются последовательные операторы присвоения значения переменным. При внешней схожести программ поведение схем будет существенно отличаться.
Листинг 2. 5 Описание модифицированной схемы рис. 2. 2.
ARCHITECTURE behave5 OF Example IS
BEGIN u1: PROCESS (x0, x1, x2) VARIABLE y1, y2, y3: std_logic; BEGIN y1: = NOT x2 AND NOT x1 AND x0; y2: = x2 AND NOT x1 AND NOT x0; y3: = x2 AND NOT x1 AND x0;
z< = y1 OR y2 OR y3; END PROCESS;
END ARCHITECTURE behave5;
2. 2. Переменные и сигналы Язык VHDL основан на концепции строгой типизации данных, т. е. любой единице информации в программе должно быть присвоено имя, и для нее должен быть определен тип. Определение информационной единицы размещается в разделе деклараций программного модуля, в котором оно используется, или иерархически предшествующего модуля. Тип данных определяет набор значений объектов, отнесенных к этому типу, а также набор допустимых преобразований этих данных. Данные разных типов несовместимы в одном выражении. Как уже указывалось ранее, для описания взаимодействия между параллельными операторами в язык VHDL введена специальная категория данных – сигналов ( SIGNAL ). Сигналы кроме значения несут информацию о временных и причинно следственных связях в моделируемой системе. Аргументами параллельного оператора могут быть сигналы или константы. Такой оператор исполняется при изменении значения любого аргумента (в том числе сигнала из списка чувствительности оператора PROCESS ).
Сигналы декларируются в разделе деклараций архитектурного тела (в общем случае в пакете, использование которого объявлено в начале программы), а область действия декларации – все операторы архитектурного тела, за исключением случаев декларации переменной с таким же именем в операторе PROCESS. В цепочке последовательных операторов промежуточные результаты преобразований (не передаваемые другим параллельным операторам) представляют данными, относящимися к категории переменные – VARIABLE (листинг 2. 5). Переменные объявляются в разделе деклараций оператора PROCESS, а область действия декларации – раздел операторов этого процесса (т. е. такая переменная имеет смысл только в разделе операторов этого процесса). Различие «сигналов» и «переменных» состоит в порядке фиксации значения этих данных при исполнении операторов присваивания. Переменная принимает новое значение сразу после исполнения оператора присваивания. При исполнении операторов, которые должны присваивать значения сигналам (параллельным и последовательным), вычисленное значение, как было указано выше, сохраняется во временном буфере, называемом драйвером сигнала. Окончательное присваивание же значения сигналу (перепись из драйвера) производится только после исполнения всех операторов программы, вызванных общим событием. Значение хранящееся в драйвере последовательного оператора присваивания может изменяться в ходе исполнения следующего ряда последовательных операторов присвоения и перезаписываться будет то значение, которое установится последним. Отсюда часто используемое программистами присвоение в начале процесса значение сигнала по умолчанию. В частности при исполнении последовательного оператора присваивания некоторому сигналу этот сигнал сохраняет старое значение не только до исполнения всех операторов процесса или до оператора останова WAIT, а в общем случае и до всех других операторов, инициированных общим событием. Реакция на предсказанное изменение сигнала (новое событие) будет воспроизводиться системой моделирования либо через явно указанный в операторе присваивания временной интервал, либо – в случае «нулевой» задержки после отработки всех событий, предсказанных на этот момент времени ранее выполненными операторами. Правила изменения значений на выходных портах совпадают с правилами изменения сигналов.
При синтезе устройства по VHDL описанию переменным и сигналам, как правило, сопоставляются линии передачи данных или, что тоже самое, выходы некоторых компонентов. Операторы в свою очередь отображаются цифровыми подсхемами, реализующими соответствующие преобразования и подключаемые к линиям связи в соответствии с набором аргументов.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|