Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UIR_9sem.doc
Скачиваний:
17
Добавлен:
16.08.2019
Размер:
1.86 Mб
Скачать

Выражения

Выражения могут содержать следующие операторы: преобразование типа, and, or, nand, nor, xor, =, /=, <, <=, >, >=, +, -, &, *, /, mod, rem, abs, not.

В зависимости от выбранной САПР при синтезе может поддерживаться подмножество приведенных выше операторов. Порядок вычисления выражений определяется приоритетом операторов: 

and, or, nand, nor, xor – низший приоритет

=, /=, <, <=, >, >=

+, -, & (бинарные)

+, - (унарные)

*, /, mod, rem

abs, not – высший приоритет 

Операторы с более высоким приоритетом выполняются раньше. Чтобы изменить такой порядок используются скобки.

При моделировании (но не при синтезе) схемы возможно также описание формы сигнала в виде выражения. Записывается оно следующим образом:

Value_expression [ after time_expression ]

{ , value_expression [ after time_expression ] }

 

Операторы

С помощью операторов описывается алгоритм, определяющий функционирование схемы. Они могут находиться в теле функции, процедуры или процесса.

  •  Wait until condition; Приостанавливает выполнение процесса, содержащего данный оператор до момента выполнения условия. 

  • Signal <= expression Оператор присваивания сигнала устанавливает его значение равным выражению справа. 

  • Variable := expression Оператор присваивания переменной устанавливает значение переменной Variable равным выражению справа. 

  • Procedure_name ( parameter { , parameter } ) Оператор вызова процедуры состоит из имени процедуры и списка фактических параметров. 

  • If condition then Sequence_of_statements { Elsif condition then Sequence_of_statements } [ else sequence_of_statements ] end if ;  Оператор if используется для ветвления алгоритма по различным условиям. 

  • Case expression is When choices_list => sequence_of_statements; { When choices_list => sequence_of_statements; } When others => sequence_of_statements; End case; Оператор case подобно оператору if задает ветвление алгоритма. Значения в списках разделяются символом «|». Когда значение выражения встречается в одном из списков значений, выполняется соответствующая последовательность операторов. Если значение выражения не присутствует ни в одном из списков, то выполняется список операторов, соответствующий ветви when others

  • [ loop_label : ] for loop_index_variable in range loop sequence_of_statements end loop [ loop_label ] ;

Пример создания объекта с использованием языка vhdl

Создадим триггер на языке VHDL. Триггер — это элемент, который может сохранять поданный на него логический уровень после снятия входного сигнала. RS-триггер или SR-триггер (set-reset) — триггер, который сохраняет своё предыдущее состояние при нулевых входах, и меняет своё выходное состояние при подаче на один из его входов единицы. При подаче единицы на вход S (от англ. Set - установить) выходное состояние становится равным логической единице. А при подаче единицы на вход R (от англ. Reset - сбросить) выходное состояние становится равным логическому нулю. Если RS-триггер синхронный, то состояние его входов учитывается только в момент тактирования, например по переднему фронту импульса. Состояние, при котором на оба входа R и S одновременно поданы логические единицы, является запрещённым. Так, например, схема RS-триггера, изображённая на рисунке, при подаче на оба инверсных входа логической единицы перейдёт в состояние, когда на обоих выходах будут единицы, что не соответствует логике выхода триггера, поскольку инверсный выход будет равен неинверсному , т.е. , что невозможно. RS-триггер используется для создания сигнала с передним и задним фронтами, отдельно управляемыми посредством стробов, разнесённых во времени.

Рис. 59. Схема RS-триггера

Таблица. 3. Таблица истинности RS-триггера

S

R

Q(t)

Q(t+1)

0

0

0

0

0

0

1

1

0

1

0

0

0

1

1

0

1

0

0

1

1

0

1

1

1

1

0

*

1

1

1

*

  1. Создать отдельную папку на жёстком диске, в которой будут размещаться файлы проекта. Это важный шаг, поскольку без этого программа может не скомпилироваться.

  2. Создать новый файл типа Text. Для этого можно либо выбрать пункт меню Text Editor в меню MAX+PLUS II, либо выбрать пункты New → Text editor file.

Рис. 60. Создание нового текстового файла

  1. Ввести в текстовом редакторе текст программы:

library ieee;

use ieee.std_logic_1164.all;

entity trigger_rs is

-- описания портов ввода-вывода port (

R, S: in BIT;

Q, nQ: inout BIT

);

end trigger_rs;

architecture trigger_rs_arch of trigger_rs is

begin

process (R, S) -- описание логики работы в зависимости от сигналов R и S begin if R='0' and S='0' then Q <= Q ; elsif R='1' and S='0' then Q <= '0' ; elsif R='0' and S='1' then Q <= '1' ; end if; nQ <= not Q; end process; end;

  1. С охранить файл схемы в созданной на 1 шаге папке с расширением VHD и именем, указанным в поле ENTITY. В нашем случае имя файла должно быть trigger_rs.vhd.

Рис. 61. Сохранение файла

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]