实验名称 设计含异步清零和同步时钟使能的加法计数器
实验目的
学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
实验步骤
【1】实验程序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT12 IS
PORT(CLK,RST,EN:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT:OUT STD_LOGIC);
END CNT12;
1 20111124
ARCHITECTURE behav OF CNT12 IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLE CQI :STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST='1'THEN CQI:=(OTHERS=>'0');
ELSIF CLK'EVENT AND CLK='1'THEN
IF EN='1'THEN
IF CQI<11 THEN CQI:=CQI+1;
ELSE CQI:=(OTHERS=>'0');
END IF;
END IF;
END IF;
2 20111124
IF CQI=11 THEN COUT<='1';
ELSE COUT<='0';
END IF;
CQ<=CQI;
END PROCESS;
END behav;
【2】实验结构图
【3】在quartus II上对上述程序进行编辑、编译、综合、适配、仿真。
3 20111124
1、仿真测试得仿真波形如下:
功能仿真波形
时序仿真波形
【4】引脚锁定以及硬件下载测试
管脚图
下载后选到电路模式5,按下键1,可以看到电路自动计数。
4 20111124
【5】使用SignalTap II对此计数器进行实时测试
按实验流程调试得采样波形:
在CQI上单击右键,在下拉菜单中选择总线显示模式Bus Display Format为Unsigned Line Chart,获得模拟信号波形为:
【6】为此项设计加入一个可用于SignalTap II采样的的时钟输入端,并进行实时测试。
实验程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
5 20111124
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT12 IS
PORT(CLK,RST,EN,clk_samp:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
COUT:OUT STD_LOGIC);
END CNT12;
ARCHITECTURE behav OF CNT12 IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLE CQI :STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST='1'THEN CQI:=(OTHERS=>'0');
ELSIF CLK'EVENT AND CLK='1'THEN
6 20111124
IF EN='1'THEN
IF CQI<11 THEN CQI:=CQI+1;
ELSE CQI:=(OTHERS=>'0');
END IF;
END IF;
END IF;
IF CQI=11 THEN COUT<='1';
ELSE COUT<='0';
END IF;
CQ<=CQI;
END PROCESS;
END behav;
时钟端clk_samp接clock5.
7 20111124
管脚图
④模拟信号采样波形
【7】思考题:在程序中是否可以不定义信号 CQI,而直接用输出端口信号完成加法运算,即 : CQ <= CQ+ 1?为什么?
答:不可以,因为信号 CQ定义的端口模式是OUT,是单向输出模式,所以只能作为输出信号,不能在结构体内再用来作为输入信号;如果CQ定义的端口模式是BUFFER,就可以将计数器输出的计数信号回读来作为下一个计数值的初值。在本实验中,该信号是一个反馈信号。
实验心得
耐心调试程序,更好的熟悉quartusII的使用流程,加深了对quartusII的仿真的认识。学会了使用SignalTap II,进一步熟悉了VHDL设计技术。
8 20111124