设计含异步清零和同步时钟使能的加法计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计含异步清零和同步时钟使能的加法计数器
附表1:
广州大学学生实验报告
开课学院及实验室:物理与电子工程学院-电子楼317室2016年4 月21 日
学院物电年级、专
业、班
姓名Jason.P 学号
实验课程名称EDA技术实验成绩
实验项目名称设计含异步清零和同步时钟使能的加法计数器指导教师
一、实验目的:
学习计数器的设计、仿真和硬件测试,进一步熟悉VerilogHDL设计技术。
二、实验内容:
含异步清0和同步时钟使能的4位加法器
(1)实验原理:
上图是一含计数使能、异步复位的4位加法计数器,书中例3-15是其VerilogHDL描述。
由图2-1所示,图中间是4位锁存器;rst是异步清信号,高电平有效;clk是锁存信号;D[3:0]是4位数据输入端。
当ENA为‘1’时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为‘0’时保持上一次的输出。
(2)实验步骤:
(2)-1按照发给大家的文件“Quartus II 9.0基本设计流程-VerilogHDL.ppt”所讲述的步骤,在QuartusII上对例3-15(第四版)(第五版p124例5-15)进行编辑、编译、综合、适配、仿真。
说明例2-1各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。
(2)-2引脚锁定以及硬件下载测试:
若目标器件是EP3C40Q240C8N,建议选实验电路模式5,用键8(PIO7)控制RST;用键7控制ENA;计数溢出COUT接发光管D8;OUTY是计数输出接数码1;时钟CLK接clock2,通过跳线选择4Hz信号。
引脚锁定后进行编译、下载和硬件测试实验。
将实验过程和实验结果写进实验报告。
三、实验HDL描述:
module CNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA)
input CLK,EN,RST,LOAD; //定义输入信号
input[3:0] DATA; //定义4位的并行加载数据DATA
output[3:0] DOUT; //定义4位的计数输出数据DOUT
output COUT; //定义进位输出信号COUT
reg[3:0] Q1; //定义4位的寄存器型中间变量Q1
reg COUT;
assign DOUT = Q1; //将内部寄存器的计数结果输出至DOUT
always @(posedge CLK or negedge RST) //时序过程
begin
if(!RST) Q1 <= 0; //RST=0时,对内部寄存器单元异步清0
else if(EN)
begin //同步使能EN=1,则允许加载或计数
if(!LOAD) Q1 <= DATA; //当LOAD=0,向内部寄存器加载数据
else if(Q1<9) Q1 <=Q1+1; //当Q1小于9时,允许累加
else Q1 <=4'b0000; //否则一个时钟后清零返回初值end
end
always @(Q1) //组合过程
if (Q1==4'h9) COUT = 1'b1;
else COUT = 1'b0;
endmodule
四、仿真结果:
七、实验心得:
通过本次实验,使我进一步熟悉了QuartusII的VerilogHDL文本设计流程以及电路仿真和硬件测试。
本次实验的重难点是引脚锁定,数码管的显示是需要先经过译码器的处理,所以我选择了模式5。
通过对照实验电路结构图以及芯片引脚的定义表,正确进行引脚锁定,否则编译会出错或者达不到预期的效果。
总的来说,本次实验还是有一定的挑战性。
八、思考题:
给出含异步清零和同步使能的16位二进制加减可控计数器的VerilogHDL描述。
module UPDOWNCNT16(Q,COUT,DATA,LOAD,EN,CLK,RST,UP_DOWN)
input[15:0] DATA;
input LOAD,EN,CLK,RST,UP_DOWN;
output[15:0] Q;
output COUT;
reg[15:0] Q;
always @(posedge CLK or negedge RST)
begin
if(!RST) Q=16'h0000; //异步清零,低电平有效
else if(EN) //计数使能端,高电平有效
begin
if(!LOAD) Q=DATA; //同步置数,低电平有效
if(UP_DOWN) Q=Q+1; //UP_DOWN=1时,加计数
else Q=Q-1; //UP_DOWN=0时,减计数
end
end
always @(Q)
if(Q==16’hFFFF && UP_DOWN)
COUT=1’b1;
else if(Q==16’h0000 && !UP_DOWN)
COUT=1’b1; //COUT=1表示进位输出或COUT=1表示借位输出endmodule
项目名称”栏以上部分统一。