课程设计FPGA的多功能电子万历.docx
- 文档编号:17380377
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:31
- 大小:589.49KB
课程设计FPGA的多功能电子万历.docx
《课程设计FPGA的多功能电子万历.docx》由会员分享,可在线阅读,更多相关《课程设计FPGA的多功能电子万历.docx(31页珍藏版)》请在冰点文库上搜索。
课程设计FPGA的多功能电子万历
大规模集成电路设计
实验报告
题目:
多功能电子万年历
姓名:
李超
学号:
1019122140
学院:
生命科学技术学院
导师:
黄力宇
一、电子万年历简介
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能,诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭路灯等。
所有这些,都是以钟表数字化为基础的。
因此,研究电子万年历及扩大其应用,有非常现实的意义。
数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
电子万年历从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
本次所设计的电子万年历能显示日期、星期、时间,具有闹钟功能。
二、电子万年历的工作原理
◆功能键用来选择不同的工作模式:
时间正常显示功能、时间调整与显示、秒表功能、闹钟设置与查看、日期显示、日期调整与设置。
◆调整键1:
主要用于闹钟设置、日期显示与调整、秒表、时间调整与设置中的位置选择按钮,与功能键配合使用。
●2号键功能模式,即时间调整与设置时,用作时、分、秒的移位,按一下,将会实现“时-分-秒”的依次移位,便于在特定位置进行调整;
●4号键功能模式,即闹钟设置与查看时,同样用作时、分、秒的移位,按一下,将会实现“时-分-秒”的依次移位,便于在特定位置进行调整;
●6号键功能模式,即日期调整与设置时,用作月、日的移位,按一下,将会实现“月-日”的依次移位,便于在特定位置进行调整。
◆调整键2:
主要用于闹钟设置、日期显示与调整、秒表、时间调整与设置中的调整按钮,与功能键配合使用。
●2号键功能模式,即时间调整与设置时,用作时、分、秒的调整,按一下,将会使得当前调整键1选择的位置数字增加1;
●4号键功能模式,即闹钟设置与查看时,同样用作时、分、秒的调整,按一下,将会使得当前调整键1选择的位置数字增加1;
●6号键功能模式,即日期调整与设置时,用作月、日的移位,按一下,将会使得当前调整键1选择的位置数字增加1。
三、多功能电子万年历各功能模块实现
3.1时钟问题
无论是用离散逻辑、可编程逻辑,还是用全定制器件实现任何数字电路,设计不良的时钟在极限温度、电压或制造工艺存在偏差的情况下将导致系统错误的行为,所以可靠的时钟设计是非常关键的。
在FPGA设计时通常采用四种时钟:
全局时钟、门控时钟、多级逻辑时钟和波动式时钟,多时钟系统是这四种时钟类型的任意组合。
3.1.1全局时钟
对于一个设计项目来说,全局时钟(或同步时钟)是最简单和最可预测的时钟。
在FPGA设计中最好的时钟方案是:
由专用的全局时钟输入引脚驱动单个主时钟去控制设计项目中的每一个触发器。
FPGA一般都具有专门的全局时钟引脚,在设计项目时应尽量采用全局时钟,它能够提供器件中最短的时钟到输出的延时。
3.1.2门控时钟
在许多应用中,整个设计项目都采用外部的全局时钟是不可能或不实际的,所以通常用阵列时钟构成门控时钟。
门控时钟常常同微处理器接口有关,例如用地址线去控制写脉冲。
每当用组合逻辑来控制触发器时,通常都存在着门控时钟。
在使用门控时钟时,应仔细分析时钟函数,以避免毛刺的影响。
如果设计满足下述两个条件,则可以保证时钟信号不出现危险的毛刺,门控时钟就可以像全局时钟一样可靠工作:
◆驱动时钟的逻辑必须只包含一个“与门”或一个“或门”,如果采用任何附加逻辑,就会在某些工作状态下出现由于逻辑竞争而产生的毛刺。
◆逻辑门的一个输入作为实际的时钟,而该逻辑门的所有其他输入必须当成地址或控制线,它们遵守相对于时钟的建立和保持时间的约束。
3.1.3多级逻辑时钟
当产生门控时钟的组合逻辑超过一级,即超过单个的“与门”或“或门”时,该设计项目的可靠性将变得很差。
在这种情况下,即使样机或仿真结果没有显示出静态险象,但实际上仍然可能存在危险,所以我们不应该用多级组合逻辑区作为触发器的时钟端。
不同的系统需要采用不同的方法消除多级时钟,并没有一个固定的模式。
3.1.4波动式时钟
许多系统要求在同一设计内采用多时钟,最常见的例子是两个异步微处理器之间的接口,或微处理器和异步通信通道的接口。
由于两个时钟信号之间要求一定的建立和保持时间,所以上述应用引进了附加的定时约束条件,它们会要求将某些异步信号同步化。
而在许多应用中只将异步信号同步化还是不够的,当系统中有两个或两个以上非同源时钟时,数据的建立和保持时间很难得到保证,设计人员将面临复杂的时间分析问题。
最好的方法是将所有非同源时钟同步化。
使用FPGA内部的锁相环(PLL)是一个效果很好的方法,但并不是所有FPGA都带有PLL,而且带有PLL功能的芯片大多价格昂贵。
这时就需要使用带使能端的D触发器,并引入一个高频时钟来实现信号的同步化。
稳定可靠的时钟是保证系统可靠工作的重要条件,设计中不能够将任何可能含有毛刺的输出作为时钟信号,并且尽可能只使用一个全局时钟,对多时钟系统要特别注意异步信号和非同源时钟的同步问题。
为了获得高驱动能、低抖动时延、稳定的占空比的时钟信号,一般使用FPGA内部的专用时钟资源产生同步时序电路的主工作时钟。
专用时钟资源主要指两部分,一部分是布线资源,包括全局时钟布线资源和长线资源等,另一部分则是FPGA内部的PLL。
3.2电子万年历的控制系统
此电子万年历系统主要有8个模块分别设计仿真,分别是以下8个模块:
1.主控制模块maincontrol
2.时间及其设置模块timepiece_main
3.时间显示动态位选模块time_disp_select
4.显示模块disp_data_mux
5.秒表模块stopwatch
6.日期显示与设置模块date_main
7.闹钟模块alarmclock
8.分频模块fdiv
3.3主控制模块maincontrol
该模块实现对各个功能模块的整体控制,包括对时间显示与调整、日期显示与调整、闹钟显示与调整、秒表操作等的控制,结构功能图如3-1所示,波形仿真图如3-2所示。
图3-1主控制模块的结构功能图
图3-2主控制模块的波形仿真图
SW3是功能键,从波形图中可知,SW3每出现一次上升沿,输出都会发生相应的变化,即按照Timepiece_EN(时钟自动显示使能),TimeSet_EN(时钟设置与调整使能),Stopwatch_EN(秒表功能使能),Alarmclock_EN(闹钟时间设置使能),Date_EN(日期显示使能),DateSet_EN(日期显示与设置使能)的顺序依次输出有效波形“1”,对相应的模块输入有效使能,从而实现相应的功能。
3.4时间及其设置模块time_auto_and_set
时间及其设置模块主要完成时间的自动正常运行与显示,以及在相应的功能号下,实现时间的调整与设置。
3.2.1时间模块timepiece_main
该模块主要完成时间的自动增加与显示功能,即为正常的自动模式运行,其结构功能图如3-3所示,波形仿真图如3-4所示。
图3-3时间及其设置模块的结构功能图图3-4时间模块的结构功能图
◆秒自动计时子模块second_counter,结构功能图如3-5所示,
图3-5秒自动计时子模块的结构功能图
◆分自动计时子模块minute_counter,结构功能图如3-6示。
图3-6分自动计时子模块的结构功能图
◆小时自动计时子模块hour_counter,结构功能图如3-7所示。
图3-7小时自动计时子模块的结构功能图
图3-8时间模块的波形仿真图
当Timepiece_EN为1时,即处于时间自动工作状态,即每出现一次时钟信号clk,计数一次,先计数second0,当计数到1001(即十进制的9)时,向second1发出一个计数信号,此时second1进行一次计数,类推,second1计数到0101(即十进制的5),且second0计数到1001(即十进制的9)时,minute0则进行一次计数,按照此规律进行时间的计数。
当计满24小时,向day_EN发出一个计数信号,即此使能端输出有效信号1,进行日期的计数。
3.2.2时间设置模块timeset
该模块主要完成对时间的设置相关的闪烁显示控制以及时间中的小时、分钟、秒等数据的改变,流程图如3-9所示,结构功能图如3-10所示,波形仿真图如3-11所示。
图3-9时间设置模块的流程图
图3-10时间设置模块的结构功能图
图3-11时间设置模块的波形仿真图
表3-12时间设置模块的端口说明
输入端口
功能
TimeSet_EN
时间设置使能,当其电平为高时,时间设置有效
SW1,SW2
调整键1与调整键2输入信号
hour1,hour0
当前时间的小时数输入
minute1,minute0
当前时间的分钟数输入
second0,second1
当前时间的秒数输入
输出端口
功能
hour_set1,hour_set0
设置时间后的小时数
minute_set1,minute_set0
设置时间后的分钟数
second_set1,second_set0
设置时间后的秒数
disp_drive
设置中的闪烁显示设置
当Timeset_EN为1时,即实现时间设置功能。
SW1实现时间格式中小时高、低位,分钟高、低位,秒钟高、低位的位选,即每出现一个SW1上升沿,disp_drive的相应数值加1(选择具体的需要调整的位置)。
SW2实现相应得位的数值得调整,即每出现一个SW2上升沿,相应位的数值增加1。
3.2.3时间数据与时间设置数据多路选择模块time_mux
该模块用来分时向显示单元传输显示数据,流程图如3-13所示,结构功能图如3-14所示,波形仿真图如3-15所示。
图3-13多路选择模块的结构功能图
图3-14多路选择模块的流程图
图3-15多路选择模块的波形仿真图
输入端口
功能
TimeSet_EN
时间设置使能信号
hour1,hour0
自动模式中当前时间的小时数输入
minute1,minute0
自动模式中当前时间的分钟数输入
second0,second1
自动模式中当前时间的秒数输入
hour_set1,hour_set0
时间设置后的小时数输入
minute_set1,minute_set0
时间设置后的分钟数输入
second_set1,second_set0
时间设置后的秒数输入
输入端口
功能
hour_1,hour_0
当前需要显示的小时输出
minute_1,minute_0
当前需要显示的分钟输出
second_0,second_1
当前需要显示的秒输出
表3-16多路选择模块的端口说明
3.3时间显示动态位选模块time_disp_select
该模块用来分时显示时间数据,但是在选择合适的时间间隔下,人眼并不能分辨出是分时显示的,这样显示的方式可以降低功耗,结构功能图如3-17所示,波形仿真图如3-18所示。
图3-17时间显示动态位选模块的结构功能图
图3-18(a)时间显示动态位选模块的波形仿真图
图3-18(b)时间显示动态位选模块的波形仿真图
TimeSet_EN表示时间设置使能,Time_EN表示时间自动显示使能,clk_1kHz用于动态显示时间,clk_200Hz用于闪烁显示时间,timeset_disp_drive表示时间设置数据显示的同步信号,time_disp_select表示显示动态位选输出信号。
当TimeSet_EN为0,Time_EN为1时,以clk_1kHz为是时钟信号,输出自动显示的时间,按位依次显示;当TimeSet_EN为1,Time_EN为0时,则以clk_200Hz为时钟信号,输出以timeset_disp_drive对应的位置。
3.4显示模块disp_data_mux
模块是时间、日期等数据用数码管显示的控制与数据传输模块,包括数据的传输以及BCD码的译码等,结构功能图如3-19所示,波形仿真图如3-20所示。
图3-19显示模块的结构功能图
图3-20显示模块的波形仿真图
显示原理采用的是七段数码管的现实原理,如3-21所示:
图3-21七段数码管的显示原理
3.5秒表模块stopwatch
该模块实现秒表的功能,在实际中,可以通过改变自动工作模式下的时间的计数时钟的频率来实现秒表的功能,流程图如3-22所示,结构功能图如3-23所示,波形仿真图如3-24所示。
图3-22秒表模块的流程图
图3-23秒表模块的结构功能图
图3-24秒表功能的波形仿真图
EN表示秒表使能控制信号,clk1表示自动工作模式的时钟信号,clk2表示秒表工作模式的时钟信号,故当EN为有效信号1时,输出F_out与clk2同,即处于秒表工作状态,同理EN为0时,输出F_out与clk1同,即处于自动工作状态。
3.6日期显示与设置模块date_main
该模块实现日期的显示和日期的调整与设置,结构功能图如3-25所示。
图3-25时间显示与设置模块的结构功能图
3.6.1日期自动工作模块autodate
该模块实现的是日期的自动工作功能,结构功能图如3-26所示,波形仿真图如3-27所示。
图3-26日期自动工作模块的结构功能图
图3-27(a)日期自动工作模块的波形仿真图
图3-27(b)日期自动工作模块的波形仿真图
3.6.2日期设置模块setdate
该模块用于日期,结构功能图如3-28所示。
图3-28日期设置模块的结构功能图
3.7闹钟模块alarmclock
该模块实现的功能包括闹钟的设置以及闹钟时间到后的提示,流程图如3-29所示,结构功能图如3-30所示,波形仿真图如3-31所示。
图3-29闹钟模块的流程图
图3-30闹钟模块的结构功能图
图3-31闹钟模块的波形仿真图
EN为闹钟设置使能,clk_200Hz用于设置中的闪烁显示的时钟,其中还定义了hour_set1,hour_set0,minute_set1,minute_set0,second_set1,second_set0,用来表示已经设置好的闹钟时间。
闹钟一直处于工作状态,当前时间(hour1,hour0,minute1,minute0,second1,second0)与设置的闹钟时间相比较,当小时、分钟、秒钟的时间完全相同时,则闹铃响,输出信号alarm为有效信号1。
SW1和SW2是调整键,分别控制位选和数值的调整。
3.8分频模块fdiv
该模块完成全局时钟信号分频输出200Hz、60Hz、1Hz的三种时钟信号,流程图如3-32所示,结构功能图如3-33所示,波形仿真图如3-34所示。
图3-32分频模块的流程图
图3-33分频模块的结构功能图
图3-34分频模块的波形仿真图
四、附录
附录一电子万年历系统的VerilogHDL语言程序
4.1主控制模块
modulemaincontrol(clk,SW3,Timepiece_EN,TimeSet_EN,Stopwatch_EN,Alarmclock_EN,Date_EN,DateSet_EN);
outputTimepiece_EN;//时间自动显示使能
outputTimeSet_EN;//时间调整与设置使能
outputStopwatch_EN;//秒钟功能使能
outputAlarmclock_EN;//闹钟时间设置使能
outputDate_EN;//时期显示使能
outputDateSet_EN;//日期调整与设置使能
inputSW3;//功能号选择
inputclk;
regTimepiece_EN;
regTimeSet_EN;
regStopwatch_EN;
regAlarmclock_EN;
regDate_EN;
regDateSet_EN;
reg[2:
0]Function;
reg[31:
0]cnt;
regq1,q2,q3;
regCLK;
always@(posedgeclk)
begin
if(cnt<49999)
begin
cnt=cnt+1;
CLK<=0;
end
else
begin
cnt=0;
CLK<=1'b1;
end
end
always@(posedgeCLK)
begin
begin
q2<=q1;
q1<=SW3;
end
begin
q3<=q1&(~q2);
end
end
always@(posedgeq3)/*实现对时间显示与调整,日期显示与调整,闹钟显示与调整,秒表操作等的控制*/begin//功能号的产生以及其自动循环
if(Function<3'b101&&SW3==1'b1)
Function<=Function+3'b1;
else
Function<=3'b0;
case(Function)//各个分功能的控制和实现
//时钟自动显示
3'b000:
begin
Timepiece_EN<=1'b1;
TimeSet_EN<=1'b0;
Stopwatch_EN<=1'b0;
Alarmclock_EN<=1'b0;
Date_EN<=1'b0;
DateSet_EN<=1'b0;
end
//时钟调整与设置
3'b001:
begin
end
//秒表
3'b010:
begin
end
//闹钟时间设置
3'b011:
begin
end
//日期显示
3'b100:
begin
end
//日期调整与设置
3'b101:
begin
end
default:
begin
end
endcase
end
endmodule
4.2秒自动计时子模块
modulesecond_counter(EN,clk,second_data1,second_data0,E0);
output[3:
0]second_data1,second_data0;
outputE0;
inputclk,EN;
reg[3:
0]second_data1,second_data0;
regE0;
always@(posedgeclk)
begin
if(EN==1'b1)
begin
if(second_data0<4'b1001)
second_data0<=second_data0+4'b1;
else
begin
E0<=1'b0;
second_data0<=4'b0;
if(second_data1<4'b0101)
second_data1<=second_data1+4'b1;
else
begin
second_data1<=4'b0;
E0<=1'b1;
end
end
end
end
endmodule
4.3时间自动工作控制
moduletimepiece_main(CLK,Timepiece_EN,day_EN,hour0,hour1,minute0,minute1,second0,second1);
inputCLK;
inputTimepiece_EN;
outputday_EN;
output[3:
0]hour1,hour0;
output[3:
0]minute1,minute0;
output[3:
0]second1,second0;
wireSYNTHESIZED_WIRE_0;
wireSYNTHESIZED_WIRE_1;
hour_counter/*小时计时*/
b2v_inst(.clk(SYNTHESIZED_WIRE_0),.EN(Timepiece_EN),.E0(day_EN),.hour_data0(hour0),.hour_data1(hour1));
minute_counter/*分钟计时*/
b2v_inst1(.clk(SYNTHESIZED_WIRE_1),.EN(Timepiece_EN),.E0(SYNTHESIZED_WIRE_0),.minute_data0(minute0),.minute_data1(minute1));
second_counter/*秒计时*/
b2v_inst2(.clk(CLK),.EN(Timepiece_EN),.E0(SYNTHESIZED_WIRE_1),.second_data0(second0),.second_data1(second1));
endmodule
4.4时间数据与时间设置数据多路选择模块
moduletime_mux(TimeSet_EN,hour1,hour0,minute1,minute0,second1,second0,hour_set1,hour_set0,minute_set1,minute_set0,second_set1,second_set0,hour_1,hour_0,minute_1,minute_0,second_1,second_0);
output[3:
0]hour_1,hour_0;//当前需要显示的小时输出
output[3:
0]minute_1,minute_0;//当前需要显示的分钟输出
output[3:
0]second_1,second_0;//当前需要显示的秒输出
inputTimeSet_EN;//时间设置使能信号
input[3:
0]hour1,hour0;//自动模式中当前时间的小时输入
input[3:
0]minute1,minute0;//自动模式中当前时间的分钟输入
input[3:
0]second1,second0;//自动模式中当前时间的秒输入
input[3:
0]hour_set1,hour_set0;//时间设置后的小时输入
input[3:
0]minute_set1,minute_set0;//时间设置后的分钟输入
input[3:
0]second_set1,second_set0;//时间设置后的秒输入
reg[3:
0]hour_1,hour_0;
reg[3:
0]minute_1,minute_0;
reg[3:
0]second_1,second_0;
/*时间自动显示与时间调整与设置中显示数据的多路选择*/
always@(TimeSet_EN,hour1,hour0,minute1,minute0,second1,second0,hour_set1,hour_set0,minute_set1,minute_set0,second_set1,second_set0)
begin
if(TimeSet_EN==1'b1)
begin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 FPGA 多功能 电子 万历