![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Функционирование устройства рассматривается как процесс последовательного вычисления выражений, входящих в process. Толчком к запуску процесса является изменение (event -событие) какого либо сигнала, из входящих в список “воспринимаемых” сигналов (sensitivity list). Этот список внешне очень похож на список параметров в других языках высокого уровня. Рассмотрим поведенческую модель декодера dec2х4 (рис.1.3). Декларация интерфейса его уже приводилась, а теперь она будет пополнена архитектурой поведенческого типа.
entity dec2x4 is
port(a, b, enable: in BIT; z: out BIT_VECTOR (0 to 3));
end dec2x4;
architecture dec_seq of dec2x4 is
begin
process (a, b, enable)
variable abar, bbar: BIT;
begin
abar:= not a; --выражение 1
bbar:= not b; -- выражение 2
If enable = ‘1’ then -- выражение 3
z(3) <= not (a and b); -- выражение 4
z(2) <= not (a and bbar); -- выражение 5
z(1) <= not (abar and b); -- выражение 6
z(0) <= not (abar and bbar); -- выражение 7
else z <= “1111”;
end if;
end process;
end dec_seq;
Архитектура имеет свое имя dec_seq. О принадлежности архитектуры к описанию интерфейса dec2х4 говорит выражение: dec_seq of dec2x4. Список сигналов, которыми запускается процесс, дан в скобках: process (a, b, enable). До начала процесса, если необходимо, декларируются переменные variable abar, bbar: BIT. Зона действия их ограничена данным процессом (от begin до end process). Предположим, что в момент T произошло изменение сигнала а. Новое значение переменной abar (выражение 1) вычисляется и присваивается без задержки – мгновенно (в качестве знака присваивания в данном случае используется =). Без задержки будут вычислены выражения 2 и 3.
Далее в ходе процесса одно за другим вычисляются выражения от 4 до 7, а новые значения сигналам z(0), z(1), z(2), z(3) будут присвоены (в качестве символа оператора присвоения используется <=) лишь через некоторую, пусть даже фиктивную (бесконечно малую), задержку D. Это существенное отличие процедур присвоения для переменных и для сигналов.
Рассмотрим пример мультиплексора 4х1 (рис.1.4). Четыре входных сигнала A, B, C и D выводятся через один порт Z. Коммутация осуществляется сигналом CTRL.
Рис. 1.4. Мультиплексор 4х1.
entity MUX is
port (A, B, C, D: in BIT; CTRL: in BIT_VECTOR(0 to 1);
Z: out BIT);
end MUX;
architecture MUX_BEHAVIOR of MUX is
begin
PMUX: process (A, B, C, D, CTRL)
variable TEMP: BIT;
begin
case CTRL is
when "00" => TEMP:= A:
when "01" => TEMP:= B;
when "10" => TEMP:= C;
when "11" => TEMP:= D;
end case;
Z <= TEMP;
end process PMUX;
end MUX_BEHAVIOR;
Архитектура получила название MUX_BEHAVIOR, процесс имеет ярлык PMUX. Переменной TEMP в зависимости от значения сигнала CTRL присваивается значение одного из входных портов: A, когда CTRL имеет значение “00”; B, когда CTRL имеет значение “01”; A, когда CTRL имеет значение “10”; D, когда CTRL имеет значение “11”.
Для описания синхросигналов обычно используется атрибу EVENT. Он истинен когда происходит “событие” - изменение сигнала. Например, поведение D-триггера, показанного на рис.1.5, можно описать так:
Рис.1.5. D-триггер
entity dff is
port (data, clk: in BIT
q, notq: out BIT);
end dff;
architecture behav of dff is
begin
process (clk)
begin
if (clk’event and clk = ‘1’) then
q <= data;
notq <= not data;
end if;
end process;
end behav;
Выражение (clk’event and clk = ‘1’) задает условие: если сигнал clk меняется с ‘0’ на ‘1’
Дата публикования: 2015-03-29; Прочитано: 205 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!