数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版毕业论文_第1页
数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版毕业论文_第2页
数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版毕业论文_第3页
数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版毕业论文_第4页
数字电路课程设计报告基于1602液晶屏的数字万年历Verilog版毕业论文_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于1602液晶屏的数字万年历(Verilog版)课程名称: 数字电路课程设计 专 业:集成电路设计与集成系统基于1602液晶屏的数字万年历(Verilog版)一设计要求1基本功能Ø 设计一个数字钟,能够显示当前时间,分别用6个数码管显示小时、分钟、秒钟的时间,秒针的计数频率为1Hz,可由系统脉冲分频得到。Ø 在整点进行提示,可通过LED闪烁实现,闪烁频率与花型可自己设计。Ø 能够调整小时和分钟的时间,调整的形式为通过按键进行累加。Ø 具有闹钟功能,闹钟时间可以任意设定(设定的形式同样为通过按键累加),并且在设定的时间能够进行提示,提示同样可以由LED闪

2、烁实现。2扩展功能Ø 设计模式选择计数器,通过计数器来控制各个功能之间转换。Ø 调整当前时间以与闹钟时间,在按键累加的功能不变的基础上,增加一个功能,即当按住累加键超过3秒,时间能够以4Hz的频率累加。Ø 用LCD液晶屏来显示当前时间与功能模式。二设计分析与系统方案设计1要求分析:u 基于FPGA实际并发处理的特点,对于实现数字万历年系统,相比于任何嵌入式处理器而言,其特点和优势将得以更加全面体现。u 数字万年历中所有模块都将基于基准时钟源进行处理,结合FPGA本身的特点,在时钟源下可进行精确计数,可轻易而产生十分精确的万年历时间。u 基础部分:万年历可包括以下时

3、间处理模块:基于秒时钟计数器进行判断处理。秒,分,时。星期,上/下午。日,月,年。闹钟u 功能部分:时间设定:使用四个按键进行控制,分别是:设置复位按键,设置移位键,功能“加”键,功能“减”键。整点报时部分:使用7个绿色LED作为提示灯。闹钟提示部分:使用16个红色LED作为闹钟报时提示。u 显示部分:使用LCD1602液晶显示屏作为万年历的主显示屏,闹钟显示部分使用6个7段数码管。2方案设计基于FPGA的特点以与本万年历系统自身功能特点的实现方式。系统采用模块化方案进行设计。各个模块与其相关实现功能描述,同时具体的代码中模块设计将以此基础进行代码的编写,详细代码设计将在后面给出。u 时钟发生

4、模块:基于系统外部输入基准时钟源进行秒计数,产生秒时钟,在此基础上可进行相关判断已经在计数处理产生其他需要的时间信号。u 时钟处理模块:在时钟发生模块基础上,利用FPGA多模块并发处理特点,产生分钟,小时等基础信号,在此基础上再进行计数以与一些判断处理可容易产生星期,上/下午,日,月,年等信号。但需要注意的是以上所有万年历时钟信号的每位数(十进制)在底层均为4位二进制数表示,且由于FPGA中乘除法运算不可综合,在处理平闰年判断时,采用拼接语句,然后嵌多个CASE语句进行处理实现该功能。以上所有万年历信号在其他模块处理时仍然需要进行相关转换或者译码。u 功能设定模块:这里主要是针对功能按键和一些

5、状态开关。功能按键部分主要包括上述分析中的四个,即设置复位,设置移位,功能“加”,功能“减”。在代码编写时需要进行按键的消抖处理,同时,由于闹钟设定和时间设定时均用到,故需要进行设置复用,这里采用的方法是,以复位键为区分,长摁下后可进行万年历的时间设定,长摁下后在短按一下返回正常状态,而闹钟设定需要在闹钟开关有效状态下,上述的功能键方有效。功能开关主要控制整个系统的复位,闹钟开关,液晶显示屏的读写开关,背光,读写等,这里全部采用二状态的拨码开关实现。u 显示模块:采用液晶屏1602作为数字万年历的主显示屏,由于屏幕显示字符数量有限,再考虑本课程设计的综合全面性,这里闹钟显示部分采用6位数码管作

