2. Цель лекции: Изучение основных
последовальных и параллельных операторов
VHDL
Содержание:
1. Последовательные и параллельные операторы
2. Создание VHDL-моделей триггеров
3. Оператор If
4. VHDL-модель мультиплексора
5. Условный и селективный параллельные операторы
6. Оператор case
7. Оператор Null
8. Оператол Loop
9. Процесс с оператором wait
10. Cигналы
11. Переменные
12. Константы
2
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
3. Последовательные и параллельные операторы
Параллельные
time delta A B C D
A <= B; -- оператор 1
0 +0 1 2 3 0
B <= C; -- оператор 2
10 +0 1 2 3 4 (оператор3 выполняется первым)
C <= D; -- оператор 3
10 +1 1 2 4 4 (затем выполняется оператор 2)
10 +2 1 4 4 4 (затем выполняется оператор 1)
10 +3 4 4 4 4 (отсутствие выполняемых команд)
Последовательные
process (B, C, D) time delta A B C D
begin 0 +0 1 2 3 0
A <= B; -- оператор 1 10 +0 1 2 3 4 (выполняются операторы 1,2,3;
B <= C; -- оператор 2 затем обновляются A,B,C)
C <= D; -- оператор 3 10 +1 2 3 4 4 (выполняются операторы 1,2,3;
end process; затем обновляются A,B,C)
10 +2 3 4 4 4 (выполняются операторы 1,2,3;
затем обновляются A,B,C)
10 +3 4 4 4 4 (никаких действий не происходит)
3
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
4. Последовательные и параллельные
операторы (2)
1. Заполнить таблицу, выполнив моделирование
параллельных операторов
A <= B after 5 ns;
B <= C after 5 ns; time delta A B C D
C <= D after 5 ns;
2. Заполнить таблицу, выполнив моделирование
последовательных операторов
process (B, C, D)
begin
A <= B after 5 ns; time delta A B C D
B <= C after 5 ns;
C <= D after 5 ns;
end process;
4
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
5. Оператор назначения сигнала
Синтаксис:
signal_name <= [delay_mechanism ] waveform ;
Форма сигнала:
waveform_element ::= value_expression [ after
time_expression ] { , ... }
Пример:
signal D_OUT, E_OUT: BIT_VECTOR (3 downto 0);
.............................
D_OUT <= "0000" after 2 ns;
E_OUT <= "0000" after 2 ns, "1111" after 7 ns;
5
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
6. Оператор If
if condition then if condition then
sequential statements l sequential
else statements
sequential statements 2 {elsif condition then
end if; sequential statements }
[else
Пример sequential statements]
if CLK = '1' then
end if;
Q <= D after 10 ns;
QN <= not D after 10 ns;
end if;
6
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
7. Оператор case (1)
Синтаксис:
case expression is
when choice1 => sequential statementsl
when choice2 => sequential statements2
...
[when others => sequential statements]
end case ;
Первым вычисляется выражение expression. Если
оно равно choice1, то выполняется
последовательный statements1; если – choice2, то
выполняется последовательный оператор
statements2.
Все возможные значения выражения должны быть
включены в поля выбора. Если они явно не
задаются, в case нужно использовать идентификатор
when others.
7
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
8. Оператор case (2)
Type sel_type is range 0 to 3;
Signal Sel: sel_type;
case Sel is
I
when 0 => F <= I0; 0
I
when 1 => F <= I1; 1
MUX F
when 2 => F <= I2; I 2
when 3 => F <= I3; I 3
end case; Sel
8
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
9. Оператор Null
Используется, если нет необходимости в каком
либо действии, но по правилам синтаксиса
оператор должен присутствовать.
Синтаксис
[label:] null;
Пример
case opcode is
when add => Ace := Ace + operand;
when subtract => Ace := Ace - operand;
when nop => null;
end case;
9
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
10. Условный и селективный параллельные
операторы назначения сигнала (1)
Условный оператор назначения сигнала
(conditional signal assignment statement):
signal_name <= expression1 when condition1
else expression2 when condition2
...
[else expressionN];
Селективный оператор назначения сигнала
(selected signal assignment statement):
with expression select
signal_name <= waveform1 when choices1,
waveform2 when choices2,
...
[waveformN when choicesN,]
[waveformN+1 when others];
Условный и селективный операторы являются параллельными
10
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
11. Условный и селективный параллельные
операторы назначения сигнала (2)
Реализация мультиплексора « 4 в 1»
1. С условным оператором:
F <= I0 when Sel = 0
else I1 when Sel = 1
I0
else I2 when Sel = 2
else I3; I1
2. С селективным оператором: MUX F
with Sel select I2
F <= I0 when 0,
I1 when 1, I3
I2 when 2,
I3 when 3; Sel
11
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
12. library IEEE;
Дешифратор use IEEE.std_logic_1164.all;
entity decoder is
f0 port (i : in std_logic_vector(2 downto 0);
i0 DEC f1 f : out std_logic_vector(7 downto 0));
i1 f2
i2 f3 end decoder ;
f4 architecture arch of decoder is
f5 begin
f6 with i select
f7
F <= “00000001” when “000”,
i2 i1 i0 f7 f6 f5 f4 f3 f2 f1 f0 “00000010” when “001”,
0 0 0 0 0 0 0 0 0 0 1 “00000100” when “010”,
0 0 1 0 0 0 0 0 0 1 0 “00001000” when “011”,
0 1 0 0 0 0 0 0 1 0 0 “00010000” when “100”,
0 1 1 0 0 0 0 1 0 0 0
“00100000” when “101”,
1 0 0 0 0 0 1 0 0 0 0
“01000000” when “110”,
1 0 1 0 0 1 0 0 0 0 0
“10000000” when others;
1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0 end arch;
Задание: создать модель декодера используя операторы if, case и условный параллельный оператор
12
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
13. library IEEE;
Шифратор use IEEE.std_logic_1164.all;
entity decoder is
i0 port(i : in std_logic_vector(7 downto 0);
i1 Coder f0 f : out std_logic_vector(2 downto 0));
i2 f1
i3 f2 end decoder ;
i4 architecture arch of decoder is
i5 begin
i6 with i select
i7
F <= “000” when “00000001”,
i7 i6 i5 i4 i3 i2 i1 i0 f2 f1 f0 “001” when “00000010” ,
0 0 0 0 0 0 0 1 0 0 0 “010” when “00000100” ,
0 0 0 0 0 0 1 0 0 0 1 “011” when “00001000” ,
0 0 0 0 0 1 0 0 0 1 0 “100” when “00010000” ,
0 0 0 0 1 0 0 0 0 1 1
“101” when “00100000” ,
0 0 0 1 0 0 0 0 1 0 0
“110” when “01000000” ,
0 0 1 0 0 0 0 0 1 0 1
“111” when others ;
0 1 0 0 0 0 0 0 1 1 0
1 0 0 0 0 0 0 0 1 1 1 end arch;
Задание: создать модель шифратора используя операторы if, case и условный параллельный оператор
13
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
14. Параллельный сдвигатель
library ieee;
use ieee.std_logic_1164.all;
entity barrel_shifter is
port(
a: in std_logic_vector(7 downto 0);
amt: in std_logic_vector(2 downto 0);
y: out std_logic_vector(7 downto 0)
);
end barrel_shifter ;
architecture sel_arch of barrel_shifter is
begin
with amt select
y<= a when "000",
a(0) & a(7 downto 1) when "001",
a(1 downto 0) & a(7 downto 2) when "010",
a(2 downto 0) & a(7 downto 3) when "011",
a(3 downto 0) & a(7 downto 4) when "100",
a(4 downto 0) & a(7 downto 5) when "101",
a(5 downto 0) & a(7 downto 6) when "110",
a(6 downto 0) & a(7) when others; -- 111
end sel_arch;
14
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
15. +
Flip-flop D Clk Q
0 r 0
D-триггер D Q 1
x
r
0
1
Q
Clk x 1 Q
Latch x f Q
D En Q+
D r – передний фронт (0 -> 1),
Q 0 1 0 f – заданий фронт (1 -> 0),
1 1 1
En x 0 Q library IEEE;use IEEE.std_logic_1164.all;
entity DFF is
library IEEE;use IEEE.std_logic_1164.all; port (D, CLK: in std_logic;
entity DFF is Q: out std_logic);
port (D, En: in std_logic;Q: out std_logic); end DFF;
end DFF; architecture SIMPLE of DFF is
architecture SIMPLE of DFF is begin
begin process (CLK)
process (D, En) begin
begin if CLK = '1' then
if En = '1' then Q <= D;
Q <= D; end if;
end if; end process;
end process; end SIMPLE;
endХаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru
SIMPLE; 15
09.02.2011
16. RS-триггер library IEEE;use IEEE.std_logic_1164.all;
entity RS_FF is
R Q port (R, S: in std_logic;
Q, nQ: out std_logic);
end RS_FF ;
architecture SIMPLE of RS_FF is
_
Q signal Qin, nQin: std_logic;
S begin
process (R,S)
Q
+
R S Q begin
0 0 Q Q if R = '1' then
0 1 1 0 Qin <= '0' ; nQin <= '1' ;
1 0 0 1 elsif S = '1' then
запрещенная Qin <= '1' ; nQin <= '0' ;
1 1
комбинация end if;
end process;
Q <= Qin; nQ <= nQin;
end SIMPLE;
Задание: создать модель триггера, используя
логические уравнения
16
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
17. R’S’-триггер library IEEE;use IEEE.std_logic_1164.all;
_ entity nRnS_FF is
S Q port (nR, nS: in std_logic;
Q, nQ: out std_logic);
end nRnS_FF ;
architecture SIMPLE of nRnS_FF is
_
Q signal Qin : std_logic;
_
R begin
process (nR, nS)
Q
+
R S Q begin
запрещенная if nR = '0' then
0 0
комбинация Qin <= '0' ;
0 1 0 1 elsif nS = '0' then
1 0 1 0 Qin <= '1' ;
1 1 Q Q end if;
end process;
Q <= Qin; nQ <= not Qin;
end SIMPLE;
Задание: создать модель триггера, используя
логические уравнения 17
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
18. library IEEE;use IEEE.std_logic_1164.all;
entity JKFF is
JK-триггер port (SN, RN, J, K, CLK: in std_logic;
Q, QN : out std_logic);
QN Q end JKFF;
architecture JKFF1 of JKFF is
signal Qin: std_logic;
RN JKFF SN
begin
process (SN, RN, CLK)
+ begin
K CLK J
J K Q
if RN = '0' then
1 0 1 Qin <= '0' after 10 ns; -- сброс в 0
Уравнение: 0 1 0 elsif SN = '0' then
Q+ = JQ' + K'Q 1 1 Q' Qin<= '1' after 10 ns; -- установка в 1
0 0 Q elsif CLK = '0' and CLK'event then
Qin<=(J and not Qin) or
(not K and Qin) after 10ns;
end if;
end process ;
Q<=Qin; QN <= not Qin;
end JKFF1 ;
18
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
19. Синхронные управляющие сигналы
library ieee; use
Триггер с синхронизацией по ieee.std_logic_1164.all;
переднему фронту и синхронной entity flop is
установкой port(Clk, D, S: in std_logic;
Q: out std_logic);
D S
Q
k
l
C
end flop; k
l
C
S
D Q architecture archi of flop is
begin
Clk process (Clk)
begin
if Clk'event and Clk='1' then
if S='1' then Q <= '1';
else Q <= D; end if;
end if;
end process;
end archi; 19
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
20. Сигнал разрешения синхронизации
library ieee; use ieee.std_logic_1164.all;
Триггер с синхронизацией по entity flop is
переднему фронту и port(Clk, D, CE: in std_logic;
разрешением синхронизации Q: out std_logic);
end flop;
architecture archi of flop is
D Q begin
CE process (Clk)
begin
Clk if Clk'event and Clk = '1' then
if CE='1' then
Q <= D;
end if; end if;
end process;
end archi;
20
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
21. Задание
1. Разработать модель n Описание
разрядного счетчика
Counter N=номер в списке группы + 3
n n
D Q
En Группа 5 6 9
T Cout m 2 3 4
Ld
Clr
Все изменения состояния счетчика
происходят по переднему фронту
синхроимпульса. Счетчик
2. На основе созданной модели генерирует перенос (Cout) в
разработать структурную состоянии (2n-1), если T = 1,
модель m*n разрядного поэтому
счетчика Управляющие сигналы
Q+ Описание
D Q Q1 D2 D Q Q2
Clr Ld En T
D1
En En
1 X X X 0 Cброс
En Carry1 En
T1 T Cout T Cout Carry2 0 1 X X D Параллельная загрузка
Ld Ld 0 0 1 0 Q Сохранение состояния
Clr Clr
0 0 0 1 Q Сохранение состояния
ClrN 0 0 1 1 Q+1 Счет на увеличение
LdN
Clk
Можно использовать VHDL-модель счетчика 74163 [1,стр 77-79] 21
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
22. Циклы: Loop
Синтаксис:
[ loop_label: ] loop
{ sequential_statement }
end loop [ loop_label ] ;
Для окончания цикла может использоваться оператор
exit:
[ label: ] exit [ loop_label ][when boolean _expression];
Если метка не указана, то выполняется выход из
цикла, содержащего оператор exit. Для прерывания
текущей итерации – оператор next:
[ label:] next [ loop_label ] [when boolean _expression];
22
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
23. Циклы: Loop. Примеры
Пример 1
signal Clock : BIT := '0';
...
Clk_1: process (Clock)
begin
L1: loop
Clock <= not Clock after 5 ns;
end loop L1;
end process Clk_1;
Пример 2
L2: loop
A:= A+1;
exit L2 when A > 10;
end loop L2;
23
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
24. Циклы: While
Синтаксис:
[ loop_label: ] while condition loop
{ sequential_statement }
end loop [ loop_label ] ;
Пример:
Shift_3: process (Input_X)
variable i : POSITIVE := 1;
begin
L3: while i <= 8 loop
Output_X(i) <= Input_X(i+8) after 5 ns;
i := i + 1;
end loop L3;
end process Shift_3;
24
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
25. Циклы: For
Синтаксис:
[loop-label:] for loop-index in range loop
sequential statements
end loop [loop-label];
Пример:
for count_value in 0 to 127 loop
count_out <= count_valueafter 5 ns;
end loop;
25
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
26. Процесс
Со списком С оператором wait
чувствительности: process
process(sensitivity-list) begin
begin sequential-statements
sequential-statements wait-statement
end process; sequential-statements
wait-statement
end process;
В процессе не может одновременно использоваться оператор wait и
список чувствительности.
26
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
27. Оператор wait
Синтаксис:
[ label: ] wait | on signal _name {,...} |
until boolean_expression |
for time_expression ] ;
Пример 3:
wait until clk = 1; wait for 1 ms;
Оператор wait может содержать комбинацию из нескольких
форм:
wait on clk until reset = '0';
wait until trigger = '1' for 1 ms;
Следующая форма выполняет приостановку процесса до
окончания моделирования.
wait;
27
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
28. Сигналы
Сигналы декларируются вне процесса, в начале
архитектуры. Они предназначены для связи между
процессами и могут использоваться в любом месте в
пределах архитектуры.
Синтаксис
signal signal_name {, ...} : type_name [ := initial_value
];
Оператор назначения для сигнала:
Signal_name < = expression [after delay];
Пример:
architecture ExDecl of DataTransm is
signal Temp: Std_Logic;
signal FlagC, FlagZ: Bit;
begin
28
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
29. Переменные
Переменные могут применяться для локального хранения
данных в процессах, процедурах и функциях. Они
должны быть объявлены в процессе, процедуре или
функции в которых используются и являются локальными
для них.
Синтаксис:
variable variable_name {, ...} : type_name [ := initial_value];
Оператор присваивания для переменных:
Variable_name: = expression;
Пример:
variable FreeAccess : Boolean := true;
variable E : BIT;
variable I : INTEGER;
29
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
30. Различие между переменными и сигналами
Процесс с переменными Процесс c сигналами
entity dummy is entity dummy is
port (trigger: in integer); port (trigger: in integer);
end dummy ; end dummy;
architecture sig of dummy is
architecture var of dummy is signal sum: integer:=0;
signal sum: integer:=0; signal sig1: integer:=1;
begin signal sig2: integer:=2;
process
variable var1: integer:=1; signal sig3: integer:=3;
variable var2: integer:=2; begin
process
variable var3: integer:=3; begin
begin wait on trigger;
wait on trigger; sig1 <= sig2 + sig3;
var1 := var2 + var3; sig2 <= sig1;
var2 := var1 ;
var3 := var2 ; sig3 <= sig2;
sum <= var1 + var2 + var3; sum <= sig1 + sig2 + sig3;
end process; end process;
end var; end sig;
var1 2+3=5
var2 5
var3 5
sum 5+5+5=15
30
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
31. Константы
Синтаксис:
constant constant_name {, ...} : type_name :=
constant_value [:=expression];
Постоянная задержка delay1 типа time, имеющая
значение 5 ns, может быть определена как:
constant delay1: time: =5 ns;
Пример:
type WeekDay is (Mon,Tue,Wed,Thu,Fri,Sat,Sun);
constant StartDay : WeekDay := Sat;
constant LogicalGND : Bit := ‘0’;
constant BusWidth, QueueLength : Integer := 16;
constant CLKPeriod : Time := 15 ns;
constant MaxSimTime : Time := 200 * CLKPeriod;
31
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
32. Выводы
Операторы в VHDL бывают параллельные и
последовательные:
Параллельные операторы:
паралельный оператор назначения сигнала
условный оператор назначения сигнала
селективный оператор назначения сигнала
Последовательные операторы:
оператор if
оператор case
оператор цикла loop
оператор цикла while
оператор цикла for
Оператор process является параллельным
оператором, содержит последовательные операторы.
Существуют две формы оператора: со списком
чувствительности и с операторами wait.
32
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
33. Контрольные вопросы и задания (1)
1. Пусть сигнал s в текущий момент имеет значение
'0'. Чему будут равны булевы переменные v1 и v2
после выполнения следующих операторов в
процессе?
S<='1';
v1 :=s;
wait on s;
v2:=s;
2. Создать процесс, эквивалентный параллельному
оператору выбора назначения сигнала:
with bit_vector’(s, r) select
q <= q when "00",
'0' when "01",
'1' when "10",
'Z' when "11";
33
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
34. Контрольные вопросы и задания (1)
1. Какой(какие) из следующих примеров содержит ошибку.
a) A объект типа BIT
case A is
when '0' => report "Error";
when '1' => report "OK";
end case;
b) A объект типа INTEGER
case A is
when 0|1|2 => report "Error#1";
when 3|4 => report "Error#0";
when others => report "OK";
end case;
c)A объект типа STD_LOGIC
case A is
when 'U'|'X'|'Z'|'W' => report "Unknown";
when '1'|'H' => report "High";
when '0'|'L' => report "Low";
end case;
34
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
35. Контрольные вопросы и задания (2)
3. Создать процесс, эквивалентный условному оператору
назначения сигнала:
mux_logic:
z <= a and not b after 5 ns when enable='1' and sel='0' else
x or y after 6 ns when enable = '1' and sel := '1' else
'0' after 4 ns;
4. Разработать поведенческую модель мультиплексора
4x1. Использовать тип std_logic для входных портов.
Задержка распространения сигнала от входа до выхода
равна 4,5 ns. Следует описать задержку как константу и
использовать ее в архитектуре.
5. D-триггер с синхронизацией по уровню сохраняет свое
значение, если G = 0, и Q=D, если G = 1. Используя
оператор процесса, записать VHDL-код D-триггера.
35
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
36. Контрольные вопросы и задания (3)
1. Нарисуйте диаграмму для сигнала Q.
entity TEST is C
port (C, D:in BIT; D
Q :out BIT); Q
end entity TEST;
architecture BEHAVIORAL of TEST is
begin
process (C)
begin
if C='1' then
Q <= D;
end if;
end process;
end architecture BEHAVIORAL;
36
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
37. Контрольные вопросы и задания (4)
Какой из следующих процессов содержит ошибку.
a)process (A)
begin b)process
if FALLING_EDGE(A) then begin
Y <= A after 5 ns;
elsif RISING_EDGE(A) then if FALLING_EDGE(A) then
Y <= A after 7 ns; Y <= A after 5 ns;
end if; elsif RISING_EDGE(A) then
end process; Y <= A after 7 ns;
end if;
c) process (A) wait on A;
begin
if FALLING_EDGE(A) then end process;
Y <= A after 5 ns;
elsif RISING_EDGE(A) then
Y <= A after 7 ns;
end if;
wait on A;
end process;
37
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
38. Задания для самостоятельной работы (1)
1. Для следующего VHDL-кода пусть D изменяется на '1' в
момент времени 5 ns. Описать значения A, B, C, D, E и F
и время их формирования. Другими словами, указать
значения сигналов во время 5 ns, 5 ns + , 5 ns + 2, ... .
Опиcать первые 20 шагов моделирования или до
исчезновения изменений сигналов, или до появления
периодически повторяющейся последовательности
значений сигналов:
P1: process (A) begin
entity prob4 is B <= A;
port (D: in bit); end process P1;
end prob4 ; P2: process
architecture q1 of prob4 is begin
signal A, B, C, E, F: bit; wait until A <= '1' ;
wait for 0 ns;
begin
E <= B;
C <= A; F <= E;
A <= B or D; end process P2 ;
end architecture q1;
38
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
39. Задания для самостоятельной работы (2)
1. DD-триггер подобен D-триггеру с синхронизацией по
фронту, за исключением того, что он может изменять
состояние (Q+ = D) при появлении переднего и заднего
фронтов синхроимпульса. Триггер имеет вход сброса R. При
R = 0 триггер устанавливается в 0 независимо от
синхронизации. Записать VHDL-код для DD-триггера.
2. Записать VHDL-код для SR-триггера, используя:
a) условный оператор назначения сигналов;
b) логические уравнения; Q+<=R' S+R'S'Q
c) два логических элемента.
3. Записать интерфейс и поведенческую архитектуру для
двухвходового мультиплексора с входными портами: a, b и
sel; выходом – z. Когда sel='0', то z<=a. Иначе z<=b. Написать
testbench для модели мультиплексора.
39
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
40. Задания для самостоятельной работы (3)
1. Триггер-переключатель имеет входы I0, I1, T и Reset, а
также выходы Q и QN. Сброс триггера происходит при
Reset =1 независимо от значений сигналов на других
входах. Триггер работает следующим образом. Если
I0=1, он меняет состояние по переднему фронту
сигнала T; а если I1 = 1 – по заднему. Если I0=I1= 0,
то триггер сохраняет состояние. Пусть задержка
передачи сигнала от T до выхода – 8 ns, и от сброса до
выхода – 5 ns.
a) Создать VHDL-модель триггера.
b) Записать последовательность команд программы
моделирования для его тестирования. Подать на
входы I1 = 1, I0 = 0. После двухкратного
переключения триггера подать набор I1 = 0, I0 = 1.
Завершить моделирование после двух изменений на
выходах.
40
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
41. Контрольные вопросы и задания (2)
2. Записать декларацию константы размером 32 бита для
числа ?
3. Записать декларации переменных: счетчик counter
инициализированный 0; флаг-статуса flag-busy
указывающую занят модуль или нет; temp_result типа
std_ulogic для хранения временных результатов.
4. Записать оператор if который устанавливает переменную
odd в ‘1’, если n нечетно, и odd=’0’, если n – четно.
5. Написать модель тристабильного буффера, используя
стандартную логику для входов data и enable и выхода
output. enable data output
0' или 'L' Z'
1' или 'H' 0' или 'L' 0'
1' или 'H' 1' или 'H' 1'
иначе X'
41
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
42. Задания для самостоятельной работы
1. Для каждого из следующих выражений определить является ли оно
синтаксически правильным. Если да, то определить его значение.
2*3+6/4 3 + -4
“cat”&character(‘0’) true and x and not t or z
B”101110” sll 3 B”100010” sra 2 & X”2C”
2. Записать модель счетчика с синхровходом clk типа bit и выходом типа integer.
Поведенческя архитектура должна содержать процесс в котором декларируется
переменная count инициализируемая нулем. Процесс ожидает изменение clk.
Когда clk переключается в ‘1’ процесс увеличивет count на 1 и передает
значение на выход.
3. Записать модель АЛУ со входом и выходом типа integer и входом выбора
функции select типа bit. Если select=’0’ на выход выдается сумма значений на
входах; иначе на выходе ‘1’, если значение на входах совпадаюн и ‘0’, если –
нет.
4. Записать модель цифрового интегратора имеющего: синхровход clock типа bit,
вход данных и выход типа real. Интегратор выполняет сложение
последовтельности входных данных. По переднему фронту на синхровходе
устройство прибавляет число со входа к сумме и передает ее на выход.
5. Записать оператор case, который переводит переменную x типа std_ulogic в тип
X01 ({‘X’, ‘0’, ‘1’}).
Тип std_ulogic Тип X01
0' или 'L' 0'
1' или 'H' 1'
X', 'W', 'Z', 'U', '-' X'
42
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
43. Задания для самостоятельной работы (2)
6. Записать оператор case, который устанавливает переменную character_cless типа
integer
1, если переменная ch типа character содержит буквы,
2 , если переменная ch содержит цифры
3, если переменная ch содержит остальные печатные символы
4, если переменная ch содержит не печатные символы.
7. Записать цикл, зависящий от входа d. По переднему фронту синхровхода, если
d=’0’ – цикл выполняется, если d=’1’ – выход из цикла.
8. Записать цикл while, вычисляющий экспоненциальную функцию, с точностью до
1/104.
9. Записать цикл for, вычисляющий экспоненциальную функцию, из предыдущей
задачи, точностью до восьми первых слагаемых ряда.
10. Разработать поведенческую модель ограничителя (limiter) с тремя входами типа
integer: data_on, lower и upper. Устройство также имеет выход data_out типа
integer и выход out_of_limits типа bit. Данные со входа data_in поступают на
выход data_out, если его значение находится в пределах lower и upper. Если
data_in меньше lower, то data_out = lower. Если data_in больше upper, то
data_out = upper. Выход out_of_limits=1, когда data_in выходит за пределы lower
и upper.
11. Разработать модель арифметического модуля для чисел с плавающей точкой.с
входами данных: x и y, и выходом z. Также устройство имеет вход выбора
функции типа перечисления со значениями: add.
43
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011