毕业论文数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版.docx
- 文档编号:5074889
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:34
- 大小:27.42KB
毕业论文数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版.docx
《毕业论文数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版.docx》由会员分享,可在线阅读,更多相关《毕业论文数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版.docx(34页珍藏版)》请在冰豆网上搜索。
毕业论文数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版
毕业论文--数字电路课程设计报告--基于1602液晶屏的数字万年历Verilog版
基于1602液晶屏的数字万年历(Verilog版)
课程名称:
数字电路课程设计
专业:
集成电路设计与集成系统
基于1602液晶屏的数字万年历(Verilog版)
一.设计要求
1.基本功能
设计一个数字钟,能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz,可由系统脉冲分频得到。
在整点进行提示,可通过LED闪烁实现,闪烁频率及花型可自己设计。
能够调整小时和分钟的时间,调整的形式为通过按键进行累加。
具有闹钟功能,闹钟时间可以任意设定(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示同样可以由LED闪烁实现。
2.扩展功能
设计模式选择计数器,通过计数器来控制各个功能之间转换。
调整当前时间以及闹钟时间,在按键累加的功能不变的基础上,增加一个功能,即当按住累加键超过3秒,时间能够以4Hz的频率累加。
用LCD液晶屏来显示当前时间及功能模式。
二.设计分析及系统方案设计
1.要求分析:
基于FPGA实际并发处理的特点,对于实现数字万历年系统,相比于任何嵌入式处理器而言,其特点和优势将得以更加全面体现。
数字万年历中所有模块都将基于基准时钟源进行处理,结合FPGA本身的特点,在时钟源下可进行精确计数,可轻易而产生十分精确的万年历时间。
基础部分:
万年历可包括以下时间处理模块:
基于秒时钟计数器进行判断处理。
①秒,分,时。
②星期,上/下午。
③日,月,年。
④闹钟
功能部分:
①时间设定:
使用四个按键进行控制,分别是:
设置复位按键,设置移位键,功能“加”键,功能“减”键。
②整点报时部分:
使用7个绿色LED作为提示灯。
③闹钟提示部分:
使用16个红色LED作为闹钟报时提示。
显示部分:
使用LCD1602液晶显示屏作为万年历的主显示屏,闹钟显示部分使用6个7段数码管。
2.方案设计
基于FPGA的特点以及本万年历系统自身功能特点的实现方式。
系统采用模块化方案进行设计。
各个模块及其相关实现功能描述,同时具体的代码中模块设计将以此基础进行代码的编写,详细代码设计将在后面给出。
时钟发生模块:
基于系统外部输入基准时钟源进行秒计数,产生秒时钟,在此基础上可进行相关判断已经在计数处理产生其他需要的时间信号。
时钟处理模块:
在时钟发生模块基础上,利用FPGA多模块并发处理特点,产生分钟,小时等基础信号,在此基础上再进行计数以及一些判断处理可容易产生星期,上/下午,日,月,年等信号。
但需要注意的是以上所有万年历时钟信号的每位数(十进制)在底层均为4位二进制数表示,且由于FPGA中乘除法运算不可综合,在处理平闰年判断时,采用拼接语句,然后内嵌多个CASE语句进行处理实现该功能。
以上所有万年历信号在其他模块处理时仍然需要进行相关转换或者译码。
功能设定模块:
这里主要是针对功能按键和一些状态开关。
功能按键部分主要包括上述分析中的四个,即设置复位,设置移位,功能“加”,功能“减”。
在代码编写时需要进行按键的消抖处理,同时,由于闹钟设定和时间设定时均用到,故需要进行设置复用,这里采用的方法是,以复位键为区分,长摁下后可进行万年历的时间设定,长摁下后在短按一下返回正常状态,而闹钟设定需要在闹钟开关有效状态下,上述的功能键方有效。
功能开关主要控制整个系统的复位,闹钟开关,液晶显示屏的读写开关,背光,读写等,这里全部采用二状态的拨码开关实现。
显示模块:
采用液晶屏1602作为数字万年历的主显示屏,由于屏幕显示字符数量有限,再考虑本课程设计的综合全面性,这里闹钟显示部分采用6位数码管作为显示。
本模块主要功能是实现1602的驱动显示程序,数码管的译码驱动程序。
闹钟模块:
对闹钟寄存器的值与万年历实现时钟的值进行判断处理,并驱动红色LED灯闪烁实现闹钟的报时提示。
红色LED的效果设定为整体闪烁。
整点报时模块:
对万年历实时时钟的分钟和秒钟进行判断处理,实现在每个小时的整点报时功能,报时10秒钟,即从59分50秒开始进行报时。
以绿色LED灯作为提示,实现效果是流水闪动。
三.系统以及模块硬件电路设计
1.系统总体结构框图
基于上述方案分析,以FPGA芯片CycloneIIEP2C35F672C6为核心构建的数字万年历系统的硬件总体结构框图如下:
2.各个硬件模块接口电路图
以上各个模块实际硬件接口电路如下:
①FPGA最小系统
电源及控制电路
I/O接口BANK1和BANK2
I/O接口BANK3和BANK4
I/O接口BANK5和BANK6
I/O接口BANK7和BANK8
②万年历显示屏模块(LCD1602液晶显示屏)
③闹钟显示模块(7端数码管)
注:
本系统只用了开发板上的6位数码管作为闹钟显示,即数码管7―3
④整点报时模块(绿色LED闪烁灯)
⑤闹钟提示模块(红色LED闪烁灯)
⑥万年历设置模块(功能按键)
⑦系统设置模块(功能拨码开关)
注:
本系统只用到了开发板上的以上几个拨码开关作为系统控制
3.系统芯片管脚配置情况
数字万年历系统I/O配置表:
接口
名称类型
输入/输出结构图上
的信号名引脚号说明时钟输入clkD13系统输出时钟源系统复位输入rst_nP25系统复位开关时间设定输入key_rG26设定复位按键设定移位输入key_yiN23设定移位按键设定/加输入key_jiaP23功能“加”按键设定/减输入key_jianW26功能“减”按键闹钟设定输入alr_clk_setN26闹钟设定开关闹钟开关输入alr_clk_swN25闹钟开关控制开关1602开关输入sw3AF14液晶屏显示开关控制开关1602背光输入sw2AE14液晶屏背光开关控制开关1602读写控制输入sw1AD13液晶显示屏读写控制开关1602开关输出lcd_onL4液晶屏开关控制输出1602背光输出lcd_blonK2液晶屏背光控制输出1602读写控制输出rwK4液晶显示屏读写控制输出1602使能端输出enK3液晶显示屏使能输出1602数据/命令输出rsK1液晶显示屏命令/数据选择输出1602数据8位输出data[7…0]―液晶屏并行数据输出数码管77位输出seg7[6…0]―数码管7并行数据输出数码管67位输出seg6[6…0]―数码管6并行数据输出数码管57位输出seg5[6…0]―数码管5并行数据输出数码管47位输出seg4[6…0]―数码管4并行数据输出绿色LED灯输出led_g[7…0]―整点报时绿色LED灯输出红色LED灯输出alr_led_g[15…0]―闹钟报时红色LED灯输出
四.系统的Verilog设计
1.根据上述分析设计,系统的代码编写可分为如下三个模块文件实现:
①key_scan模块文件
模块功能及其实现算法描述:
功能:
四个设置按键的消抖及其处理,产生在长按下复位键下的有效状态送万年历时间设定,以及在闹钟有效状态下的按键输出。
算法描述:
每个消抖处理才用延迟打两拍的处理方法实现消抖20毫秒,其中对于设定复位按键设定长按下达3S为有效输出,短按一下置无效,在设置复位有效状态下其他三个按键对于万年历时钟部分方有效。
在闹钟设置开关有效状态下,其他三个按键对于闹钟设定有效。
②clock模块文件
模块功能及其实现算法描述:
功能:
万年历时间产生模块,包括时间中的秒,分,时,星期,上/下日,月,年的产生和处理,闹钟寄存器的设置,整点报时的处理及输出显示,闹钟报时的处理及显示。
算法描述:
对于秒,分,时,中的每一位十进制数,代码中定义一个4位二进制数来表示(如秒时间定义2个4位二进制数表示秒的十位和个位),采用逐级计数的方法产生相应的时间信号,在设置按键有效或者前一级时间信号产生进位时,当前时间相应加1或者减一,以此类推产生更高级的时间信号(如分对于秒来说有高级信号,秒满60对分信号为进一信号),在日,月模块的判断处理才有内嵌多个case语句的方法实现,而平润年的判断则采用对年份的十位和个位拼接利用case语句判断在非整百年下是否为闰年,而对于整百年情况下再拼接年的百位和千位,再内嵌一个case语句用同样的方法进行判断是否为闰年。
③display模块文件
功能:
液晶显示屏的驱动,万年历时间译码成1602的ASCII码字符,闹钟寄存器的译码及6个7段数码管的驱动。
算法描述:
根据液晶显示屏1602的驱动时序图(如下图,由于本系统只用到了1602的写时序,故读时序不给出),可编写1602的状态机驱动,有时序图可知,初始化是,RS0,EN0状态下,下一个状态送出命令数据,再下一个状态将EN1,即产生高脉冲信号,完成一次命令的初始化,相应显示输出一个字符驱动方法也也一直,只需将上述的RS1即可,驱动状态机如下图。
相应的ASCII码译码详见源代码。
对于闹钟的译码也详见源代码。
数码管的驱动直接才有并行数据输出即可。
Lcd1602液晶显示屏写时序图
LCD1602驱动状态机
④顶层模块为:
clk_1602
2.系统Verilog代码软件分析综合结果
系统Verilog模块综合的RTL视图如下:
系统综合报告如下:
3.系统代码的重要变量及模块名称
由于系统代码量较大,其中涉及的寄存器变量较多,always块语句较多,在源代码的各个文件模块里面均有详细的注释说明,这里不一一列举,详见源代码。
五.结论以及结果说明
1.系统开发环境:
PC机一台:
WindosXP
综合开发软件:
QuartusII9.1
仿真软件:
modelsim6.5
2.系统运行环境:
AlteraDE2-115FPGA开发板modelsim6.5的应用,故本系统没有进行相关仿真,而是着重进行了调试,调试方法采用基于开发板的实验现象,采用单模块调试,多模块组合调试等多种方法相结合的调试方法进行,确保了每个小模块功能的正常及整个系统的稳定运行。
4.系统运行结果
系统实现功能和结果如下:
系统正常运行时,按万年历实时时钟的功能正常运行,其中,液晶显示屏1602越每600毫秒更新一次。
若系统复位开关复位,系统所有数据复位,按下载时的初始化时间重新运行,即实现可手动复位。
在每个59分50秒开始,整点报时绿色LED以流水效果进行闪烁,闪烁时间10秒,即整点时停止。
在闹钟开关开情况下,数码管显示当前闹钟时间,并且到时钟走到相应闹钟设定时间时,红色LED以闪动效果进行闹钟报时提示,持续一分钟后停止。
在闹钟开关关闭状态下,数码管灭,相应闹铃功能关闭。
在闹钟设置开关有效状态下,按下功能“加”键,闹钟的分钟的个位加1,按下功能“减”则该位减1,若按下设置移位键后,再按功能“加”或“减”,则分钟的十位加1或者减1。
由此循环,实现任意修改闹钟。
只有在长按下设置复位键达3秒时,液晶显示屏上秒的个位有光标闪烁,表示可修改该位,功能“加”和“减”键可实现加1或减1。
若此时按下设置移位键,则光标移到秒的十位闪烁。
如此循环,实现可任意修改液晶显示屏万年历上的任一时间量。
其中上/下午为系统自动判断,无须修改。
若想退出修改状态,此时,短按一下设置复位键即可退出,系统正常状态下,短按设置复位键无效。
系统还设置了液晶显示屏的背光开关,显示开关控制开关,可实现液晶显示屏的显示与否,以及背光的有无。
5.系统设计指标情况分析
本系统基本实现课程设计的基本功能和扩展功能要求,但本次课程设计过程中仍存在以下一个Bug和一个需要完善的功能点。
限于学时有限,始终未能找到错误源头。
Bug:
数字万年历系统中月份的十位在未能正常进位走时。
其他位数在平润年情况下均正常。
需要完善的功能点:
闹钟系统中未设定是否重响,闹铃后认为可关闭功能。
Bug分析:
基于设计系统中采用的平润年的处理方法顺利实现了万年历中日的走时,由此可证明同样的算法也可处理月份,使之正常走时。
但经过多次的检查代码及其调试未能找出错误源头,现分析可能的错误如下:
①由于在一个always语句模块里面内嵌过多的case语句以及判断语句,致使综合成实际电路后,本模块电路起始到最终有效信号延迟时间过长,导致在一个clk周期内(本系统晶振位27MHZ,一个clk为36ns)无法正常实现本always语句功能。
这从芯片内部门电路单元或寄存器延迟角度讲也是有可能的
②本人自身代码编写风格特点不好,导致代码编写中出现难以察觉的错误,与传统编程语言不同,硬件描述语言不是主打简洁,而是追求一个良好的代码风格,良好的代码风格对于系统稳定运行有不可忽视的作用。
③还有可能是代码中各个寄存器变量的复合判断使得代码编写过程中出现了不易察觉的错误。
6.课程设计收获及体会
本次课程设计,在自身现有的FPGA的知识基础上,帮助我很好的加强了FPGA的训练和实践。
其次一点非常重要的是更加熟悉了FPGA的开发流程和相关过程中的重要环节。
再者是学习了例外一种硬件描述语言VHDL,虽然本系统是采用自身比较擅长的Verilog语言进行代码的编写,但从某种程度上来说,通过两种语言之间的对比和联系的学习方法,收获很大的一点就是理解了FPGA内部门电路系统搭建运行与语言代码编写的联系和工作原理,相比之下,FPGA的多并发处理系统对比较其他所有包括嵌入式等微处理器设计开发系统有其非常鲜明的特点,以往一些如嵌入式微处理器处理过程都是顺序执行代码内容,而FPGA真正实现了并发多线程的处理,相比之下,对于以往传统未处理器相对复杂的问题对于用FPGA处理可能将会大大简化,如本数字万年历系统就是很明显的一个例子,但对于某些比较简单的单线处理问题对于FPGA来说在代码编写就显得比较麻烦,例如本系统中的液晶显示屏驱动程序的编写,FPGA对时序的要求较传统处理器更加严格,但实现速度更快,这些是本次课程设计过程中体验比较深刻的一点。
第二点收获是VHDL和Verilog语言之间的比较和联系学习,更加深了对硬件描述语言特点的理解,对于在代码编写过程中的个人代码风格有了很好的提高,对于今后开发FPGA打下必要的基础。
再者,本次课程设计很大程度下加强了前段时间自学的Verilog语言与编写应用,理解了硬件描述在FPGA内部的分析综合情况。
最后,本次课程设计非常大的收获就是,本次设计中出现的找不到错误源头的Bug深深提醒了我今后养成一个良好的风格和习惯,一个良好的编写代码风格,对于系统的正确和稳定实现意义重大,一个良好的仿真习惯,对于错误的查找和算法的深入分析具有指导意义,能帮助我很快很好的找到那些难以察觉的错误,或是算法漏洞。
附录:
数字万年历Verilog源代码
顶层文件:
clk_1602.v
moduleclk_1602
clk,
rst_n,
key_r,
key_yi,
key_jia,
key_jian,
alr_clk_set,
alr_clk_sw,
sw1,sw2,sw3,
rs,
rw,
en,
lcd_on,
lcd_blon,
data,
seg7,seg6,seg5,seg4,
alr_led_r,
led_g
;
inputclk;
inputrst_n;
inputkey_r;
inputkey_yi;
inputkey_jia;
inputkey_jian;
inputalr_clk_set;
inputalr_clk_sw;
inputsw1;
inputsw2;
inputsw3;
output[7:
0]data;
outputrs;
outputen;
outputrw;
outputlcd_on;
outputlcd_blon;
output[6:
0]seg7;
output[6:
0]seg6;
output[6:
0]seg5;
output[6:
0]seg4;
output[15:
0]alr_led_r;
output[7:
0]led_g;
wirer_en;
wireyi_en;
wirejia_en;
wirejian_en;
wirealr_yi;
wirealr_jia;
wirealr_jian;
wire[3:
0]clk_nian_qian;
wire[3:
0]clk_nian_bai;
wire[3:
0]clk_nian_shi;
wire[3:
0]clk_nian_ge;
wire[3:
0]clk_yue_shi;
wire[3:
0]clk_yue_ge;
wire[3:
0]clk_ri_shi;
wire[3:
0]clk_ri_ge;
wire[2:
0]clk_xing;
wire[3:
0]clk_shi_shi;
wire[3:
0]clk_shi_ge;
wire[3:
0]clk_fen_shi;
wire[3:
0]clk_fen_ge;
wire[3:
0]clk_miao_shi;
wire[3:
0]clk_miao_ge;
wire[3:
0]alr_clk_shi_shi;
wire[3:
0]alr_clk_shi_ge;
wire[3:
0]alr_clk_fen_shi;
wire[3:
0]alr_clk_fen_ge;
key_scani1//按键处理模块
.clkclk,
.rst_nrst_n,
.key_rkey_r,
.key_yikey_yi,
.key_jiakey_jia,
.key_jiankey_jian,
.r_enr_en,
.yi_enyi_en,
.jia_enjia_en,
.jian_enjian_en,
.alr_yialr_yi,
.alr_jiaalr_jia,
.alr_jianalr_jian
;
clocki2//万年历时间处理模块
.clkclk,
.rst_nrst_n,
.r_enr_en,
.yi_enyi_en,
.jia_enjia_en,
.jian_enjian_en,
.alr_yialr_yi,
.alr_jiaalr_jia,
.alr_jianalr_jian,
.alr_clk_setalr_clk_set,
.alr_clk_swalr_clk_sw,
.clk_nian_qianclk_nian_qian,
.clk_nian_baiclk_nian_bai,
.clk_nian_shiclk_nian_shi,
.clk_nian_geclk_nian_ge,
.clk_yue_shiclk_yue_shi,
.clk_yue_geclk_yue_ge,
.clk_ri_shiclk_ri_shi,
.clk_ri_geclk_ri_ge,
.clk_xingclk_xing,
.clk_shi_shiclk_shi_shi,
.clk_shi_geclk_shi_ge,
.clk_fen_shiclk_fen_shi,
.clk_fen_geclk_fen_ge,
.clk_miao_shiclk_miao_shi,
.clk_miao_geclk_miao_ge,
.alr_clk_shi_shialr_clk_shi_shi,
.alr_clk_shi_gealr_clk_shi_ge,
.alr_clk_fen_shialr_clk_fen_shi,
.alr_clk_fen_gealr_clk_fen_ge,
.alr_led_ralr_led_r,
.led_gled_g
;
displayi3//显示模块1602
.clkclk,
.rst_nrst_n,
.r_enr_en,
.yi_enyi_en,
.alr_clk_swalr_clk_sw,
.sw1sw1,
.sw2sw2,
.sw3sw3,
.alr_clk_shi_shialr_clk_shi_shi,
.alr_clk_shi_gealr_clk_shi_ge,
.alr_clk_fen_shialr_clk_fen_shi,
.alr_clk_fen_gealr_clk_fen_ge,
.clk_nian_qianclk_nian_qian,
.clk_nian_baiclk_nian_bai,
.clk_nian_shiclk_nian_shi,
.clk_nian_geclk_nian_ge,
.clk_yue_shiclk_yue_shi,
.clk_yue_geclk_yue_ge,
.clk_ri_shiclk_ri_shi,
.clk_ri_geclk_ri_ge,
.clk_xingclk_xing,
.clk_shi_shiclk_shi_shi,
.clk_shi_geclk_shi_ge,
.clk_fen_shiclk_fen_shi,
.clk_fen_geclk_fen_ge,
.clk_miao_shiclk_miao_shi,
.clk_miao_geclk_miao_ge,
.datadata,
.rsrs,
.enen,
.rwrw,
.lcd_onlcd_on,
.lcd_blonlcd_blon,
.seg7seg7,
.seg6seg6,
.seg5seg5,
.seg4seg4
;
endmodule
按键处理模块文件:
key_scan.v
modulekey_scan
clk,
rst_n,
key_r,
key_yi,
key_jia,
key_jian,
r_en,
yi_en,
jia_en,
jian_en,
alr_yi,
alr_jia,
alr_jian
;
inputclk;
inputrst_n;
inputkey_r;
inputkey_yi;
inputkey_jia;
in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 数字电路 课程设计 报告 基于 1602 液晶屏 数字 万年历 Verilog