моап 2011 04

43
09.02.2011 Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected] 1 Параллельные Параллельные и и последовательные операторы последовательные операторы Языки описания аппаратуры

Upload: irina-hahanova

Post on 15-Jun-2015

753 views

Category:

Education


2 download

TRANSCRIPT

Page 1: моап 2011 04

09.02.2011

Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

1

ПараллельныеПараллельные и и последовательные операторыпоследовательные операторы

Языки описания аппаратуры

Page 2: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Цель лекции: Изучение основных последовальных и параллельных операторов VHDL

Содержание:1. Последовательные и параллельные операторы 2. Создание VHDL-моделей триггеров 3. Оператор If4. VHDL-модель мультиплексора5. Условный и селективный параллельные операторы6. Оператор case7. Оператор Null8. Оператол Loop9. Процесс с оператором wait10. Cигналы11. Переменные12. Константы

Page 3: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ПоследовательныеПоследовательные и параллельные операторы и параллельные операторы

ПараллельныеA <= B; -- оператор 1 B <= C; -- оператор 2 C <= D; -- оператор 3

time delta A B C D0 +0 1 2 3 010 +0 1 2 3 4 (оператор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) beginA <= B; -- оператор 1 B <= C; -- оператор 2 C <= D; -- оператор 3 end process;

time delta A B C D0 +0 1 2 3 010 +0 1 2 3 4 (выполняются операторы 1,2,3;

затем обновляются A,B,C)10 +1 2 3 4 4 (выполняются операторы 1,2,3;

затем обновляются A,B,C)10 +2 3 4 4 4 (выполняются операторы 1,2,3;

затем обновляются A,B,C)10 +3 4 4 4 4 (никаких действий не происходит)

Page 4: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Последовательные и параллельные операторы (2)1. Заполнить таблицу, выполнив моделирование параллельных операторовA <= B after 5 ns; B <= C after 5 ns; C <= D after 5 ns;

2. Заполнить таблицу, выполнив моделирование последовательных операторовprocess (B, C, D) begin

A <= B after 5 ns; B <= C after 5 ns; C <= D after 5 ns;

end process;

time delta A B C D

time delta A B C D

Page 5: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Оператор назначения сигнала

Синтаксис: signal_name <= [delay_mechanism ] waveform ;

