数字式秒表verilog语言实现

上传人:飞*** 文档编号:37152375 上传时间:2018-04-07 格式:DOC 页数:23 大小:730.50KB
返回 下载 相关 举报
数字式秒表verilog语言实现_第1页
第1页 / 共23页
数字式秒表verilog语言实现_第2页
第2页 / 共23页
数字式秒表verilog语言实现_第3页
第3页 / 共23页
数字式秒表verilog语言实现_第4页
第4页 / 共23页
数字式秒表verilog语言实现_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《数字式秒表verilog语言实现》由会员分享,可在线阅读,更多相关《数字式秒表verilog语言实现(23页珍藏版)》请在金锄头文库上搜索。

1、一、实验目的 (1)熟练掌握分频器、各种进制的同步计数器的设计。 (2)熟练掌握同步计数器的级联方法。 (3)掌握数码管的动态显示驱动方式。 (4)掌握计数器的功能和应用。 (5)理解开关防颤动的必要性。 (6)掌握简单控制器的设计方法。二、实验内容和原理 1、实验设计要求: (1)计时范围 00.05959.9,分辨率为 0.1s,用数码管显示计时值。 (2)秒表有一个按键开关:当电路处于“初始”状态时,第一次按键,计时开始(“计时”状态);再 次按键。计时停止(“停止”状态);第三次按键,计时器复位为 00.0,且电路恢复到“初始”状态。2、根据设计要求,可画出秒表电路的原理框图,如图 1

2、-2 所示,秒表电路由时钟管理模块(DCM)、分 频器模块、按键处理模块、控制器、计时模块和显示模块组成。clk sys_clkpulse10Hzpulse400Hzclear count stopButtonIn ButtonOut图 1-2 秒表电路的原理框图 (1)DCM 模块 由于数字钟为低速电路,而 XUP Virtex-II Pro 开发系统只提供 100MHz 主时钟,因此需插入 DCM 分频 模块以降低系统的工作时钟,从而提高系统的可靠性。DCM 可采用 16 分频,输出 6.25MHz 的 sys_clk 信号作为系统的主时钟。 ISE 生成 DCM 内核的 Verilog