6、为显示。本模块主要功能是实现1602的驱动显示程序,数码管的译码驱动程序。u 闹钟模块:对闹钟寄存器的值与万年历实现时钟的值进行判断处理,并驱动红色LED灯闪烁实现闹钟的报时提示。红色LED的效果设定为整体闪烁。u 整点报时模块:对万年历实时时钟的分钟和秒钟进行判断处理,实现在每个小时的整点报时功能,报时10秒钟,即从59分50秒开始进行报时。以绿色LED灯作为提示,实现效果是流水闪动。三系统以与模块硬件电路设计1系统总体结构框图基于上述方案分析,以FPGA芯片Cyclone II EP2C35F672C6为核心构建的数字万年历系统的硬件总体结构框图如下:FPGA最小系统Cyclone II

7、EP2C35F672C6万年历显示屏模块LCD1602液晶显示屏整点报时模块绿色LED闪烁灯闹钟提示模块红色LED闪烁灯闹钟显示模块7段数码管万年历设置模块功能按键系统设置模块功能拨码开关2各个硬件模块接口电路图以上各个模块实际硬件接口电路如下: FPGA最小系统电源与控制电路I/O接口BANK1和BANK2I/O接口BANK3和BANK4I/O接口BANK5和BANK6I/O接口BANK7和BANK8万年历显示屏模块(LCD1602液晶显示屏)闹钟显示模块(7端数码管)注:本系统只用了开发板上的6位数码管作为闹钟显示,即数码管73整点报时模块(绿色LED闪烁灯)闹钟提示模块(红色LED闪烁灯

8、)万年历设置模块(功能按键)系统设置模块(功能拨码开关)注:本系统只用到了开发板上的以上几个拨码开关作为系统控制3系统芯片管脚配置情况数字万年历系统I/O配置表:接口名称类型(输入/输出)结构图上的信号名引脚号说明时钟输入clkD13系统输出时钟源系统复位输入rst_nP25系统复位开关时间设定输入key_rG26设定复位按键设定移位输入key_yiN23设定移位按键设定/加输入key_jiaP23功能“加”按键设定/减输入key_jianW26功能“减”按键闹钟设定输入alr_clk_setN26闹钟设定开关闹钟开关输入alr_clk_swN25闹钟开关控制开关1602开关输入sw3AF14

9、液晶屏显示开关控制开关1602背光输入sw2AE14液晶屏背光开关控制开关1602读写控制输入sw1AD13液晶显示屏读写控制开关1602开关输出lcd_onL4液晶屏开关控制输出1602背光输出lcd_blonK2液晶屏背光控制输出1602读写控制输出rwK4液晶显示屏读写控制输出1602使能端输出enK3液晶显示屏使能输出1602数据/命令输出rsK1液晶显示屏命令/数据选择输出1602数据(8位)输出data70液晶屏并行数据输出数码管7(7位)输出seg760数码管7并行数据输出数码管6(7位)输出seg660数码管6并行数据输出数码管5(7位)输出seg560数码管5并行数据输出数码

10、管4(7位)输出seg460数码管4并行数据输出绿色LED灯输出led_g70整点报时绿色LED灯输出红色LED灯输出alr_led_g150闹钟报时红色LED灯输出四系统的Verilog设计1根据上述分析设计,系统的代码编写可分为如下三个模块文件实现:key_scan模块文件模块功能与其实现算法描述:² 功能:四个设置按键的消抖与其处理,产生在长按下复位键下的有效状态送万年历时间设定,以与在闹钟有效状态下的按键输出。² 算法描述:每个消抖处理才用延迟打两拍的处理方法实现消抖20毫秒,其中对于设定复位按键设定长按下达3S为有效输出,短按一下置无效,在设置复位有效状态下其他三