Форма сигнала:waveform_element ::= value_expression [ aftertime_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;

Page 6: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Оператор If

if condition thensequential statements l

elsesequential statements 2

end if;

Примерif CLK = '1' then

Q <= D after 10 ns; QN <= not D after 10 ns;

end if;

if condition thensequential

statements{elsif condition then

sequential statements }[else

sequential statements]end if;

Page 7: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Оператор case (1)

Синтаксис:case expression is

when choice1 => sequential statementslwhen choice2 => sequential statements2. . . [when others => sequential statements]

end case ;Первым вычисляется выражение expression. Если оно равно choice1, то выполняется последовательный statements1; если – choice2, то выполняется последовательный оператор statements2. Все возможные значения выражения должны быть включены в поля выбора. Если они явно не задаются, в case нужно использовать идентификатор when others.

Page 8: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Оператор case (2)

Type sel_type is range 0 to 3;Signal Sel: sel_type;case Sel is

when 0 => F <= I0;when 1 => F <= I1;when 2 => F <= I2;when 3 => F <= I3;

end case;

I

I

I

I

0

1

2

3

Sel

FMUX

Page 9: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Оператор Null Используется, если нет необходимости в каком

либо действии, но по правилам синтаксиса оператор должен присутствовать.

Синтаксис [label:] null;

Примерcase opcode is

when add => Ace := Ace + operand;when subtract => Ace := Ace - operand;when nop => null;

end case;

Page 10: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Условный и селективный параллельные операторы назначения сигнала (1) Условный оператор назначения сигнала

(conditional signal assignment statement):signal_name <= expression1 when condition1

else expression2 when condition2. . .

[else expressionN];

Селективный оператор назначения сигнала(selected signal assignment statement):

with expression selectsignal_name <= waveform1 when choices1,

waveform2 when choices2,. . .

[waveformN when choicesN,][waveformN+1 when others];

Условный и селективный операторы являются параллельными

Page 11: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Условный и селективный параллельные операторы назначения сигнала (2)

Реализация мультиплексора « 4 в 1»1. С условным оператором:

F <= I0 when Sel = 0else I1 when Sel = 1 else I2 when Sel = 2 else I3;

2. С селективным оператором:with Sel selectF <= I0 when 0,

I1 when 1,I2 when 2,I3 when 3;

I

I

I

I

0

1

2

3

Sel

FMUX

Page 12: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ДешифраторДешифратор

DECi0f0f1f2f3f4f5f6f7

i1i2

i2 i1 i0 f7 f6 f5 f4 f3 f2 f1 f00 0 0 0 0 0 0 0 0 0 10 0 1 0 0 0 0 0 0 1 00 1 0 0 0 0 0 0 1 0 00 1 1 0 0 0 0 1 0 0 01 0 0 0 0 0 1 0 0 0 01 0 1 0 0 1 0 0 0 0 01 1 0 0 1 0 0 0 0 0 01 1 1 1 0 0 0 0 0 0 0

library IEEE;use IEEE.std_logic_1164.all;

entity decoder isport (i : in std_logic_vector(2 downto 0);

f : out std_logic_vector(7 downto 0));end decoder ; architecture arch of decoder isbegin

with i selectF <= “00000001” when “000”,

“00000010” when “001”,“00000100” when “010”,“00001000” when “011”,“00010000” when “100”,“00100000” when “101”,“01000000” when “110”,“10000000” when others;

end arch;

Задание: создать модель декодера используя операторы if, case и условный параллельный оператор

Page 13: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ШифраторШифратор

Coder f0i0i1i2i3i4i5i6i7

f1f2

i7 i6 i5 i4 i3 i2 i1 i0 f2 f1 f00 0 0 0 0 0 0 1 0 0 00 0 0 0 0 0 1 0 0 0 10 0 0 0 0 1 0 0 0 1 00 0 0 0 1 0 0 0 0 1 10 0 0 1 0 0 0 0 1 0 00 0 1 0 0 0 0 0 1 0 10 1 0 0 0 0 0 0 1 1 01 0 0 0 0 0 0 0 1 1 1

library IEEE;use IEEE.std_logic_1164.all;

entity decoder isport(i : in std_logic_vector(7 downto 0);

f : out std_logic_vector(2 downto 0));end decoder ; architecture arch of decoder isbegin

with i selectF <= “000” when “00000001”,

“001” when “00000010” ,“010” when “00000100” ,“011” when “00001000” ,“100” when “00010000” ,“101” when “00100000” ,“110” when “01000000” ,“111” when others ;

end arch;

Задание: создать модель шифратора используя операторы if, case и условный параллельный оператор

Page 14: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ПараллельныйПараллельный сдвигательсдвигатель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 isbegin

with amt selecty<= 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;

Page 15: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

DD--триггертриггерLatch

QD

En

Flip-flop

QD

Clk

D En Q+

0 1 01 1 1x 0 Q

D Clk Q+

0 r 01 r 1x 0 Qx 1 Qx f Q

r – передний фронт (0 -> 1),f – заданий фронт (1 -> 0),

library IEEE;use IEEE.std_logic_1164.all;entity DFF isport (D, CLK: in std_logic;

Q: out std_logic); end DFF;architecture SIMPLE of DFF is

beginprocess (CLK)begin

if CLK = '1' thenQ <= D;

end if;end process;

end SIMPLE;

library IEEE;use IEEE.std_logic_1164.all;entity DFF isport (D, En: in std_logic;Q: out std_logic); end DFF;architecture SIMPLE of DFF isbegin

process (D, En)beginif En = '1' then

Q <= D;end if;

end process;end SIMPLE;

Page 16: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

RSRS--триггертриггерR

S

Q

Q_

R S Q+

0 0 Q0 1 1 01 0 0 11 1 запрещенная

комбинация

QQ

library IEEE;use IEEE.std_logic_1164.all;entity RS_FF isport (R, S: in std_logic;

Q, nQ: out std_logic); end RS_FF ;architecture SIMPLE of RS_FF is

signal Qin, nQin: std_logic;begin

process (R,S)beginif R = '1' then

Qin <= '0' ; nQin <= '1' ;elsif S = '1' then

Qin <= '1' ; nQin <= '0' ;end if;

end process;Q <= Qin; nQ <= nQin;

end SIMPLE;

Задание: создать модель триггера, используя логические уравнения

Page 17: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

R

S Q

Q_

_

_

Q+

0 00 1 0 11 0 1 01 1 Q

запрещеннаякомбинация

QR S

Q

library IEEE;use IEEE.std_logic_1164.all;entity nRnS_FF isport (nR, nS: in std_logic;

Q, nQ: out std_logic); end nRnS_FF ;architecture SIMPLE of nRnS_FF is

signal Qin : std_logic;begin

process (nR, nS)beginif nR = '0' then

Qin <= '0' ; elsif nS = '0' then

Qin <= '1' ; end if;

end process;Q <= Qin; nQ <= not Qin;

end SIMPLE;

R’S’R’S’--триггертриггер

Задание: создать модель триггера, используя логические уравнения

Page 18: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

JKJK--триггертриггерQN Q

RN SN

K CLK J

JKFF

library IEEE;use IEEE.std_logic_1164.all;entity JKFF is

port (SN, RN, J, K, CLK: in std_logic; Q, QN : out std_logic);

end JKFF;architecture JKFF1 of JKFF is

signal Qin: std_logic;begin

process (SN, RN, CLK) beginif RN = '0' then

Qin <= '0' after 10 ns; -- сброс в 0elsif SN = '0' then

Qin<= '1' after 10 ns; -- установка в 1elsif 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 ;

J K Q+

1 0 10 1 01 1 Q'0 0 Q

Уравнение:Q+ = JQ' + K'Q

Page 19: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

СинхронныеСинхронные управляющие сигналыуправляющие сигналы

QD SClk Clk

QDS

Clk

Триггер с синхронизацией по переднему фронту и синхронной установкой

library ieee; useieee.std_logic_1164.all;

entity flop isport(Clk, D, S: in std_logic;

Q: out std_logic);end flop;architecture archi of flop isbeginprocess (Clk)begin

if Clk'event and Clk='1' thenif S='1' then Q <= '1';else Q <= D; end if;

end if;end process;end archi;

Page 20: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

СигналСигнал разрешения синхронизацииразрешения синхронизации

Триггер с синхронизацией по переднему фронту и разрешением синхронизации

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 isbegin

process (Clk)begin

if Clk'event and Clk = '1' thenif CE='1' then

Q <= D;end if; end if;

end process;end archi;

QD

CEClk

Page 21: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ЗаданиеЗадание1. Разработать модель n

разрядного счетчика

2. На основе созданной модели разработать структурную модель m*n разрядного счетчика

Описание N=номер в списке группы + 3

Все изменения состояния счетчика происходят по переднему фронту синхроимпульса. Счетчик генерирует перенос (Cout) в состоянии (2n-1), если T = 1, поэтому

Q

Cout

Dn nCounter

Clr

EnTLd

Clr Ld En T1 X X X 0 Cброс0 1 X X D Параллельная загрузка0 0 1 0 Q Сохранение состояния0 0 0 1 Q Сохранение состояния0 0 1 1 Q + 1 Счет на увеличение

ОписаниеУправляющие сигналы Q+

Q

Cout

Q

Cout Carry2

Q2D2Q1D1 D D

Clr Clr

EnTLd

EnTLd

ClrNLdNClk

Carry1EnT1

En

Можно использовать VHDL-модель счетчика 74163 [1,стр 77-79]

Группа 5 6 9m 2 3 4

Page 22: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ЦиклыЦиклы:: LoopLoop Синтаксис:

[ 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];

Page 23: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ЦиклыЦиклы:: Loop. Loop. ПримерыПримеры Пример 1

signal Clock : BIT := '0'; ...

Clk_1: process (Clock) beginL1: loop

Clock <= not Clock after 5 ns; end loop L1; end process Clk_1;

Пример 2L2: loop

A:= A+1; exit L2 when A > 10;

end loop L2;

Page 24: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ЦиклыЦиклы:: 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 loopOutput_X(i) <= Input_X(i+8) after 5 ns;i := i + 1;

end loop L3;end process Shift_3;

Page 25: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

ЦиклыЦиклы:: For

Синтаксис:[loop-label:] for loop-index in range loop

sequential statementsend loop [loop-label];

Пример:for count_value in 0 to 127 loop

count_out <= count_valueafter 5 ns;end loop;

Page 26: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Процесс

Со списком чувствительности:process(sensitivity-list) begin

sequential-statementsend process;

С оператором waitprocessbegin

sequential-statementswait-statementsequential-statementswait-statement

end process;

В процессе не может одновременно использоваться оператор wait и список чувствительности.

Page 27: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Оператор 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;

Page 28: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Сигналы Сигналы декларируются вне процесса, в начале архитектуры. Они предназначены для связи между процессами и могут использоваться в любом месте в пределах архитектуры.

Синтаксис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

Page 29: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Переменные Переменные могут применяться для локального хранения

данных в процессах, процедурах и функциях. Они должны быть объявлены в процессе, процедуре или функции в которых используются и являются локальными для них.

Синтаксис:variable variable_name {, ...} : type_name [ := initial_value];

Оператор присваивания для переменных:Variable_name: = expression;

Пример:variable FreeAccess : Boolean := true; variable E : BIT; variable I : INTEGER;

Page 30: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Различие между переменными и сигналами

Процесс с переменнымиentity dummy isport (trigger: in integer);

end dummy ;

architecture var of dummy issignal sum: integer:=0;

beginprocessvariable var1: integer:=1;variable var2: integer:=2;variable var3: integer:=3;

beginwait on trigger;var1 := var2 + var3;var2 := var1 ;var3 := var2 ;sum <= var1 + var2 + var3;

end process;end var;

Процесс c сигналамиentity dummy is

port (trigger: in integer);end dummy;

architecture sig of dummy issignal sum: integer:=0;signal sig1: integer:=1;signal sig2: integer:=2;signal sig3: integer:=3;

beginprocessbegin

wait on trigger;sig1 <= sig2 + sig3;sig2 <= sig1;sig3 <= sig2; sum <= sig1 + sig2 + sig3;

end process;end sig;

var1 2+3=5var2 5var3 5sum 5+5+5=15

Page 31: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Константы

Синтаксис: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;

Page 32: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Выводы

Операторы в VHDL бывают параллельные и последовательные: Параллельные операторы:

паралельный оператор назначения сигнала условный оператор назначения сигнала селективный оператор назначения сигнала

Последовательные операторы: оператор if оператор case оператор цикла loop оператор цикла while оператор цикла for

Оператор process является параллельным оператором, содержит последовательные операторы. Существуют две формы оператора: со списком чувствительности и с операторами wait.

Page 33: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Контрольные вопросы и задания (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";

Page 34: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Контрольные вопросы и задания (1)1. Какой(какие) из следующих примеров содержит ошибку. a) A объект типа BITcase A is

when '0' => report "Error";when '1' => report "OK";

end case;b) A объект типа INTEGERcase A is

