LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNT_T IS
PORT (CLK : IN STD_LOGIC; CLK_S: OUT STD_LOGIC;
SCAN_CLK : OUT STD_LOGIC_VECTOR(1 DOWNTO 0)); END COUNT_T;
ARCHITECTURE BEHAVIORAL OF COUNT_T IS
SIGNALCNT1 : STD_LOGIC_VECTOR(21 DOWNTO 0):=\SIGNAL CLK1 : STD_LOGIC:='0'; BEGIN
--10HZ时钟形成进程 PROCESS(CLK) BEGIN
IF CLK='1' AND CLK'EVENT THEN
IF CNT1=\ CNT1<=(OTHERS =>'0'); CLK1<=NOT CLK1; ELSE
CNT1<=CNT1+1; END IF; END IF;
END PROCESS; CLK_S<=CLK1;
SCAN_CLK<=CNT1(15 DOWNTO 14); END BEHAVIORAL;
-- LED_2.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY LED_2 IS
PORT ( SCAN_CLK : IN STD_LOGIC_VECTOR(1 DOWNTO 0); L1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); L2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); L3 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); A : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END LED_2;
ARCHITECTURE BEHAVIORAL OF LED_2 IS
SIGNAL LED1,LED2,LED3 :STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
WITH L1 SELECT --十位 LED1<= \, --1 \, --2 \, --3 \, --4 \, --5 \, --6
\, --7 \, --8 \, --9 \ --0
WITH L2 SELECT --个位 LED2<= \, --1 \, --2 \, --3 \, --4 \, --5 \, --6 \, --7 \, --8 \, --9 \ --0
WITH L3 SELECT --小数 LED3<= \, --1 \, --2 \, --3 \, --4 \, --5 \, --6 \, --7 \, --8 \, --9 \ --0
PROCESS(SCAN_CLK,LED1,LED2,LED3) BEGIN
CASE SCAN_CLK IS
WHEN \ A<=\ WHEN \ A<=\ WHEN \ A<=\ WHEN \ A<=\
WHEN OTHERS => SEG<=\ A<=\ END CASE; END PROCESS;
END BEHAVIORAL;
--SEC_1.VHD LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SEC_1 IS
PORT (CLK_S : IN STD_LOGIC; K1 : IN STD_LOGIC;
K2 : IN STD_LOGIC; K3 : IN STD_LOGIC; L1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); L2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); L3 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END SEC_1;
ARCHITECTURE BEHAVIORAL OF SEC_1 IS TYPE STATES IS (S0,S1,S2); SIGNAL ST : STATES:=S0;
SIGNAL CNT3 : STD_LOGIC_VECTOR(3 DOWNTO 0):=\SIGNAL CNT4 : STD_LOGIC_VECTOR(3 DOWNTO 0):=\SIGNAL CNT5 : STD_LOGIC_VECTOR(3 DOWNTO 0):=\BEGIN
--24秒倒计时
-- K1: 设置24秒,并暂停,进入状态S2; -- K2: 停表,强制进入状态S0 (什么也不做);
-- K3: 开始倒计时 S1,至0秒时自动停止,进入状态S0; PROCESS(CLK_S) BEGIN
IF CLK_S='1' AND CLK_S'EVENT THEN
IF K1='1'AND K2='0'AND K3='1' THEN ST<=S0; END IF;
IF K1='0'AND K2='1'AND K3='1' THEN ST<=S2; END IF;
IF K1='1'AND K2='1'AND K3='0' THEN ST<=S1; END IF;
CASE ST IS
WHEN S0=> NULL; WHEN S1=> IF CNT5=\ IF CNT4=\ IF CNT3=\ ST<=S0; ELSE CNT4<=\ CNT5<=\ CNT3<=CNT3-1; END IF; ELSE CNT5<=\ CNT4<=CNT4-1; END IF; ELSE CNT5<=CNT5-1; END IF; WHEN S2 => CNT5<=\ CNT3<=\--十位 CNT4<=\ WHEN OTHERS => NULL; END CASE; END IF;
END PROCESS; L3<=CNT5;
L2<=CNT4; L1<=CNT3;
END BEHAVIORAL;
3)逻辑综合(Synthesize)
选中Synthesize选项,点进行参数设置,可以对任何操作进行参数设置。设置完成后,双击Synthesize选项,或右键选择Run选项。对其他两个VHDL程序进行同样的操作。
图4.35 综合参数设置示意图
图4.36 综合完成后界面
4)设计中的有关仿真
(1) 创建Testbench波形源文件
在工程项窗口Project Window的源文件中选中count_t.vhd ,用鼠标右点,在弹出的窗口中选择New Source(如图4.37所示),出现New对话框,再选择Test Bench Waveform文件类型,并输入文件名wave_1,点击下一步,再点击下一步,完成创建并进行初始化时间设置(如图4.38所示)。
图4.37 选中源文件并创建Testbench波形文件
图4.38 创建Testbench波形文件的初始化时间设置
(2) 设置输入信号初始值
根据被仿真模块的设计要求,对各个输入信号进行初始化设置(如图4.39所示)。初始化设置完毕后将testbench文件存盘,这时HDL Bencher会提示我们设置希望仿真的时钟周期数(默认值为1),设置完毕后点击OK退出HDL Bencher。