11、个按键对于万年历时钟部分方有效。在闹钟设置开关有效状态下,其他三个按键对于闹钟设定有效。clock模块文件模块功能与其实现算法描述:² 功能:万年历时间产生模块,包括时间中的秒,分,时,星期,上/下日,月,年的产生和处理,闹钟寄存器的设置,整点报时的处理与输出显示,闹钟报时的处理与显示。² 算法描述:对于秒,分,时,中的每一位十进制数,代码中定义一个4位二进制数来表示(如秒时间定义2个4位二进制数表示秒的十位和个位),采用逐级计数的方法产生相应的时间信号,在设置按键有效或者前一级时间信号产生进位时,当前时间相应加1或者减一,以此类推产生更高级的时间信号(如分对于秒来说有高级

12、信号,秒满60对分信号为进一信号),在日,月模块的判断处理才有嵌多个case语句的方法实现,而平润年的判断则采用对年份的十位和个位拼接利用case语句判断在非整百年下是否为闰年,而对于整百年情况下再拼接年的百位和千位,再嵌一个case语句用同样的方法进行判断是否为闰年。display模块文件² 功能:液晶显示屏的驱动,万年历时间译码成1602的ASCII码字符,闹钟寄存器的译码与6个7段数码管的驱动。² 算法描述:根据液晶显示屏1602的驱动时序图(如下图,由于本系统只用到了1602的写时序,故读时序不给出),可编写1602的状态机驱动,有时序图可知,初始化是,RS=0,E

13、N=0状态下,下一个状态送出命令数据,再下一个状态将EN=1,即产生高脉冲信号,完成一次命令的初始化,相应显示输出一个字符驱动方法也也一直,只需将上述的RS=1即可,驱动状态机如下图。相应的ASCII码译码详见源代码。对于闹钟的译码也详见源代码。数码管的驱动直接才有并行数据输出即可。Lcd1602液晶显示屏写时序图状态1状态2状态3RS=0Data=命令字EN=0EN=1写一次命令字状态n状态n+1状态n+2RS=1Data=数据EN=0EN=1写一次数据状态n+完成初始化完成1602写整屏LCD1602驱动状态机顶层模块为:clk_16022系统Verilog代码软件分析综合结果²

14、 系统Verilog模块综合的RTL视图如下:² 系统综合报告如下:3系统代码的重要变量与模块名称由于系统代码量较大,其中涉与的寄存器变量较多,always块语句较多,在源代码的各个文件模块里面均有详细的注释说明,这里不一一列举,详见源代码。五结论以与结果说明1系统开发环境:Ø PC机一台:Windos XPØ 综合开发软件:QuartusII9.1Ø 仿真软件:modelsim6.52系统运行环境:Ø Altera DE2-115 FPGA开发实验板3系统调试仿真结果对数字万年历本身的特点,波形仿真无法进行,同时限于实验学时以与自身水平的限制

15、,对于Testbench编写能力不足,已经缺乏对仿真软件modelsim6.5的应用,故本系统没有进行相关仿真,而是着重进行了调试,调试方法采用基于开发板的实验现象,采用单模块调试,多模块组合调试等多种方法相结合的调试方法进行,确保了每个小模块功能的正常与整个系统的稳定运行。4系统运行结果系统实现功能和结果如下:² 系统正常运行时,按万年历实时时钟的功能正常运行,其中,液晶显示屏1602越每600毫秒更新一次。² 若系统复位开关复位,系统所有数据复位,按下载时的初始化时间重新运行,即实现可手动复位。² 在每个59分50秒开始,整点报时绿色LED以流水效果进行闪烁,

16、闪烁时间10秒,即整点时停止。² 在闹钟开关开情况下,数码管显示当前闹钟时间,并且到时钟走到相应闹钟设定时间时,红色LED以闪动效果进行闹钟报时提示,持续一分钟后停止。在闹钟开关关闭状态下,数码管灭,相应闹铃功能关闭。² 在闹钟设置开关有效状态下,按下功能“加”键,闹钟的分钟的个位加1,按下功能“减”则该位减1,若按下设置移位键后,再按功能“加”或“减”,则分钟的十位加1或者减1。由此循环,实现任意修改闹钟。² 只有在长按下设置复位键达3秒时,液晶显示屏上秒的个位有光标闪烁,表示可修改该位,功能“加”和“减”键可实现加1或减1。若此时按下设置移位键,则光标移到秒的

