实验三-4位十进制频率计设计(共4页).doc
精选优质文档-倾情为你奉上实验三 4位十进制频率计设计一、实验目的1. 掌握数字频率计的Verilog描述方法;2. 学习设计仿真工具的使用方法3. 学习层次化设计方法;二、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽位1秒的输入信号脉冲计数允许信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一次测频计数周期做准备的计数器清零信号。这3个信号由测频控制信号发生器产生,它的设计要求是,测频控制信号发生器的计数使能信号输出CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。当CNT_EN高电平时,允许计数;当CNT_EN低电平时停止计数,并保持所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各个锁存器REG4B中,并由外部的七段译码器译出,显示计数值。设置锁存器的好处是,显示数据稳定,不会由于周期性的清零信号而不断闪烁。信号锁存之后,还必须用清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作做准备。三、 实验内容1、用4位十进制计数器对用户输入时钟进行计数,计数间隔为1秒,计数满1秒后将计数值(即频率值)锁存到4位寄存器中显示,并将计数器清0,再进行下一次计数。2、为上述设计建立元件符号3、设计仿真文件,进行验证。4、编程下载并在实验箱上进行验证四、 实验步骤程序源代码module FREG (clk1HZ,uclk,led0,led1,led2,led3,rst,en,load);input clk1HZ, uclk; output 3:0led0,led1,led2,led3; output load,rst,en; wire in_load,in_rst,in_en,c0,c1,c2;wire 3:0dout0,dout1,dout2,dout3;assign load=in_load;assign rst=in_rst;assign en=in_en;CNTL u1(.CLK(clk1HZ),.CNL_EN(in_en),.RST_CNL(in_rst),.LOAD(in_load);CNT10 u2 (.CLK(uclk),.EN(in_en),.RST(in_rst),.COUT(c0),.DOUT(dout0);CNT10 u3 (.CLK(c0),.EN(in_en),.RST(in_rst),.COUT(c1),.DOUT(dout1);CNT10 u4 (.CLK(c1),.EN(in_en),.RST(in_rst),.COUT(c2),.DOUT(dout2);CNT10 u5 (.CLK(c2),.EN(in_en),.RST(in_rst),.DOUT(dout3);RGB4 u6 (.DIN(dout0),.LOAD(in_load),.DOUT(led0);RGB4 u7 (.DIN(dout1),.LOAD(in_load),.DOUT(led1);RGB4 u8 (.DIN(dout2),.LOAD(in_load),.DOUT(led2);RGB4 u9 (.DIN(dout3),.LOAD(in_load),.DOUT(led3);endmodulemodule CNT10(CLK,RST,EN,COUT,DOUT); /4位计数器input CLK,RST,EN; output COUT; output3:0 DOUT; reg3:0 Q; reg COUT;always (posedge CLK or posedge RST)begin if(RST) Q=0; else if(EN) begin if(Q<9) Q=Q+1; else Q=0;end endalways (Q) if(Q=4'b1001) COUT=1; else COUT=0; assign DOUT=Q; endmodulemodule RGB4(DIN,LOAD,DOUT); /数据缓存器input LOAD; input3:0 DIN; output3:0 DOUT;reg3:0 DOUT;always (posedge LOAD) DOUT=DIN; endmodulemodule CNTL(CLK,CNL_EN,RST_CNL,LOAD);/控制部分input CLK; output CNL_EN,RST_CNL,LOAD; reg CLKDIV,CNL_EN,LOAD,RST_CNL;always (posedge CLK) CLKDIV=CLKDIV; always (posedge CLK) begin CNL_EN=CLKDIV; LOAD=CLKDIV;end always (CLK) beginif(CLK=1'b0&&CNL_EN=1'b0) RST_CNL=1; else RST_CNL=0; end endmoduleRTL视图仿真结果功能分析:在波形中,CLK1HZ的频率为1HZ,以CLK1HZ为输入,产生en,rst,load的输出波形。其中load的周期是clk1HZ的二倍,en=load;当clk1HZ与en同时为0时rst=0,否则rst=1;当rst=1,即高电平时计数清0,否则在UCLK的上升沿时进行累加计数。en是1秒计数允许,load计数结束,在上升沿锁存。信号锁存之后,还必须用清零信号rst对计数器进行清零 uclk的频率是clk1HZ的10倍,故led0,led1,led2,led3分别为0,1,0,0。 分析:uclk的频率是clk1HZ的10倍,其频率为10HZ,EDA实验仪上显示的结果与波形仿真结果一致。五、实验总结 通过次实验,我对数字频率计数器的原理有了更深层次的理解。我基本上掌握数字频率计的Verilog描述方法以及层次化设计方法。同时,这次实验也出了一些问题,多亏老师的指导和帮忙。我还领悟到了团队精神的可贵。对我而言,知识上的收获很重要,精神上的丰收更为可喜。挫折是一份财富,经历是一份拥有。这次实验将成为我学习旅途中的一个美好回忆。专心-专注-专业