您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 含异步清0和同步时钟使能的4-位加法计数器-报告
EDA设计课程实验报告实验题目:含异步清0和同步时钟使能的4位加法计数器学院名称:专业:班级:姓名:高胜学号小组成员:指导教师:一、实验目的学习计数器的设计,仿真和硬件测试,进一步熟悉VHDL的编程方法。二、设计任务及要求1.设计总体要求:利用QuartusII建立一个含技术使能、异步复位的4位加法计数器,在SmartSOPC试验箱上进行硬件测试,由KEY1控制技术使能端ena并由LED1指示,KEY2控制复位端rst并由LED2指示。计数值由数码管指示。2.设计基本要求:(1)进行正常的加法计数功能。(2)由四个数码管显示其计数情况。三、系统设计1、整体设计方案含异步清零与同步时钟使能计数器由译码显示电路、脉冲发生电路和16进制计数器这3个基本电路组成的。此次设计要实现的功能有:正常的计数,异步清零,同步使能功能。整体设计系统框图如图1所示:图1含异步清零与同步时钟使能计数器系统结构图2、功能模块电路设计(1)各模块设计:译码显示电路模块框图(见图2):图2译码显示电路系统输入输出模块框图脉冲发生电路模块框图(见图3):图3秒脉冲发生电路系统输入输出模块框图16位进制计数电路系模块框图(见图4):图416位进制计数电路系统输入输出模块框图秒脉冲发生电路产生脉冲输入到16位计数器电路,计数器电路响应脉冲计数然后将计数响应输入到译码显示电路,译码显示电路响应,这时实验箱上8个数码管的后4位将进行从0到F计数的循环显示。整体输入输出模块框图(见图5):图5含异步清零与同步时钟使能计数器系统输入输出模块框图(2)模块逻辑表达(见表一和表二)功能clkrstenadout[3:0]异步清零X0X0000同步使能↑11dout=dout+1表一16进制计数器的真值表d[3:0]seg[7:0](16位)00008'hc000018'hf900108'ha400118'hb001008'h9901018'h92表二译码显示电路的真值表(3)算法流程图译码显示电路流程图(见图6):图6译码显示电路算法流程图01108'h8201118'hf810008'h8010018'h9010108'h8810118'h8311008'hc611018'ha111108'h8611118'h8e16位计数器流程图(见图7):图716位计数器电路算法流程图(4)Verilog源代码译码显示电路代码:moduledec(d,seg,dig);//定义模块名与输入输出input[3:0]d;output[7:0]seg;output[3:0]dig;//定义输入输出与数据类型reg[7:0]seg_r;//定义一个reg类型数据assigndig=4'b0000;//给dig赋值0assignseg=seg_r;//将reg类型数据与wire类型数据进行转换always@(d)//检测目标信号dbegincase(d)//case语句,目标公式为d4'b0000:seg_r=8'hc0;//当4位的d数据变化时对应的rge数据类型的seg_r数值4'b0001:seg_r=8'hf9;4'b0010:seg_r=8'ha4;4'b0011:seg_r=8'hb0;4'b0100:seg_r=8'h99;4'b0101:seg_r=8'h92;4'b0110:seg_r=8'h82;4'b0111:seg_r=8'hf8;4'b1000:seg_r=8'h80;4'b1001:seg_r=8'h90;4'b1010:seg_r=8'h88;4'b1011:seg_r=8'h83;4'b1100:seg_r=8'hc6;4'b1101:seg_r=8'ha1;4'b1110:seg_r=8'h86;4'b1111:seg_r=8'h8e;default:seg_r=8'h0;//其余d的显示的数据seg_r显示为0endcase//结束case语句end//结束always语句endmodule//结束程序16进制计数器电路代码:modulejsqt(clk,rst,ena,dout);//定义模块名与输入输出inputclk,rst,ena;output[3:0]dout;//定义输入输出与数据类型reg[3:0]dout_r;//定义一个reg数据类型assigndout=dout_r;//将reg类型数据与wire类型数据进行转换always@(posedgeclkornegedgerst)//检测目标信号时钟或异步信号beginif(rst==0)//检测信号rst是否恒等于0dout_r=4'b0000;//给reg数据类型的dout_r赋值0elseif(ena==1)//检测信号ena是否恒等于1dout_r=dout_r+1;//数据dout_r加1end//结束always语句endmodule//结束程序四、系统调试1、仿真调试(1)仿真代码译码显示电路仿真代码:`timescale1ns/1nsmoduledec_tp;//测试模块的名字reg[3:0]d;//测试输入信号定义为reg型wire[7:0]seg;//测试输出信号定义为wire型wire[3:0]dig;//测试输出信号定义为wire型parameterDELY=100;//延时100秒decu1(d,seg,dig);//调用测试对象assigndig=4'b0000;//给dig赋值0initialbegin//激励波形设定d=4'b0;#DELYd=4'b0001;#DELYd=4'b0010;#DELYd=4'b0011;#DELYd=4'b0100;#DELYd=4'b0101;#DELYd=4'b0110;#DELYd=4'b0111;#DELYd=4'b1000;#DELYd=4'b1001;#DELYd=4'b1010;#DELYd=4'b1011;#DELYd=4'b1100;#DELYd=4'b1101;#DELYd=4'b1110;#DELYd=4'b1111;#DELY$finish;endinitial$monitor($time,,,seg=%d,dig=%d,d=%b,seg,d,dig);//输出格式i定义endmodulemoduledec(d,seg,dig);//命名模块名字input[3:0]d;output[7:0]seg;output[3:0]dig;//定义输入与输出reg[7:0]seg_r;//定义seg_r的reg型数据assigndig=4'b0000;//给dig赋值0assignseg=seg_r;//将reg型数据转化为wire型数据always@(d)//检测d的数据是否变化begincase(d)//七段译码4'b0000:seg_r=8'hc0;//显示04'b0001:seg_r=8'hf9;//显示14'b0010:seg_r=8'ha4;//显示24'b0011:seg_r=8'hb0;//显示34'b0100:seg_r=8'h99;//显示44'b0101:seg_r=8'h92;//显示54'b0110:seg_r=8'h82;//显示64'b0111:seg_r=8'hf8;//显示74'b1000:seg_r=8'h80;///显示84'b1001:seg_r=8'h90;//显示94'b1010:seg_r=8'h88;//显示a4'b1011:seg_r=8'h83;//显示b4'b1100:seg_r=8'hc6;//显示c4'b1101:seg_r=8'ha1;//显示d4'b1110:seg_r=8'h86;//显示e4'b1111:seg_r=8'h8e;///显示fendcase//结束case语句end//结束always语句endmodule//结束程序16进制计数器仿真代码:`timescale1ns/1nsmodulejsqt_tp;//测试模块的名字regclk,rst,ena;//测试输入信号定义为reg型wire[3:0]dout;//测试输出信号定义为wire型parameterDELY=100;//延时100秒jsqtu1(clk,rst,ena,dout);//调用测试对象initialbegin//激励波形设定clk=0;rst=1;ena=1;#DELYclk=1;rst=1;ena=1;#DELYclk=0;rst=1;ena=1;#DELYclk=1;rst=1;ena=1;#DELYclk=0;rst=1;ena=1;#DELYclk=1;rst=1;ena=1;#DELYclk=0;rst=1;ena=1;#DELYclk=1;rst=1;ena=1;#DELYclk=0;rst=1;ena=1;#DELY$finish;endinitial$monitor($time,,,dout=%d,rst=%b,ena=%b,clk=%b,dout,rst,ena,clk);//输出格式i定义endmodulemodulejsqt(clk,rst,ena,dout);//定义模块名与输入输出inputclk,rst,ena;output[3:0]dout;//定义输入输出与数据类型reg[3:0]dout_r;//定义一个reg数据类型assigndout=dout_r;//将reg类型数据与wire类型数据进行转换always@(posedgeclkornegedgerst)//检测目标信号时钟或异步信号beginif(rst==0)//检测信号rst是否恒等于0dout_r=4'b0000;//给reg数据类型的dout_r赋值0elseif(ena==1)//检测信号ena是否恒等于1dout_r=0;//给dout_r赋初值dout_r=dout_r+4’b1;//数据dout_r加1end//结束always语句endmodule//结束程序(2)仿真波形图译码显示仿真波形图(见图8):图8译码显示部分仿真波形图16进制计数器仿真波形图(见图9):图916进制计数器仿真波形图(3)波形分析由图6-1与图6-2可以看出给4位dig赋值0,每延迟100秒可以看见4位的d变化与8位seg产生的数据与代码上的编程相符合。在图6-3里可以看出让rst与ena为1时,clk由0变为1的时候4位的dout由0开始加1实现了计数功能。2、实际调试(1)测试条件、管脚分配管脚分配(见图10)图10实验管脚分配图(2)测试结果及数据实验成功的结果是实验箱上8个数码管的后4个数码管被点亮,同时循环显示0~F16个数字。由于实验箱数码管有所损坏所以对于一些字母无法完美显示,并且数码管的动态变化无法使用工具进行拍照,这是本次实验的一个遗憾。五、实验感想
本文标题:含异步清0和同步时钟使能的4-位加法计数器-报告
链接地址:https://www.777doc.com/doc-7290926 .html