17、十位闪烁。如此循环,实现可任意修改液晶显示屏万年历上的任一时间量。其中上/下午为系统自动判断,无须修改。若想退出修改状态,此时,短按一下设置复位键即可退出,系统正常状态下,短按设置复位键无效。² 系统还设置了液晶显示屏的背光开关,显示开关控制开关,可实现液晶显示屏的显示与否,以与背光的有无。5系统设计指标情况分析本系统基本实现课程设计的基本功能和扩展功能要求,但本次课程设计过程中仍存在以下一个Bug和一个需要完善的功能点。限于学时有限,始终未能找到错误源头。² Bug:数字万年历系统中月份的十位在未能正常进位走时。其他位数在平润年情况下均正常。² 需要完善的功能点

18、:闹钟系统中未设定是否重响,闹铃后认为可关闭功能。² Bug分析:基于设计系统中采用的平润年的处理方法顺利实现了万年历中日的走时,由此可证明同样的算法也可处理月份,使之正常走时。但经过多次的检查代码与其调试未能找出错误源头,现分析可能的错误如下:由于在一个always语句模块里面嵌过多的case语句以与判断语句,致使综合成实际电路后,本模块电路起始到最终有效信号延迟时间过长,导致在一个clk周期(本系统晶振位27MHZ,一个clk为36ns)无常实现本always语句功能。这从芯片部门电路单元或寄存器延迟角度讲也是有可能的本人自身代码编写风格特点不好,导致代码编写中出现难以察觉的错误

19、,与传统编程语言不同,硬件描述语言不是主打简洁,而是追求一个良好的代码风格,良好的代码风格对于系统稳定运行有不可忽视的作用。还有可能是代码中各个寄存器变量的复合判断使得代码编写过程中出现了不易察觉的错误。6课程设计收获与体会本次课程设计,在自身现有的FPGA的知识基础上,帮助我很好的加强了FPGA的训练和实践。其次一点非常重要的是更加熟悉了FPGA的开发流程和相关过程中的重要环节。再者是学习了例外一种硬件描述语言VHDL,虽然本系统是采用自身比较擅长的Verilog语言进行代码的编写,但从某种程度上来说,通过两种语言之间的对比和联系的学习方法,收获很大的一点就是理解了FPGA部门电路系统搭建运

20、行与语言代码编写的联系和工作原理,相比之下,FPGA的多并发处理系统对比较其他所有包括嵌入式等微处理器设计开发系统有其非常鲜明的特点,以往一些如嵌入式微处理器处理过程都是顺序执行代码容,而FPGA真正实现了并发多线程的处理,相比之下,对于以往传统未处理器相对复杂的问题对于用FPGA处理可能将会大大简化,如本数字万年历系统就是很明显的一个例子,但对于某些比较简单的单线处理问题对于FPGA来说在代码编写就显得比较麻烦,例如本系统中的液晶显示屏驱动程序的编写,FPGA对时序的要求较传统处理器更加严格,但实现速度更快,这些是本次课程设计过程中体验比较深刻的一点。第二点收获是VHDL和Verilog语言

21、之间的比较和联系学习,更加深了对硬件描述语言特点的理解,对于在代码编写过程中的个人代码风格有了很好的提高,对于今后开发FPGA打下必要的基础。再者,本次课程设计很大程度下加强了前段时间自学的Verilog语言与编写应用,理解了硬件描述在FPGA部的分析综合情况。最后,本次课程设计非常大的收获就是,本次设计中出现的找不到错误源头的Bug深深提醒了我今后养成一个良好的风格和习惯,一个良好的编写代码风格,对于系统的正确和稳定实现意义重大,一个良好的仿真习惯,对于错误的查找和算法的深入分析具有指导意义,能帮助我很快很好的找到那些难以察觉的错误,或是算法漏洞。附录:数字万年历Verilog源代码顶层文件

22、:clk_1602.vmodule clk_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);input clk;input rst_n;input key_r;input key_yi;input key_jia;input key_jian;input alr_clk_set;input alr_clk_sw;input sw1;input sw2;

23、input sw3;output 7:0 data;output rs;output en;output rw;output lcd_on;output lcd_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;wire r_en;wire yi_en;wire jia_en;wire jian_en;wire alr_yi;wire alr_jia;wire alr_jian;wire 3:0 clk_nian_qian;wir

24、e 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_cl

