首页 理论教育 FPGA系统设计:数字跑表实现

FPGA系统设计:数字跑表实现

时间:2023-10-20 理论教育 版权反馈
【摘要】:100进制计数器由高位10进制计数器和低位10进制计数器组成;60进制计数器由高位6进制计数器和低位10进制计数器组成。图17.32数字跑表的第二张仿真图图17.33是第三张仿真图,描述的是秒计数器低位从9变0,同时启动秒计数器的高位计数从0到1。图17.34数字跑表的第四张仿真图数字跑表巧妙地运用进位位作为计数时钟来减少计数的位数。

FPGA系统设计:数字跑表实现

例17.24:编写一个数字跑表,具有“百分秒、秒、分”的计时功能,可以对一个小时以内的时间实现精确至百分之一秒的计时。数字跑表的实现通过FPGA实现,时间的显示可以通过编写数码管显示程序并外接数码管来实现。在这个例子里,我们只探讨数字跑表的计数器实现过程。

数字跑表的工作原理:首先要从最低位的百分秒(毫秒)计数器开始,按照系统时钟进行计数。计数至100后,给秒计数器进位,秒计数器以百分秒计数器的进位位为时钟进行计数。秒计数至60后向分计数器进位,分计数器以秒计数器的进位位为时钟进行计数。如下图所示就是数字跑表的模块结构图

图17.30 数字跑表的模块结构图

设计的思路:在实际的设计过程中,为了使计数器结构更加简单,计数器使用了高低位两个计数器实现。100进制计数器由高位10进制计数器和低位10进制计数器组成;60进制计数器由高位6进制计数器和低位10进制计数器组成。因此,这个数字跑表一共使用了6个计数器实现。

因为10进制计数器反复使用了4次,我们可以考虑使用独立的模块实现10进制计数器,这样就可以通过模块的复用来节省整个设计使用的资源。

下面这段程序为数字跑表提供了清零位CLR和暂停位PAUSE。可以通过对FPGA系统内部的时钟进行分频,分频至1/100s,从而得到CLK,CLK可以被提供给100进制计数器的时钟触发端来作为百分秒的时钟信号。从而实现真实的时间计数。

由于计数的增加,随着仿真时间的前进,要想看清楚后端的计数器细节,会导致前端的计数器仿真会越来越密而看不清。我们把这个过程中的仿真细节分成几张图。图17.31是第一张仿真。仿真开始阶段,分别生成了CLR高电平复位信号、PAUSE高电平暂停信号、Milli_Sec_L从9变0导致Milli_Sec_H从0变1的3个细节,分别对应下图从左至右3个圆圈区域。

(www.xing528.com)

图17.31 数字跑表的第一张仿真图

图17.32是第二张仿真图,描述的是百分秒计数器计数100个了,其高位从9变0,给秒计数器送了一个进位信号,导致秒计数器的低位开始计数,秒计数器的低位从0变为1。

图17.32 数字跑表的第二张仿真图

图17.33是第三张仿真图,描述的是秒计数器低位从9变0,同时启动秒计数器的高位计数从0到1。

图17.33 数字跑表的第三张仿真图

图17.34是第四张仿真图,描述的是秒计数器高位从5变0,同时给分计数器一个进位信号,刚好分计数器的低位正好从9变到0,启动分计数器的高位计数加1。

图17.34 数字跑表的第四张仿真图

数字跑表巧妙地运用进位位作为计数时钟来减少计数的位数。如果不采用分级计数的方式,而是统一使用系统时钟作为计数时钟,那秒计数器将是一个100*60=6000进制的计数器,而分计数器将是一个6000*60=360000进制的计数器。这样对于FPGA的逻辑资源来说,将是极大的耗费。这个例子里,使用了进位位作为计数时钟,需要的只是一个100进制的计数器和两个60进制的计数器。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