实验三 含异步清零和同步时钟使能的加法计数器设
含异步清零和同步时钟使能的加法计数器设计
(1)实验目的:
学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。 (2)实验原理:
实验程序为例4-22;实验原理参考4.4节(计数器设计),设计流程参考第5章。 【例4-22】设计一个带有异步复位和同步时钟使能的十进制加法计数器。 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS
PORT(CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : 0UT STD_LOGIC); END ENTITY CNT10;
ARCHITECTURE behav OF CNT10 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<9 THEN CQI:=CQI+1; --允许计数,检测是否小于9 ELSE CQI := (OTHERS => ‘0’); --大于9,计数值清零 END IF; END IF; END IF;
IF CQI=9 THEN COUT<=‘1’; --计数大于9,输出进位信号 ELSE COUT<=‘0’; END IF;
CQ<=CQI; --将计数值向端口输出 END PROCESS;
END ARCHITECTURE behav;
(3)实验内容1: 在Quartus II上对例4-22进行编辑、编译、综合、适配、仿真。说明例中各语句的作用。详细描述示例的功能特点,给出其所有信号的时序仿真波形。 提示1:目标器件选择MAX7000S系列的EPM7128SLC84-15。
(4)实验内容2:
引脚锁定以及硬件下载测试(参考5.2节)。引脚锁定后进行编译、下载和硬件测试实验。将实验过程和实验结果写进实验报告。
提示2:引脚锁定除了参考第5章第2节内容外,具体引脚编号选定应参考“实验附注资料 附注3:万能接插口与结构图信号/与芯片引脚对照表”的“EPM7128S-PL84”栏目。
提示3:选实验电路模式5,参考“实验附注资料 附注2:实验电路结构图”的 “附图2-7(简图)实验电路结构图NO.5”栏目。
提示4:引脚锁定参考5.2.1 提示5:配置文件下载参考5.2.2
提示6:测试操作:①按复位RST键(键2)(高电平),观察由CQ[3..O]连得数码1是否显示“0”。②按使能EN键(键1)(高电平),观察由CQ[3..O]连得数码1是否计数显示;当计数到“9”时,COUT接发光管D1是否闪烁一下。
(5)实验内容3:
使用SignalTap II对此计数器进行实时测试,流程与要求参考5.3节。 (6)实验内容4:
从设计中去除SignalTap II,要求全程编译后。将生成的SOF文件转变成用于配置器件EPCS1的压缩的间接配置文件*.jic,并使用USB-Blaster对实验板上的EPCS1进行编程。晟后进行验证。
(7)实验内容5:
为此项设计加入一个可用于SignalTap II采样的独立的时钟输入端(采样时钟选择clock0=12MHz,计数器时钟CLK分别选择256Hz、16384Hz、6MHz),并进行实时测试。
(8)思考题:
在例4-22中是否可以不定义信号CQI,而直接用输出端口信号完成加法运算,即CQ<=CQ+1? 为什么?
(9)实验报告:
将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果写进实验报告。
课题含异步清零和同步时钟使能的加法计数器设计 名称 实验1.学习计数器的设计、仿真和硬件测试方法; 目的 2.进一步熟悉VHDL设计技术; 设计24进制含异步清零和同步时钟使能的加法计数器,具体要求如下: 1.清零端高电平时,信号输出为0;使能端高电平时可以计数; 设计2.本计数器为上升沿触发; 要求 3.计数器的输出为两路信号,分别代表计数值的个位和十位;两路信号以BCD码输出。 根据十进制使能端加法计数器设计24进制计数器,设计异步清零;设计清零端高电平时,信号输出为0;使能端高电平时可以计数。现根据书思路 上设计出24进制计数器,再通过改进,变为两路输出BCD码。 设计原理图及源程序 仿真波形图 实验结果 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY JINZHI60 IS PORT(CLK,RD,EN:IN STD_LOGIC; CQ,CP:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT:OUT STD_LOGIC); END JINZHI60; ARCHITECTURE BBQ OF JINZHI60 IS SIGNAL CS,CG: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK,RD,EN) BEGIN IF RD='1' THEN CG<=\"0000\"; CS<=\"0000\"; ELSIF CLK'EVENT AND CLK='1' THEN IF EN='1' THEN 问题IF (CS=\"0101\" AND CG=\"1001\") THEN 讨论 CG<=\"0000\"; CS<=\"0000\"; ELSIF CG=\"1001\" THEN CG<=\"0000\"; IF CS=\"0101\" THEN CS<=\"0000\"; ELSE CS<=CS+1; END IF; ELSE CG<=CG+1; END IF; END IF; END IF; CQ<=CG; CP<=CS; IF (CS=\"0101\" AND CG=\"1001\") THEN COUT<='1'; ELSE COUT<='0'; END IF; END PROCESS; END BBQ; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS 教师评分 PORT(CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : 0UT STD_LOGIC); END ENTITY CNT10; ARCHITECTURE behav OF CNT10 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<9 THEN CQI:=CQI+1; --允许计数,检测是否小于9 ELSE CQI := (OTHERS => ‘0’); --大于9,计数值清零 END IF; END IF; END IF; IF CQI=9 THEN COUT<=‘1’; --计数大于9,输出进位信号 ELSE COUT<=‘0’; END IF; CQ<=CQI; --将计数值向端口输出 END PROCESS; END ARCHITECTURE behav;
因篇幅问题不能全部显示,请点此查看更多更全内容