Professional Documents
Culture Documents
Лабораторна робота 2
Лабораторна робота 2
57
Зміна стану лічильника зазвичай виконується за переднім фронтом
синхроімпульсу (CLK). Виділення моменту переднього фронту сигналу в
мові VHDL забезпечується наступною функцією:
rising_edge(CLK)
58
01 -- Listing 4.1
02
03 library IEEE;
04 use IEEE.STD_LOGIC_1164.all;
05 use IEEE.STD_LOGIC_UNSIGNED.all;
06
07 entity counter16 is
08 port(
09 CLK : in STD_LOGIC;
10 Res : in STD_LOGIC;
11 Q : out STD_LOGIC_VECTOR(3 downto 0)
12 );
13 end counter16;
14 architecture counter16 of counter16 is
15 signal mem: STD_LOGIC_VECTOR(3 downto 0);
16 begin
17
18 process (CLK, Res, mem)
19 begin
20 if Res = '1' then mem <= "0000";
21 elsif (rising_edge(CLK)) then
22 mem <= mem + 1;
23 end if;
24 end process;
25
26 Q <= mem;
27
28 end counter16;
!!!
Підключення пакета IEEE.STD_LOGIC_UNSIGNED.all, яке
здійснюється в рядку 05 необхідне для можливості реалізації
оператора інкремента, що застосовується в рядку 22.
!!!
В 22 рядку після оператора «+» записане значення 1 без
поміщення його в лапки, з чого випливає, що це десятинне
значення. Слід пам’ятати, що при використанні мови VHDL
59
десяткові значення не слід поміщати в лапки; однорозрядні
двійкові значення слід поміщати в одинарні лапки, як це зроблено
в 20 та 21 рядках для двійкової одиниці, а багаторозрядні двійкові
значення – в подвійні лапки як це зроблено в 20 рядку для
обнуління вмісту 4-х розрядного сигналу mem.
60
2.3 Процес виконання проекту
61