附表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
四、仿真结果:
图1
图2
由图1的时序波形可见,当EN=0时,DOUT的输出数据3保持了一段时间;
当EN=1,且在时钟CLK的上升沿时间范围LOAD=0时,4位输入数据DATA=0被加载,在LOAD=1后作为计数器的计数初值(图1); 当EN=1,LOAD=1时,输入的数据不被加载;
RST在任意时刻均有效,即使CLK非上升沿时,计数也能即刻清0(图2:计数到3后清0); 当计数到9时,COUT输出进位1,如图2所示。
五、引脚锁定:
六、硬件测试结果:
程序下载
硬件测试效果(模式5)
硬件测试的结果现象为:当键1(RST)、键2(EN)、键3(LOAD)均处于高电平时,数码管1依照时钟信号的周期(CLOCK0=1Hz),从0依次变化到9,当计数到9时,LED灯(D8:COUT)亮起。
数码管1显示的过程中,按下键1(RST)时(变为低电平),数码管1即刻清零;按下键2(EN)时(变为低电平),数码管1保持显示当前的数字(如上硬件测试效果图:保持显示数字5);按下键3(LOAD)时(变为低电平),数码管1显示的数字变为由键8-键5确定的DATA值(上图为:0011B,就是十进制数3),恢复键1-键3的高电平状态,计数功能正常运行。
七、实验心得:
通过本次实验,使我进一步熟悉了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 说明:各学院(实验中心)可根据实验课程的具体需要和要求自行设计和确定实验报告的内容要求和栏目,但表头格式按照“实验项目名称”栏以上部分统一。
因篇幅问题不能全部显示,请点此查看更多更全内容