when 0|1|2 => report "Error#1";when 3|4 => report "Error#0";when others => report "OK";

end case;c)A объект типа STD_LOGICcase A is

when 'U'|'X'|'Z'|'W' => report "Unknown";when '1'|'H' => report "High";when '0'|'L' => report "Low";

end case;

Page 35: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

3. Создать процесс, эквивалентный условному оператору назначения сигнала:mux_logic:

z <= a and not b after 5 ns when enable='1' and sel='0' elsex 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-триггера.

Контрольные вопросы и задания (2)

Page 36: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Контрольные вопросы и задания (3)

1. Нарисуйте диаграмму для сигнала Q.entity TEST isport (C, D:in BIT;

Q :out BIT);end entity TEST;

architecture BEHAVIORAL of TEST isbeginprocess (C)beginif C='1' thenQ <= D;

end if;end process;

end architecture BEHAVIORAL;

C

D

Q

Page 37: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Контрольные вопросы и задания (4)Какой из следующих процессов содержит ошибку.a)process (A)

beginif FALLING_EDGE(A) then

Y <= A after 5 ns;elsif RISING_EDGE(A) then

Y <= A after 7 ns;end if;

end process;

c) process (A)begin

if FALLING_EDGE(A) thenY <= A after 5 ns;

elsif RISING_EDGE(A) thenY <= A after 7 ns;

