1、基于FPGA电子钟设计重庆邮电大学电子设计自动化技术与应用设计报告 设计题目:基于FPGA语言的数字钟设计学 院: 通信学院 *学 号: S* 一 、需求分析本设计是基于利用FPGA设计具有时、分、秒显示功能的简易时钟电路,数字电路的基本结构由两个60进制计数器和一个24进制计数器组成,分别显示小时,分钟,秒的基本功能。计数器有可以随意调整时间的功能,当显示器显示为23时59分59秒时,秒再进一位则时计数器清零。二 、总体设计1 、设计思路:利用FPGA实现电子时钟的功能,显示电路利用七段数码管进行显示。它的计时周期是24小时,满刻度为23时59分59秒。对于FPGA来说可以使用任何的I/O口
2、来实现数据的传输,其I/O口的数量远多于单片机。整个电路以FPGA芯片作为总体控制核心,对整个电路的正常运行进行控制,对于1秒时间产生可以利用开发板上可调频率来实现每1秒。系统完成时间的实时计算以后,将计算数据通过I/O口传给数码管进行显示,通过段选和位选判断以后,将时间实时显示出来。对于调整时间来可以利用简单的独立按键来实现调整复位及小时/分钟/秒的加一操作,并用数码管实时的显示调整后的时间。当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器信号, 时、分、秒的计时结果通过6个数码管来动态显示,加上分隔符一共需要8个数码管显示。2
3、 、器件选型8位7段数码管、FPGA芯片。三、 硬件设计硬件电路总体的设计:硬件电路设计,要结合开发板上的硬件连接,从而对应连接才可以设计电路。首先确定使用FPGA的哪个I/O口,对于按键使用哪个I/O口资源,按键SW0-SW3作为独立按键使用。系统框图如下: 管脚分配表如下:四 、软件设计1、 总体软件流程图由于在Verilog语言中各个模块电路同时工作采用并行执行的,时序逻辑由时钟驱动,因此在程序中一定要注意时序的设计及时钟的设计,在各个不同的时钟驱动下电路响应的方式。在设计之初应该特别注意Verilog语言的类型。Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网
4、类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。软件设计:时钟处理子模块,数码管的显示子模块,按键的修改时间及复位子模块,时钟显示处理子模块。2、 时钟处理子模块在本模块中需要用到三个驱动时钟分别是CLK0、CLK1、F_OUT,其中CLK0为开发板内部的时钟CLK0其晶振频率为50MHz,对于1秒的产生,可以对50MHz的频率进行分频,但是也可以利用开发板上的信号输出信号输出功能状态下,能够同时最多产生3路不同频率的方波信号(F0、F1、F2),且频率可调,其中信号输出端 F0 F1 F2频率调节范围 0100Hz 01000Hz 01MHz频率掉接步进 1Hz 100Hz只需
5、将插针J2的短路帽将CLK1和F0连接起来即可产生1秒的时间,将CLK1作为时钟显示处理子模块的驱动时钟。在程序中要运用到多个时钟的驱动故在数码管的显示子模块中将CLK0进行分频得到F_OUT作为数码管显示子模块的驱动时钟。always(posedge Clk0) begin CNT_R0 = CNT_R0 + 1b1; if(CNT_R0 4096) begin F_OUT = 1; end else begin F_OUT = 0; endend3、 数码管的显示子模块在数码管的显示子模块中,首先将各个数码管一次点亮,利用人眼的余辉效应让数码管一直处于点亮的状态,其实利用频率较大的时钟进行
6、数码管的依次扫描。对于段扫描来说,首先将要显示的数字对应的段点亮,在数码管上即可显示相应的数字。在位选程序中运用F_OUT作为驱动时钟,SCAN_R作为一个循环加1变量,每到一个时钟周期是就自动加一指向下一个数码管。具体让哪个数码管点亮可以利用一个Case语句来实现选择。always (posedge F_OUT)begin SCAN_R = SCAN_R + 1b1; case(SCAN_R) 3h0 : begin DIG = 8hFE; SEG_DR = SEG_M0; end 3h1 : begin DIG = 8hFD; SEG_DR = SEG_M1; end 3h2 : begi
7、n DIG = 8hFB; SEG_DR = 8h40; end 3h3 : begin DIG = 8hF7; SEG_DR = SEG_M2; end 3h4 : begin DIG = 8hEF; SEG_DR = SEG_M3; end 3h5 : begin DIG = 8hDF; SEG_DR = 8h40; end 3h6 : begin DIG = 8hBF; SEG_DR = SEG_M4; end 3h7 : begin DIG = 8h7F; SEG_DR = SEG_M5; end endcase end4 、 按键调整时间及复位子模块按键复位时,将输出全部置零即可,按
8、键修改时间时,按下修改小时按键时,小时加1并显示在数码管上;按下修改分钟按键时,分钟数加1并显示在数码管上。always(key_out) begin temp=timed;/保存按键时时间数据 if(key_out0=0)/清零 temp=0; else if(key_out1=0)/秒调整 temp23:16=temp23:16+1b1; else if(key_out2=0)/分调整 if(temp11:8=4h9) begin temp11:8=0; temp15:12=temp15:12+1b1; end else begin temp15:8=temp15:8+1b1; end e
9、lse if(key_out3=0)/时调整 if(temp3:0=4h9) begin temp3:0=0; temp7:4=temp7:4+1b1; end else begin temp7:0=temp7:0+1b1; end end 5、 时钟显示处理子模块always(posedge Clk1)/时钟显示处理 begin timed=temp;/ begin timed3:0=timed3:0+1b1;/秒个位 if(timed3:0=4h9) begin timed7:4=timed7:4+1b1;/秒十位 timed3:0=0; if(timed7:4=4h5) begin ti
10、med11:8=timed11:8+1b1;/分个位 timed7:4=0; if(timed11:8=4h9) begin timed15:12=timed15:12+1b1;/分十位 timed11:8=0; if(timed15:12=4h5) begin timed19:16=timed19:16+1b1;/时个位 timed15:12=0; if(timed19:16=4h9) begin timed23:20=timed23:20+1b1;/时十位 timed19:16=0; end if(timed23:16=8h23)/24小时到清零 begin timed23:16=0; e
11、nd end end end end end end 五 、测试报告为了能对所设计的多功能数字进行硬件测试,应将其输入输出信号锁定在开发系统的目标芯片引脚上,并重新编译,然后对日标芯片进行编程下载,完成数字钟的最终开发,其软件仿真图和硬件测试示意图如图所示:六 、问题分析在整个设计中曾经出现了很多的问题,由于对Verilog语言还是有很多不懂得地方,故刚开始的程序总是有一些错误。往往无从下手怎么去解决,一定要注意Verilog语言中一定要注意语句是并行执行的,在与以往的程序语言中这是有很大的差别的,并行的思想就要注意驱动时钟的准确性。另外在此设计中一定选用模式5而且要调节时钟CLK1的频率为1Hz,这是作为1s的时间。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1