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