end if;wait on A;

end process;

b)processbegin

if FALLING_EDGE(A) thenY <= A after 5 ns;

elsif RISING_EDGE(A) thenY <= A after 7 ns;

end if;wait on A;

end process;

Page 38: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Задания для самостоятельной работы (1)

1. Для следующего VHDL-кода пусть D изменяется на '1' в момент времени 5 ns. Описать значения A, B, C, D, E и F и время их формирования. Другими словами, указать значения сигналов во время 5 ns, 5 ns + , 5 ns + 2, ... . Опиcать первые 20 шагов моделирования или до исчезновения изменений сигналов, или до появления периодически повторяющейся последовательности значений сигналов:

entity prob4 isport (D: in bit);

end prob4 ;architecture q1 of prob4 issignal A, B, C, E, F: bit;

beginC <= A;A <= B or D;

P1: process (A) beginB <= A;

end process P1;P2: process

beginwait until A <= '1' ;wait for 0 ns;E <= B;F <= E;

end process P2 ;end architecture q1;

Page 39: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

1. DD-триггер подобен D-триггеру с синхронизацией по фронту, за исключением того, что он может изменять состояние (Q+ = D) при появлении переднего и заднего фронтов синхроимпульса. Триггер имеет вход сброса R. При R = 0 триггер устанавливается в 0 независимо от синхронизации. Записать VHDL-код для DD-триггера.

2. Записать VHDL-код для SR-триггера, используя:a) условный оператор назначения сигналов;b) логические уравнения; Q+<=R' S+R'S'Qc) два логических элемента.

3. Записать интерфейс и поведенческую архитектуру для двухвходового мультиплексора с входными портами: a, b и sel; выходом – z. Когда sel='0', то z<=a. Иначе z<=b. Написать testbench для модели мультиплексора.

Задания для самостоятельной работы (2)

Page 40: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Задания для самостоятельной работы (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. Завершить моделирование после двух изменений на выходах.

Page 41: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Контрольные вопросы и задания (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'иначе

Page 42: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Задания для самостоятельной работы

1. Для каждого из следующих выражений определить является ли оносинтаксически правильным. Если да, то определить его значение.

2*3+6/4 3 + -4“cat”&character(‘0’) true and x and not t or zB”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 Тип X010' или 'L' 0'1' или 'H' 1'

X', 'W', 'Z', 'U', '-' X'

Page 43: моап 2011 04

09.02.2011Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: [email protected]

Задания для самостоятельной работы (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.