3、HDL 代码:VgaDCM DCMInst( .CLKIN_IN(clk), .CLKDV_OUT(sys_clk),DCM按键处理模块分频器模块en 计时模块控制器显示模块.CLKIN_IBUFG_OUT(), .CLK0_OUT(), .LOCKED_OUT();(2)分频器模块 产生用于计时的 1/10 秒脉冲信号 pulse10,频率为 10Hz; 产生用于显示模块的扫描脉冲信号 pulse400,频率为 400Hz。 1/10 秒脉冲信号 pulse10 和扫描脉冲信号 pulse400 的脉冲宽度为一个系统主时钟信号 sys_clk 的周期。 分频器模块原理框图如图 1-3 所示,

4、先设计一个 15625 分频器,产生 400Hz 的扫描信号 pulse400,再由 pulse400 控制 40 分频器产生 1/10 秒脉冲信号 pulse10。 分频器设计:分频器实际上就是计数器:分频比 n 就是计数器的模。“1” pulse10sys_clk分频器模块的 Verilog HDL 代码: module div(sys_clk,sec,scan); /分频器模块 input sys_clk; output sec,scan; div_n1 u1(.cout(scan),.cin(1b1),.clk(sys_clk);/按原理框图级联分频器 div_n2 u2(.cout(

5、sec),.cin(scan),.clk(sys_clk); endmodulemodule div_n1(cout,cin,clk);/ 15625 进制计数器,产生 400Hz 扫描信号 parameter n=15625; parameter counter_bits=14; output cout; input cin,clk; reg counter_bits:1qout=0; assign cout=(qout=(n-1)/进位always(posedge clk) begin if(cin) begin if(qout=(n-1) qout=0;装 订 线en out15625

6、进制 计数器en out40 进制 计数器pulse400图 1-3 分频器原理框图else qout=qout+1;/计数 end end endmodulemodule div_n2(cout,cin,clk);/40 进制计数器,产生 10Hz 的 0.1 秒计时信 号 parameter n=40; parameter counter_bits=6; output cout; input cin,clk; reg counter_bits:1qout=0; assign cout=(qout=(n-1)/进位 always(posedge clk) begin if(cin) begi

7、n if(qout=(n-1) qout=0; else qout=qout+1;/计数 end end endmodule(3)按键处理模块 按键处理模块完成按键输入的同步器、开关防颤动和脉冲宽度变换等功能,即当按键一次, 输出一个宽度为 sys_clk 周期的脉冲信号 Buttonout。其组成框图如图 1-4 所示。图 1-4 按键处理模块的示意框图 (i)同步器设计 在异步设计中,完全避免亚稳态是不可能的。因此,设计的基本思路是:首先尽可能的减少出线亚 稳态的可能性,其次是尽可能地减少出线亚稳态给系统带来的危害的可能性。如图 1-5 所示的是一 种基本同步器类型的原理框图,采用双锁存器

8、法,即将输入的异步信号用两个锁存器连续锁存两次, 这种设计理论上可以把出现亚稳态的几率降低到一个很小的程度,但这种方法对输入信号有一定延 时。图 1-5 当异步脉冲宽度大于时钟周期时的同步器电路同步器的 Verilog HDL 代码: module synch(asynch_in,clk,reset,synch_out);/同步器; input asynch_in,clk,reset; output synch_out; wire a; d_ff u1(.d(asynch_in),.reset(reset),.clk(clk),.q(a); d_ff u2(.d(a),.reset(reset

9、),.clk(clk),.q(synch_out); endmodulemodule d_ff(d,reset,clk,q);/D 触发器; input d,reset,clk; output reg q; always(posedge clk or posedge reset)/异步复位;高电平有效; beginif(reset)begin q=0;endelse begin q=d;end end endmodule (ii)开关防颤动电路的设计 (a)开关的颤动即开关防颤动电路的功能 人们完成一次按键操作的指压力如图 1-6(b)所示,按键开关从最初按下到接触稳态需要经过数毫秒的 颤动,

10、按键松开时也有同样的问题。因此,按键被按下或释放时,都有几毫秒的不稳定输出,从逻辑电 平来看不稳定输出期间,其电平在“0” 、 “1”之间无规则摆动。因此,一次按键操作的输出如图 1- 6(c)所示。一般情况,按键一次时间大于 100ms,颤动时间(按下或释放)小于 10ms。 开关防颤动电路的目的是:按一次按键,输出一个稳定的脉冲,即将开关的输出作为开关防颤动电路的 输入,而开关防颤动电路的输出作为理想输出,如图 1-6(d)所示。(b)开关防颤动电路的设计 开关防颤动电路的关键是避免在颤动期采样。颤动期时间长短与开关类型及按键指压力有关,一般为 10ms 左右。据此可以画出防颤动电路的设计

11、流程图,如图 1-7 所示。 图 1-8 所示为防颤动电路的原理框图。 综合原理框图和工作流程图可画出控制器的算法流程图和状态机图,如图 1-9,图 2-0 所示。图 1-8 所示为防颤动电路的原理框图。10ms 定时器控制器分频器()162ensys_clkresetViVotimer_clrtimer_donepulse400(iii)定时器的设计定时器实质上就是计数器,基本框图如图 1-9 所示,但定时器需一个启动信号 timer_clr 和一个定时到信号 timer_done。其功能特性见表 2-0 所示。 定时计数器的模 N 的选取: 1、若用 clk 作时间基准:NT/Tclk,T

12、 为定时时间,Tclk 为时钟周期。 2、若用 cin 作时间基准(cin 的脉冲宽度为 Tcin):NT/Tcin,T 为定时时间,Tcin 为输入 信号 cin 的周期。表 2-0 定时器功能表timer_clrcinclkqout功能1X=0*qout清零(启动)00=qout*qout保持01=qout+1*qout计数en定时器 timer_clrtimer_donecinclkqout图 1-9 定时器框图图 2-1 控制器的算法流程图图 1-7 防颤动电路的工作流程图防抖动电路的 Verilog HDL 代码: module debouncer(clk,reset,vi,vo);

13、/防抖动电路顶层模块 input clk,reset,vi; output vo; div u1(.sys_clk(clk),.sec(),.scan(pulse400); time_n u2(.cin(pulse400),.clk(clk),.time_clr(b),.time_done(c); control u3(.clk(clk),.vi(vi),.time_done(c),.reset(reset),.time_clr(b),.vo(vo); endmodulemodule time_n(cin,clk,time_clr,time_done);/计时器 parameter n=8;

14、parameter counter_bits=3; output time_done; input cin,clk,time_clr; reg counter_bits:1qout; assign time_done=(qout=(n-1)/进位 always(posedge clk) begin if(time_clr) qout=0;/清零 else if(cin) begin if(qout=(n-1) qout=0; else qout=qout+1;/计数 end end endmodule图 2-2 防颤动电路控制器的 ASM 图module div(sys_clk,sec,sca

15、n);/16 分频 input sys_clk; output sec,scan; div_n1 u1(.cout(scan),.cin(1b1),.clk(sys_clk); div_n2 u2(.cout(sec),.cin(scan),.clk(sys_clk); endmodulemodule control(clk,vi,time_done,reset,time_clr,vo);/控制器 input clk,vi,time_done,reset; output vo,time_clr; reg vo,time_clr; reg1:0 state; parameter high=2b00,wait_low=2b01,low=2b11,wait_high=2b10;/状态以格雷码编码 always(posedge clk ) begin if(reset) state=high; else case(state) high:begin if(!vi) state=wait_low;else state=high;end wait_low:begin if(time_done) state=low;else state=wait_low;end low:begin if(vi) state=wait_high;else

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号