моап 2011 04
Upcoming SlideShare
Loading in...5
×
 

моап 2011 04

on

  • 951 views

 

Statistics

Views

Total Views
951
Views on SlideShare
951
Embed Views
0

Actions

Likes
0
Downloads
10
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

моап 2011 04 моап 2011 04 Presentation Transcript

  • Параллельные ипоследовательные операторы Языки описания аппаратуры Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: 1 hahanova@mail.ru 09.02.2011
  •  Цель лекции: Изучение основных последовальных и параллельных операторов 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
  • Последовательные и параллельные операторы Параллельные time delta A B C DA <= B; -- оператор 1 0 +0 1 2 3 0B <= 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 Dbegin 0 +0 1 2 3 0A <= 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
  • Последовательные и параллельныеоператоры (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
  • Оператор назначения сигнала Синтаксис: 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
  • Оператор Ifif condition then if condition then sequential statements l sequentialelse statements sequential statements 2 {elsif condition thenend 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
  • Оператор 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
  • Оператор 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
  • Оператор 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
  • Условный и селективный параллельныеоператоры назначения сигнала (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
  • Условный и селективный параллельныеоператоры назначения сигнала (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
  • 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 01 1 1 1 0 0 0 0 0 0 0 end arch;Задание: создать модель декодера используя операторы if, case и условный параллельный оператор 12 Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
  • 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 01 0 0 0 0 0 0 0 1 1 1 end arch;Задание: создать модель шифратора используя операторы if, case и условный параллельный оператор 13 Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
  • Параллельный сдвигатель 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
  • + 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 islibrary 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 isarchitecture SIMPLE of DFF is beginbegin 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
  • RS-триггер library IEEE;use IEEE.std_logic_1164.all; entity RS_FF isR 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
  • 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
  • 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 thenQ+ = JQ + KQ 1 1 Q Qin<= 1 after 10 ns; -- установка в 1 0 0 Q elsif CLK = 0 and CLKevent 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
  • Синхронные управляющие сигналы 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 Clkevent 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
  • Сигнал разрешения синхронизации 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 Clkevent 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
  • Задание 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 Счет на увеличениеLdNClkМожно использовать VHDL-модель счетчика 74163 [1,стр 77-79] 21 Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
  • Циклы: 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
  • Циклы: 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
  • Циклы: 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
  • Циклы: 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
  • Процесс Со списком  С оператором 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
  • Оператор 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
  • Сигналы  Сигналы декларируются вне процесса, в начале архитектуры. Они предназначены для связи между процессами и могут использоваться в любом месте в пределах архитектуры.  Синтаксис 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
  • Переменные  Переменные могут применяться для локального хранения данных в процессах, процедурах и функциях. Они должны быть объявлены в процессе, процедуре или функции в которых используются и являются локальными для них.  Синтаксис: 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
  • Различие между переменными и сигналами Процесс с переменными  Процесс 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
  • Константы  Синтаксис: 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
  • Выводы  Операторы в VHDL бывают параллельные и последовательные:  Параллельные операторы:  паралельный оператор назначения сигнала  условный оператор назначения сигнала  селективный оператор назначения сигнала  Последовательные операторы:  оператор if  оператор case  оператор цикла loop  оператор цикла while  оператор цикла for  Оператор process является параллельным оператором, содержит последовательные операторы. Существуют две формы оператора: со списком чувствительности и с операторами wait. 32Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
  • Контрольные вопросы и задания (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
  • Контрольные вопросы и задания (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
  • Контрольные вопросы и задания (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
  • Контрольные вопросы и задания (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
  • Контрольные вопросы и задания (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
  • Задания для самостоятельной работы (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
  • Задания для самостоятельной работы (2) 1. DD-триггер подобен D-триггеру с синхронизацией по фронту, за исключением того, что он может изменять состояние (Q+ = D) при появлении переднего и заднего фронтов синхроимпульса. Триггер имеет вход сброса R. При R = 0 триггер устанавливается в 0 независимо от синхронизации. Записать VHDL-код для DD-триггера. 2. Записать VHDL-код для SR-триггера, используя: a) условный оператор назначения сигналов; b) логические уравнения; Q+<=R S+RSQ c) два логических элемента. 3. Записать интерфейс и поведенческую архитектуру для двухвходового мультиплексора с входными портами: a, b и sel; выходом – z. Когда sel=0, то z<=a. Иначе z<=b. Написать testbench для модели мультиплексора. 39 Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
  • Задания для самостоятельной работы (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
  • Контрольные вопросы и задания (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
  • Задания для самостоятельной работы 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
  • Задания для самостоятельной работы (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