数字式秒表verilog语言实现

更新时间:2023-06-23 03:25:34 阅读: 评论:0

一、实验目的
(1)熟练掌握分频器、各种进制的同步计数器的设计。
(2)熟练掌握同步计数器的级联方法。
(3)掌握数码管的动态显示驱动方式。
(4)掌握计数器的功能和应用。
(5)理解开关防颤动的必要性。
(6)掌握简单控制器的设计方法。
二、实验内容和原理
1、实验设计要求:
低压电气(1)计时范围0’0’.0’’~59’59’.9’’,分辨率为0.1s,用数码管显示计时值。
(2)秒表有一个按键开关:当电路处于“初始”状态时,第一次按键,计时开始(“计时”状态);再次按键。计时停止(“停止”状态);第三次按键,计时器复位为0’0’.0’’,且电路恢复到“初始”状态。
2、根据设计要求,可画出秒表电路的原理框图,如图1-2所示,秒表电路由时钟管理模块(DCM)、分频器模块、按键处理模块、控制器、计时模块和显示模块组成。
显示模块
    clk                sys_clk
                          pul10Hz
                          pul400Hz
                                                    clear  count  stop
ButtonIn                              ButtonOut
                图1-2 秒表电路的原理框图
(1)DCM模块
由于数字钟为低速电路,而XUP Virtex-II Pro 开发系统只提供100MHz主时钟,因此需插入DCM分频模块以降低系统的工作时钟,从而提高系统的可靠性。DCM可采用16分频,输出6.25MHz的sys_clk信号作为系统的主时钟。
ISE生成DCM内核的Verilog HDL 代码:
VgaDCM DCMInst(
.CLKIN_IN(clk),
.CLKDV_OUT(sys_clk),
.
CLKIN_IBUFG_OUT(),
.CLK0_OUT(),
.LOCKED_OUT());
(2)分频器模块
产生用于计时的1/10秒脉冲信号pul10,频率为10Hz;
产生用于显示模块的扫描脉冲信号pul400,频率为400Hz。
碗仔糕1/10秒脉冲信号pul10和扫描脉冲信号pul400的脉冲宽度为一个系统主时钟信号sys_clk的周期。
分频器模块原理框图如图1-3所示,先设计一个15625分频器,产生400Hz的扫描信号pul400,再由pul400控制40分频器产生1/10秒脉冲信号pul10。
分频器设计:分频器实际上就是计数器:分频比n就是计数器的模。
pul400
en      out
40进制
计数器
en      out
15625进制
计数器
装    订    线
“1”                                                        pul10
sys_clk
图1-3  分频器原理框图
分频器模块的Verilog HDL 小米鸡蛋粥代码:
module div(sys_clk,c,scan);                            //分频器模块
input sys_clk;
output c,scan;
div_n1 u1(.cout(scan),.cin(1'b1),.clk(sys_clk));                //按原理框图级联分频器
div_n2 u2(.cout(c),.cin(scan),.clk(sys_clk));
endmodule
module div_n1(cout,cin,clk);                                // 15625进制计数器,产生400Hz扫描信号
parameter n=15625;
parameter counter_bits=14;
output cout;
input cin,clk;
reg [counter_bits:1]qout=0;
青出于蓝造句assign cout=(qout==(n-1))&cin;                            //进位
always@(podge clk)
begin if(cin)
begin if(qout==(n-1)) qout<=0;
el qout<=qout+1;//计数
end
end
endmodule
module div_n2(cout,cin,clk);                                //40进制计数器,产生10Hz的0.1秒计时信号
parameter n=40;
parameter counter_bits=6;
output cout;
input cin,clk;
reg [counter_bits:1]qout=0;
assign cout=(qout==(n-1))&cin;                            //进位
always@(podge clk)
begin if(cin)
begin if(qout==(n-1)) qout<=0;
el qout<=qout+1;                                        //计数
end
end
endmodule
(3)按键处理模块
按键处理模块完成按键输入的同步器、开关防颤动和脉冲宽度变换等功能,即当按键一次,输出一个宽度为sys_clk周期的脉冲信号Buttonout。其组成框图如图1-4所示。
图1-4 按键处理模块的示意框图oo后
(i)同步器设计
在异步设计中,完全避免亚稳态是不可能的。因此,设计的基本思路是:首先尽可能的减少出线亚稳态的可能性,其次是尽可能地减少出线亚稳态给系统带来的危害的可能性。如图1-5所示的是一种基本同步器类型的原理框图,采用双锁存器法,即将输入的异步信号用两个锁存器连续锁存两次,这种设计理论上可以把出现亚稳态的几率降低到一个很小的程度,但这种方法对输入信号有一定延时。
P.4
实验名称:    数字式秒表      姓名:    周天益      学号:    3090102742       
图1-5 当异步脉冲宽度大于时钟周期时的同步器电路
同步器的Verilog HDL 代码:
module synch(asynch_in,clk,ret,synch_out);                    //同步器;
input asynch_in,clk,ret;日语用英语怎么说
output synch_out;
wire a;豆浆养胃吗
d_ff u1(.d(asynch_in),.ret(ret),.clk(clk),.q(a));
d_ff u2(.d(a),.ret(ret),.clk(clk),.q(synch_out));
endmodule
module d_ff(d,ret,clk,q);                                    //D触发器;
input d,ret,clk;
output reg q;
always@(podge clk or podge ret)                            //异步复位;高电平有效;
begin
  if(ret)
  begin q<=0;end
  el begin q<=d;end
端午祝福语end
endmodule
 
(ii)开关防颤动电路的设计
(a)开关的颤动即开关防颤动电路的功能
人们完成一次按键操作的指压力如图1-6(b)所示,按键开关从最初按下到接触稳态需要经过数毫秒的颤动,按键松开时也有同样的问题。因此,按键被按下或释放时,都有几毫秒的不稳定输出,从逻辑电平来看不稳定输出期间,其电平在“0”、“1”之间无规则摆动。因此,一次按键操作的输出如图1-6(c)所示。一般情况,按键一次时间大于100ms颤动时间(按下或释放)小于10ms
开关防颤动电路的目的是:按一次按键,输出一个稳定的脉冲,即将开关的输出作为开关防颤动电路的输入,而开关防颤动电路的输出作为理想输出,如图1-6d)所示。
(b)开关防颤动电路的设计
开关防颤动电路的关键是避免在颤动期采样。颤动期时间长短与开关类型及按键指压力有关,一般为10ms左右。据此可以画出防颤动电路的设计流程图,如图1-7所示。
图1-8所示为防颤动电路的原理框图。
综合原理框图和工作流程图可画出控制器的算法流程图和状态机图,如图1-9,图2-0所示。
图1-8 所示为防颤动电路的原理框图。
en
sys_clk
ret
timer_clr
timer_done
Vo

本文发布于:2023-06-23 03:25:34,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1018133.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:按键   电路   颤动   模块   框图   原理   关防   设计
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图