25、k_shi_shi;wire 3:0 alr_clk_shi_ge;wire 3:0 alr_clk_fen_shi;wire 3:0 alr_clk_fen_ge;key_scan i1( /按键处理模块 .clk(clk), .rst_n(rst_n), .key_r(key_r), .key_yi(key_yi), .key_jia(key_jia), .key_jian(key_jian), .r_en(r_en), .yi_en(yi_en), .jia_en(jia_en), .jian_en(jian_en), .alr_yi(alr_yi), .alr_jia(alr_jia)

26、, .alr_jian(alr_jian); clock i2( /万年历时间处理模块 .clk(clk), .rst_n(rst_n), .r_en(r_en), .yi_en(yi_en), .jia_en(jia_en), .jian_en(jian_en), .alr_yi(alr_yi), .alr_jia(alr_jia), .alr_jian(alr_jian), .alr_clk_set(alr_clk_set), .alr_clk_sw(alr_clk_sw), .clk_nian_qian(clk_nian_qian), .clk_nian_bai(clk_nian_bai

27、), .clk_nian_shi(clk_nian_shi), .clk_nian_ge(clk_nian_ge), .clk_yue_shi(clk_yue_shi), .clk_yue_ge(clk_yue_ge), .clk_ri_shi(clk_ri_shi), .clk_ri_ge(clk_ri_ge), .clk_xing(clk_xing), .clk_shi_shi(clk_shi_shi), .clk_shi_ge(clk_shi_ge), .clk_fen_shi(clk_fen_shi), .clk_fen_ge(clk_fen_ge), .clk_miao_shi(cl

28、k_miao_shi), .clk_miao_ge(clk_miao_ge), .alr_clk_shi_shi(alr_clk_shi_shi), .alr_clk_shi_ge(alr_clk_shi_ge), .alr_clk_fen_shi(alr_clk_fen_shi), .alr_clk_fen_ge(alr_clk_fen_ge), .alr_led_r(alr_led_r), .led_g(led_g);display i3( /显示模块 1602 .clk(clk), .rst_n(rst_n), .r_en(r_en), .yi_en(yi_en), .alr_clk_s

29、w(alr_clk_sw), .sw1(sw1), .sw2(sw2), .sw3(sw3), .alr_clk_shi_shi(alr_clk_shi_shi), .alr_clk_shi_ge(alr_clk_shi_ge), .alr_clk_fen_shi(alr_clk_fen_shi), .alr_clk_fen_ge(alr_clk_fen_ge), .clk_nian_qian(clk_nian_qian), .clk_nian_bai(clk_nian_bai), .clk_nian_shi(clk_nian_shi), .clk_nian_ge(clk_nian_ge),

30、.clk_yue_shi(clk_yue_shi), .clk_yue_ge(clk_yue_ge), .clk_ri_shi(clk_ri_shi), .clk_ri_ge(clk_ri_ge), .clk_xing(clk_xing), .clk_shi_shi(clk_shi_shi), .clk_shi_ge(clk_shi_ge), .clk_fen_shi(clk_fen_shi), .clk_fen_ge(clk_fen_ge), .clk_miao_shi(clk_miao_shi), .clk_miao_ge(clk_miao_ge), .data(data), .rs(rs

31、), .en(en), .rw(rw), .lcd_on(lcd_on), .lcd_blon(lcd_blon), .seg7(seg7), .seg6(seg6), .seg5(seg5), .seg4(seg4);endmodule按键处理模块文件:key_scan.vmodule key_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);input clk;input rst_n;input key_r;input ke

32、y_yi;input key_jia;input key_jian;output r_en;output yi_en;output jia_en;output jian_en;output alr_yi;output alr_jia;output alr_jian;/-reg 26:0t_1;/3s=75000_000*40nsreg 19:0t_2;/20ms=500_000*40nsreg r1,r2,r3,r4,r5;wire key_an1,key_an2;always (posedge clk or negedge rst_n) if(rst_n=1'b0) r1<=1

33、'b1; else r1<=key_r;always (posedge clk or negedge rst_n) if(rst_n=1'b0) r2<=1'b1; else r2<=r1;assign key_an1 = r2 & (r1); /有key_r低电平时,key_an1产生一个时钟的高电平always (posedge clk or negedge rst_n) if(rst_n=1'b0) t_2<=20'b0; else if(key_an1) t_2<=20'b0; elset_2<

34、=cnt_2+20'b1; /key_an1高电平时,消抖计数器清零,否则计数实现消抖延迟20msalways (posedge clk or negedge rst_n) if(rst_n=1'b0) r3<=1'b1; else if(cnt_2=20'd499_999) r3<=key_r; /消抖20ms完成后,用类似的方法检测按键在消抖后是否是摁下,摁下为低电平always (posedge clk or negedge rst_n) if(rst_n=1'b0) r4<=1'b1; else r4<=r3;as

35、sign key_an2= r4 & (r3); /检测复位键key_r有按下一次,时间较短。always (posedge clk or negedge rst_n) /检测按键key_r是否是长摁 if(rst_n=1'b0) t_1<=27'b0; else if(key_r=1'b0) t_1<=cnt_1+27'b1; elset_1<=27'b0;always (posedge clk or negedge rst_n) /按键key_r长摁计数满3s,将r5置有效1 if(rst_n=1'b0) r5<

36、;=1'b0; else if(cnt_1=27'd74_999_999) r5<=1'b1; else if(key_an2) r5<=1'b0; /如果按键key_r只摁一次,则r5置无效0assign r_en = r5;/-/用同样两拍时钟的按键检测方法分别检测按键yi,jia,jian,reg 19:0t_3;/20ms=500_000*40nsreg 2:0 r6,r7,r8,r9;wire 2:0 key_an3;always (posedge clk or negedge rst_n) if(rst_n=1'b0) r6<

37、;=3'b111; else r6<=key_yi,key_jia,key_jian;always (posedge clk or negedge rst_n) if(rst_n=1'b0) r7<=3'b111; else r7<=r6;assign key_an3 = r7 & (r6);always (posedge clk or negedge rst_n) if(rst_n=1'b0) t_3<=20'b0; else if(key_an3) t_3<=20'b0; elset_3<=cnt_

