您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 实验二-基于HDL十进制计数器设计
西南科技大学实验报告课程名称:基于FPGA的现代数字系统设计实验名称:基于HDL十进制计数、显示系统设计姓名:袁谋学号:20124503班级:通信1204指导教师:龙惠民西南科技大学信息工程学院2一、实验目的1、掌握基于语言的ISE设计全流程;2、熟悉、应用VerilogHDL描述数字电路;3、掌握基于Verilog的组合和时序逻辑电路的设计方法。二、实验原理具有数显输出的十进制计数器的设计图2.1原理框图本设计包括3个模块:一个是十进制计数器,一个是驱动七段数码管的模块,一个消抖模块。输入信号:CLK_50M-------消抖基准延时clk-------待计数的时钟clr---------异步清零信号,当clr=1,输出复位为0,当clr=0,正常计数E---------使能控制信号,当ce=1,电路正常累加计数,否则电路不工作输出信号:data_out[6:0]---------驱动数码管,显示计数值的个位C-----------驱动发光二极管,显示计数值向十位的进位1、数码管显示驱动模块输入:data_in[3:0]-------待显示的数值输出:data_out[6:0]-------驱动数码管的七位数值(注意表中out的对应位)表2-1七段字符显示真值表32、十进制计数器模块输入信号:clk-------待计数的时钟clr---------异步清零信号,当clr=1,输出复位为0,当clr=0,正常计数E---------使能控制信号,当E=1,电路正常累加计数,否则电路不工作输出信号:data_in[3:0]----------计数值的个位。即,在clk上升沿检测到data_in=9时,data_in将被置0,开始新一轮的计数。C------------计数值的十位进位,即:只有在时钟clk上升沿检测到data_in=9时,C将被置1,其余情况下C=0;3.消抖模块(1)按键抖动产生原因:通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。图2.2按键抖动波形图(2)本次试验的消抖模块图2.3消抖模块框图电平检查模块:检测输入的按键是否被按下或者释放,并分别将H2L_Sig,L2H_Sig拉高,并随后拉低,给出按键的操作信息。延时模块:对输入的信号变化时刻进行计时并观察信号的变换情况,对输出端口进行恰当地赋值。4、顶层模块设计三、实验步骤1、数码管显示驱动模块的设计(1)建立工程:file-NewProject,并注意器件、EDA工具的正确选择。4图3.1工程建立及工具选择(2)建立新VerilogHDL模块编辑窗口,选择资源类型为VerilogModule,并输入合法文件名,在文本编辑窗口输入代码。图3.2文本编辑(3)执行综合得到综合后的电路,并进行功能仿真。2、计数器模块的设计设计步骤同数码管的设计,并完成模块的设计输入、综合、功能仿真。3、数码管和计数器组合为一个系统图3.3综合原理框图用VerilogHDL将counter.v和seg7.v组合为一个模块,完成综合、功能仿真,5分析波形,修正设计。modulecounter_seg7(clk,clr,E,C,data_out);inputclk,clr,E;outputC;output[6:0]data_out;wire[3:0]data_in;//两个模块之间的连接数据counteru1(clk,clr,E,C,data_in);//调用前面写好的计数器函数seg7u2(data_in,data_out);//调用前面写好的数码管函数endmodule图3.4综合电路逻辑结构图3.5仿真结果4、消抖模块设计了解消抖模块的功能,拷贝相关代码,拟采用实验板上的50MHZ时钟为延迟计数时钟。65、顶层模块设计用VerilogHDL代码描述如图模块的连接,并综合。modulecounter_seg7(CLK_50M,clk,clr,E,C,data_out);inputCLK_50M,clk,clr,E;outputC;output[6:0]data_out;wirePin_Out;wire[3:0]data_in;debounce_moduleu3(CLK_50M,clr,clk,Pin_Out);counteru1(Pin_Out,clr,E,C,data_in);seg7u2(data_in,data_out)endmodule6、顶层模块处理(1)锁定引脚(2)设置用户约束文件(*.ucf)由于clk没锁于ISE默认的时钟输入引脚上,需要添加“CLOCK_DEDICATED_ROUTE=FALSE;”为了更好的消抖效果,需要在V16输入端口加入下拉电阻,即需加“PULLDOWN”。(3)双击ImplementDesign,进行布局布线.(4)下载双击GenerateProgrammingFile生成下载文件,双击ConfigureTargetDevice点击OK。加入.bit文件,下载成功后会有提示。下载后,改变拨动开关和按键,观察结果。图3.57、实验结果每按下按键数码管加1,加到9时产生进位,又从0开始计数。改变拨动开关(复位位)可以看到复位效果;将使能开关置低,可以看到计数器不再计数。本次试验成功的完成了系统设计的要求。7四、思考题1、两个或一个always实现十进制计数模块modulecounter(clk,clr,E,C,data_out);inputclk,E;inputclr;output[3:0]data_out;outputC;regC;reg[3:0]data_out;initialbeginC=0;data_out=0;endalways@(posedgeclkorposedgeclr)beginif(clr)begindata_out=0;C=0;endelsebeginif(E)beginif(data_out4'b1001)begindata_out=data_out+1;C=0;endelsebegindata_out=0;C=1;endendendendendmodule2、用always,或assign实现数码管的驱动设计moduleseg7(data_in,data_out);input[3:0]data_in;output[6:0]data_out;8reg[6:0]data_out;always@(data_in)begindata_out=7'b1111111;case(data_in)4'b0000:data_out=7'b0111111;4'b0001:data_out=7'b0000110;4'b0010:data_out=7'b1011011;4'b0011:data_out=7'b1001111;4'b0100:data_out=7'b1100110;4'b0101:data_out=7'b1101101;4'b0110:data_out=7'b1111101;4'b0111:data_out=7'b0000111;4'b1000:data_out=7'b1111111;4'b1001:data_out=7'b1101111;4'b1010:data_out=7'b1110111;4'b1011:data_out=7'b1111100;4'b1100:data_out=7'b0111001;4'b1101:data_out=7'b1011110;4'b1110:data_out=7'b1111001;4'b1111:data_out=7'b1110001;default;endcaseend3、比较实验一与实验二的实验过程,说明原理图输入法与HDL输入法的不同的应用环境。通过两次实验对FPGA及ISE工具的学习,认识到:原理图输入法繁琐、效率低,一般只应用于小系设计或复杂系统的顶层模块连接。引荐描述语言HDL,适用于复杂系统设计要求的输入方式,可以有效的表达、传达设计者的设计意图,快速实现作者的设计思想。
本文标题:实验二-基于HDL十进制计数器设计
链接地址:https://www.777doc.com/doc-4702893 .html