38、3+20'b1;always (posedge clk or negedge rst_n) if(rst_n=1'b0) r8<=3'b111; else if(cnt_3=20'd499_999) r8<=key_yi,key_jia,key_jian;always (posedge clk or negedge rst_n) if(rst_n=1'b0) r9<=3'b111; else r9<=r8;assign yi_en = r5 & r92 & (r82); /在满足复位键key_r有效(r5有

39、效)前提下,按键按下才有效,assign jia_en = r5 & r91 & (r81); /否则,即使按下也输出无效assign jian_en = r5 & r90 & (r80); /实现时钟在复位键有效下才能进行修改,与显示屏上光标的移动assign alr_yi = r92 & (r82); /闹钟按键 无需复位有效assign alr_jia = r91 & (r81);assign alr_jian = r90 & (r80);endmodule万年历时钟处理模块文件:clock.vmodule clock( clk,

40、rst_n, r_en, yi_en, jia_en, jian_en, alr_yi, alr_jia, alr_jian, alr_clk_set, alr_clk_sw, clk_nian_qian, clk_nian_bai,clk_nian_shi, clk_nian_ge, clk_yue_shi, clk_yue_ge, clk_ri_shi, clk_ri_ge, clk_xing, clk_shi_shi, clk_shi_ge, clk_fen_shi, clk_fen_ge, clk_miao_shi,clk_miao_ge, alr_clk_shi_shi, alr_c

41、lk_shi_ge, alr_clk_fen_shi, alr_clk_fen_ge, alr_led_r, led_g);input clk;input rst_n;input r_en;input yi_en;input jia_en;input jian_en;input alr_yi;input alr_jia;input alr_jian;input alr_clk_set;input alr_clk_sw;output 3:0 clk_nian_qian;output 3:0 clk_nian_bai;output 3:0 clk_nian_shi;output 3:0 clk_n

42、ian_ge;output 3:0 clk_yue_shi;output 3:0 clk_yue_ge;output 3:0 clk_ri_shi;output 3:0 clk_ri_ge;output 2:0 clk_xing;output 3:0 clk_shi_shi;output 3:0 clk_shi_ge;output 3:0 clk_fen_shi;output 3:0 clk_fen_ge;output 3:0 clk_miao_shi;output 3:0 clk_miao_ge;output 3:0 alr_clk_shi_shi;output 3:0 alr_clk_sh

43、i_ge;output 3:0 alr_clk_fen_shi;output 3:0 alr_clk_fen_ge;output 15:0 alr_led_r;output 7:0 led_g;/-reg 3:0t_yi;reg 15:0 yi_r;always (posedge clk or negedge rst_n) if(!rst_n) t_yi<=4'b0; else if(yi_en)t_yi<=cnt_yi+4'b1;always (cnt_yi) /yi_r的功能是,在移位键下实现相应时间部分的修改 case(cnt_yi) 4'b0000

44、: yi_r<=16'b0000_0000_0000_0001; 4'b0001 : yi_r<=16'b0000_0000_0000_0010; 4'b0010 : yi_r<=16'b0000_0000_0000_0100; 4'b0011 : yi_r<=16'b0000_0000_0000_1000; 4'b0100 : yi_r<=16'b0000_0000_0001_0000; 4'b0101 : yi_r<=16'b0000_0000_0010_0000;

45、4'b0110 : yi_r<=16'b0000_0000_0100_0000; 4'b0111 : yi_r<=16'b0000_0000_1000_0000; 4'b1000 : yi_r<=16'b0000_0001_0000_0000; 4'b1001 : yi_r<=16'b0000_0010_0000_0000; 4'b1010 : yi_r<=16'b0000_0100_0000_0000; 4'b1011 : yi_r<=16'b0000_1000

46、_0000_0000; 4'b1100 : yi_r<=16'b0001_0000_0000_0000; 4'b1101 : yi_r<=16'b0010_0000_0000_0000; 4'b1110 : yi_r<=16'b0100_0000_0000_0000; 4'b1111 : yi_r<=16'b1000_0000_0000_0000; default: ; endcase/-reg 3:0 clk_nian_qian_r =4'd2;reg 3:0 clk_nian_bai_r =4&

47、#39;d0;reg 3:0 clk_nian_shi_r =4'd1;reg 3:0 clk_nian_ge_r =4'd2;reg 3:0 clk_yue_shi_r =4'b0;reg 3:0 clk_yue_ge_r =4'b1;reg 3:0 clk_ri_shi_r =4'b0;reg 3:0 clk_ri_ge_r =4'b1;reg 2:0 clk_xing_r;reg 3:0 clk_shi_shi_r;reg 3:0 clk_shi_ge_r;reg 3:0 clk_fen_shi_r;reg 3:0 clk_fen_ge_r

48、;reg 3:0 clk_miao_shi_r;reg 3:0 clk_miao_ge_r;reg 24:0t_1s;always (posedge clk or negedge rst_n) /27MHZ晶振下1s计数 if(rst_n=1'b0) t_1s<=25'b0; else if(cnt_1s=25'd26_999_999)t_1s<=25'b0; else if(!r_en)cnt_1s<=cnt_1s+25'b1;always (posedge clk or negedge rst_n) /秒的个位 if(!rst_n)

49、 clk_miao_ge_r<=4'b0; else if(clk_miao_ge_r>=4'd10) clk_miao_ge_r<=4'b0; else if(cnt_1s=25'd26_999_999 | ( yi_r0 && jia_en ) )clk_miao_ge_r<=clk_miao_ge_r+4'b1; else if ( yi_r0 && jian_en ) clk_miao_ge_r<=clk_miao_ge_r-4'b1;always (posedge clk o

50、r negedge rst_n) /秒的十位 if(!rst_n) clk_miao_shi_r<=4'b0; else if(clk_miao_shi_r>=4'd6) clk_miao_shi_r<=4'b0; else if(clk_miao_ge_r=4'd10 |( yi_r1 && jia_en )clk_miao_shi_r<=clk_miao_shi_r+4'b1; else if( yi_r1 && jian_en) clk_miao_shi_r<=clk_miao_shi_r-4'b1;always (posedge clk or negedge rst_n) /分的个位 if(!rst_n) clk_fen_ge_r<=4'b0; else if(clk_fen_ge_r>=4'd10) clk_fen_ge_r<=4'b0; else if(clk_miao_shi_r=4'd6 | ( yi_r2 && jia_e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论