基于FPGA实现多功能数字钟和交通灯的设计
基于FPGA多功能数字钟的设计

• 181•人类社会步入高速发展的电子时代,电子产品逐渐代替机械产品走入我们的生活。
随着科技的进步人们对电子产品的要求越来越高、传统产品已经不能满足人们的需求。
体积小、多功能、节能、环保开始成为了电子产品发展的新目标。
本文基于VHDL 语言,利用Quartus Ⅱ设计了一款多功能数字钟,内部包含秒表、闹钟、定时器、时钟四个模块。
经过实验仿真表明多功能数字钟能很好地满足生活中的各种需要。
本产品设计主要使用VHDL 语言描述了各个模块的功能来实现主要电路,最后在Quartus II 上完成了调试与仿真。
VHDL 语言实现电子设计,是一个以软件设计为主,器件配置相结合的过程,能从多个层次对数字系统进行设计,设计数字电路更为灵活方便,设计周期也可大大减小,提高了设计效率和可靠性。
我们需要的功能,在通过使用预先设计好的别的开关进一步让数字钟工作。
通过LED 显示屏可以看到数字。
本文通过软件Quartus II 9.0设计出各个模块并往开发板内写入程序实现我们想要的功能。
3 软件部分3.1 时钟部分时钟设计有三个要求第一,具有时、分、秒计数显示的功能,并以24h 循环计时。
第二,走时误差小于等于每天10s 。
第三,具有调节分钟、小时、秒以及清零的功能。
通常情况不需要让时钟停止工作,所以这部分模块就相当于实现了计数功能,对一直不断给入的1HZ 脉冲进行计数。
秒、分、时分了三个模块进行连接。
qw 是个基于FPGA多功能数字钟的设计大连理工大学城市学院 方润生 邓佳宁 于海霞图1 系统整体过渡模块,也是校正时间所用的模块。
校正时有两个开关,一个校正分、一个校正时。
如图2所示,qw 模块主要是为了实现调时功能。
实际工程中做了元件例化。
元件例化的主要作用是在大型项目的设计中许多底层文件需要反复使用,我们写好底层文件之后通过component 语句可以直接对底层文件进行调用方便了项目的设计。
3.2 闹钟闹钟在到达设置的时间时会发出持续一分钟的信号,可提前手动关闭。
基于FPGA的多功能数字钟设计报告

***大学电工电子实验报告EDA技术基础设计报告多功能数字钟设计电子信息科学与技术年 月 日多功能数字钟设计一.任务解析用Verilog硬件描述语言设计数字钟,实现:1、具有时、分、秒计数显示功能,以二十四小时循环计时。
2、具有调节小时,分钟的功能。
3、具有整点报时同时LED灯花样显示的功能。
4、【发挥】三键(模式选择,加,减)调整,数码管闪烁指示功能。
5、【发挥】增加闹钟任意设定功能,时间精确到分。
二.方案论证第2页,共19页三.重难点解析1、模式选择键的设计//模式选择键。
有5个模式,m0为正常走钟;m1为调分;m2为调时;m3为闹钟调分;m4为闹钟调时。
module mode_key(key,clr,m);input key,clr;output [2:0]m;reg [2:0]m;always @(posedge key or negedge clr) beginif(!clr) m=0;else if(m==4) m=0;else m=m+1;endendmodule2、数字钟秒钟计数设计module cnt60_sec(clk,clr,q,c);input clk,clr;output [6:0]q;output c;reg [6:0]q;reg c;always @(posedge clk or negedge clr) beginif(!clr) begin q=0;c=0;endelse if(q[3:0]==9) begin q[3:0]=0;if(q[6:4]==5) begin q[6:4]=0; c=1;endelse q[6:4]=q[6:4]+1;end第3页,共19页else begin q[3:0]=q[3:0]+1;q[6:4]=q[6:4];c=0;endendendmodule、秒钟计数模块就是一个60的计数器,计数到59的时候清零,进位加1。
调时不需要控制秒钟,所以没有加模式选择按键。
基于FPGA的交通灯设计

数字系统课程设计报告书课题名称基于FPGA的交通灯设计院系姓名学号专业班级指导教师设计时间目录摘要 (1)1设计目的 (2)2设计内容及要求 (2)3系统整体方案及设计原理 (2)4各模块电路设计与实现 (3)4.1 分频模块设计与实现 (3)4.1.1分频模块图4.1.2分频模块程序4.2 交通灯控制器模块设计与实现 (4)4.2.1交通灯控制模块图4.2.2交通灯控制模块程序4.3 1602显示驱动模块设计与实现 (11)4.3.1 1602显示驱动模块图4.3.2 1602显示驱动模块程序5系统仿真及硬件下载 (18)5.1系统仿真(步骤,总原理图,仿真图) (18)5.1.1系统仿真步骤5.1.2总原理图5.1.3仿真图5.2硬件下载(引脚分配,下载步骤) (19)5.2.1引脚分配5.2.2下载步骤6设计总结 (21)参考文献 (21)摘要可编程逻辑器件的硬件描述语言Verilog HDL,由于它具有类似于通用C语言的风格,被不少FPGA开发者所推崇。
在数字控制这个领域,FPGA的应用也越来越广泛,因此,作为硬件描述语言Verilog HDL就显示出了它的重要性。
它是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级这三个不同层次的设计,因此在实际应用中越来越广泛。
本设计为一个交通灯,控制2个路口的红、黄、绿三盏灯,让其按预置时间进行变化。
以FPGA技术为载体,应用Verilog HDL语言,在QUARTUSII软件环境下,通过模块化编程完成了灯亮时间可调的交通灯控制系统设计,并进行逻辑综合、仿真和硬件下栽。
由于设计采用了FPGA技术,大大缩短了开发研制周期,提高了设计效率。
关键词:交通灯硬件描述语言Verilog HDL FPGA1.设计目的1.掌握利用EDA开发工具QUARTUSII进行可编程逻辑器件设计的方法;2.熟练掌握可编程逻辑器件的原理图输入层次化设计方法;3.掌握利用QUARTUSII进行软件仿真及对可编程逻辑器件进行硬件下载的方法;4.进一步巩固所学的理论知识,提高运用所学知识分析和解决实际问题的能力。
基于FPGA的交通灯设计

基于FPGA的交通灯设计交通灯是城市交通系统中非常重要的组成部分,它们的设计和控制对交通流的安全和效率有重大影响。
随着科技的进步,基于FPGA(现场可编程门阵列)的交通灯设计越来越受到关注和应用。
本文将介绍基于FPGA的交通灯设计的原理和优势,并探讨其在现实生活中的应用。
首先,我们来了解FPGA技术。
FPGA是一种硬件设备,可以通过编程对其内部逻辑电路进行配置和重组。
与传统的固定功能芯片相比,FPGA具有灵活性和可重配置性。
它可以根据不同的需求和应用进行程序和逻辑的重新编程,从而实现不同的功能。
这使FPGA成为交通灯设计的理想选择。
基于FPGA的交通灯设计的核心是通过编程逻辑实现灯色的切换和时序控制。
传统的交通灯通常由三个灯色(红、黄、绿)组成,可以根据交通流的需求进行切换。
基于FPGA的交通灯设计可以通过编程逻辑控制灯色和时序,从而实现更加精确和高效的交通流控制。
基于FPGA的交通灯设计具有以下优势。
首先,由于FPGA的可重配置性,交通灯的设计可以根据实际需求进行调整和优化。
无论是交通流量大还是小,交通灯的时序和灯色可以进行灵活调整,以提高交通流的效率和安全性。
其次,FPGA的高性能特性使得交通灯能够实时响应交通流变化。
无论是高峰时段还是低峰时段,交通灯都能够根据实际情况进行灯色切换,确保交通流的顺畅和安全。
最后,FPGA的可靠性和稳定性可以保证交通灯的长期运行。
传统的交通灯可能会因为灯泡烧坏或电路故障而出现故障,而基于FPGA的交通灯设计可以提高系统的可靠性和稳定性,减少故障的发生。
基于FPGA的交通灯设计在现实生活中有广泛的应用。
首先,它可以用于城市道路的交通信号控制。
根据交通流量和道路拥堵情况,交通灯的时序和灯色可以进行调整,以最大程度地减少交通堵塞和事故发生的可能性。
其次,基于FPGA的交通灯设计可以应用于隧道和地下通道的交通信号控制。
由于隧道和地下通道的特殊环境,传统的交通灯在这些场景中难以进行有效的控制。
基于FPGA的多功能数字钟课程设计

F PG A课程设计报告(实现多功能数字钟)一、标题:设计多功能数字钟控制电路二、任务书:用MAX+PLU SⅡ软件及Verilog HDL语言设计一个多功能的数字钟,包括有时、分、秒的计时,以及校时(对小时、分钟和秒能手动调整以校准时间)、正点报时(每逢整点,产生“嘀嘀嘀嘀-嘟”,4短一长的报时音)等附加功能。
三、关键词:24进制、60进制、正点报时、校时、数字钟四、总体方案:多功能数字钟控制电路框图是由三部分组成的,即秒分时控制电路、整点报时控制电路、时段控制电路。
用Verilog HDL硬件描述语言完成编译和仿真。
五、原理框图如下:↓↓↓六、Verilog HDL硬件描述语言编写的功能模块:/*秒计数器m60*/module m60(M,CP60M,CPM,RD); output [7:0]M;output CP60M;input CPM;input RD;reg [7:0]M;wire CP60M;always@(negedge RD or posedge CPM) beginif(!RD)begin M[7:0]<=0;endelsebeginif((M[7:4]==5)&&(M[3:0]==9))beginM[7:0]<=0;endelsebeginif(M[3:0]==9)beginM[3:0]<=0;if(M[7:4]==5)begin M[7:4]<=0;endelse M[7:4]<=M[7:4]+1;endelse M[3:0]<=M[3:0]+1;endendendassign CP60M=~(M[6]&M[4]&M[3]&M[0]); endmodule/*分计数器m60*/module m60(M,CP60M,CPM,RD);output [7:0]M;output CP60M;input CPM;input RD;reg [7:0]M;wire CP60M;always@(negedge RD or posedge CPM) beginif(!RD)begin M[7:0]<=0;endelsebeginif((M[7:4]==5)&&(M[3:0]==9))beginM[7:0]<=0;endelsebeginif(M[3:0]==9)beginM[3:0]<=0;if(M[7:4]==5)begin M[7:4]<=0;endelse M[7:4]<=M[7:4]+1;endelse M[3:0]<=M[3:0]+1;endendendassign CP60M=~(M[6]&M[4]&M[3]&M[0]); endmodule/*小时计数器m24*/module m24(H,CPH,RD);output [7:0]H;input CPH,RD;reg [7:0]H;always@(negedge RD or posedge CPH) beginif(!RD) H[7:0]<=0;elsebeginif((H[7:4]==2)&&(H[3:0]==3))beginH[7:0]<=0;endelsebeginif(H[3:0]==9)begin H[3:0]<=0;H[7:4]<=H[7:4]+1;endelse H[3:0]<=H[3:0]+1;endendendendmodule/*秒分时控制计数器xiaoshi2*/module xiaoshi2(CPM,CPH,CPS,CP60M,CP60S,SWM,SWH);output CPM,CPH;input SWM,SWH;input CPS,CP60S,CP60M;reg CPM,CPH;always@(SWM or SWH or CPS or CP60S or CP60M)begincase({SWM,SWH})2'b01: begin CPM<=CPS;CPH<=CP60M;end2'b10: begin CPM<=CP60S;CPH<=CPS;enddefault: begin CPM<=CP60S;CPH<=CP60M;end endcaseendendmodule/*时段控制器sdkz*/module sdkz(h,sk);input [7:0]h;output sk;reg sk;always@(h)beginif((h<=5)||(h>=19))sk<=1;elsesk<=0;endendmodule/*报时计数器baoshi*/module baoshi(m6,m4,m3,m0,s6,s4,s3,s0,dy,gy,bshi); input m6,m4,m3,m0,s6,s4,s3,s0,dy,gy;output bshi;wire bm;reg bshi;assign bm=m6&m4&m3&m3&m0&s6&s4&s0; always@(bm or s3 or dy or gy)beginif(bm&s3)bshi<=gy;else if(bm)bshi<=dy;elsebshi<=0;endendmodule七:各模块原理图及仿真波形:24进制原理图:60进制原理图:电路原理图:时段控制:报时:1、秒计数器仿真波形2、分计数器的仿真波形3、小时计数器的仿真波形4、秒分时控制电路的仿真波形5、时段控制的仿真波形6、报时器的仿真波形八、顶层文件及仿真波形顶层文件的仿真波形:管脚号的分配如下:十:课程设计结论:此次课程设计通过最终下载及编译可实现以上功能,在七段显示器上可实现秒、分计数器60进制,时计数器24进制显示,以及调节CLK1、CLK2的频率可使计数器上数字延时显示。
多功能数字钟FPGA实现

实验报告:多功能数字钟081180008 陈家伟一、设计任务本实验使用verilog HDL语言在FPGA平台上实现了一个简单的多功能数字钟,它主要包含一下几个主要功能:(1)实现基本计时功能,并以24小时显示。
(2)实现校时功能。
(3)实现闹钟功能:设定闹钟时间,采用蜂鸣器提示,并且实现了自动关闭。
(4)实现跑表功能:具有启动、停止、继续、复位功能。
在本实验中,最大的问题便是多个功能并行时的干扰问题,需要在设计时对功能切换过程可能产生的干扰充分把握,实现多个功能的并存。
二、输入输出界面的设计在实验中,输入输出界面需要首先考虑,以保证整个系统设计的统一性。
在输入界面的设计上,由于按键资源的限制,必须考虑各个功能键的复用;在输出界面的设计上,由于显示资源的限制,必须考虑数码管显示界面的复用。
输入界面设计如下:(1)KEY1(PIN_122)为模式切换键。
整个系统具有4种功能模式:计时(mode0)、校时(mode1)、闹钟(mode2)、跑表(mode3)。
由KEY1负责模式的切换。
(2)KEY2(PIN_121)为复用键。
mode0(计时)下,KEY2键不起作用;mode1(校时)下,KEY2键使时间增加;mode2(闹钟)下,KEY2键使闹钟设置对应位增加;mode3(跑表)下,KEY2键控制跑表的开始、暂停、继续。
(3)KEY3(PIN_123)为复用键。
mode0(计时)下,KEY3键不起作用;mode1(校时)下,KEY3键负责时位、分位的切换;mode2(闹钟)下,KEY3键负责闹钟设置时位、分位的切换;mode3(跑表)下,KEY3控制跑表的复位。
输入界面设计时主要考虑的是尽量将不同模式下相近的功能归并到同一个按键上来,一方面方便用户的操作,另一方面也使得设计简洁明了,减少的错误的出现。
输出界面(四位数码管显示器)设计如下:(1)mode0(计时)下,四位数码管显示的是24小时计时:左边两个数码管显示小时;右边两个数码管显示分钟;最右边数码管的dp以闪动显示秒。
基于FPGA的交通灯的设计

课程设计一、设计任务要求基于FPGA的交通灯控制器设计1、总体要求:实现十字路口的交通灯有序显示2、具体要求:按照开发板上的两组红、黄、绿做为南北双向指示灯红灯亮60秒,绿灯亮55秒,黄灯亮5秒要求采用状态机实现状态切换3、附加要求:采用两组两位数码管实现时间倒计时显示二、设计思路1、总体设计方案由设计任务要求可知输入部分有:CLK时钟频率输入,可由实验板上直接提供,本设计选用1kHZ时钟频率。
输出部分有:1)东西方向和南北方向各使用3个LED显示,红黄绿各代表红黄绿灯。
2)东西方向和南北方向计时均为2位数,共需要4个LED七段数码管显示。
由于为共阴极控制,输出三个SEL0,SEL1,SEL2信号控制选择数码管显示,A,B,C,D,E,F,G信号为输出显示的内容。
3)R1,G1,Y1;R2,G2,Y2信号分别为东西南北红绿灯的输出控制信号。
总体设计软件原理图如下所示设计方案原理图:图1A对应13脚; B对应30脚;C对应15脚; D对应31脚;E对应33脚; F对应32脚;G对应35脚; R1对应4脚;R2对应5脚;Y1对应3脚;Y2对应10脚;G2对应8脚;SEL0对应14脚; SEL1对应11脚;SEL2对应12脚.CLK对应24脚;交通灯系统结构图如下所示:红黄绿红黄绿图2状态切换的状态图如下图:图2、模块设计及结果在VHDL设计中,采用自顶向下的设计思路。
顶层模块中,根据硬件设计,设置如下端口:外部时钟信号:Clk东西方向状态灯控制信号:R1,G1,Y1;南北方向状态灯控制信号:R2,G2,Y2;(1)分频模块:由于外部时钟信号clk的频率为1KHz,而实际需要的内部计时时钟频率为1Hz,需要一个分频电路。
输入端口:clk外部时钟信号输出端口:clk_out分频后信号源程序代码如下:数码管显示信号:A,B,C,D,E,F,G;数码管共阴极控制:SEL0,SEL1,SEL2;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity Frequency1 isport(clk:in std_logic; --外部时钟信号clk_out:out std_logic --分频后信号);end Frequency1;architecture Frequency1_arc of Frequency1 isbeginprocess(clk)variable temp:integer range 0 to 999;beginif(clk'event and clk='1')thenif(temp=999)then --分频计数temp:=0;clk_out<='0';elsetemp:=temp+1;clk_out<='1';end if;end if;end process;end;图4(2)状态选择模块:由于共需要显示4个数字,需要循环点亮7位数码管,该模块通过输入的时钟信号,循环输出4个选择信号。
基于FPGA的交通灯控制电路设计

基于FPGA的交通灯控制电路设计本文介绍了一种基于FPGA的交通灯控制电路设计。
交通灯控制是城市交通管理的一个重要部分,它有助于维护交通秩序,减少交通事故,提高交通效率。
在本电路设计中,我们使用FPGA作为主控制器,并通过数码管、按钮和LED模块与外部交互。
同时,我们还采用了状态机设计方法,以实现灵活的控制逻辑和连续的动态过渡。
首先介绍了本电路设计的硬件设计。
在本设计中,我们使用了FPGA作为主控制器,数码管用于显示当前状态,按钮用于进行手动控制,LED模块用于显示当前灯颜色。
在硬件设计中,我们通过适当的寄存器和时钟模块,实现了稳定的时序控制和同步操作。
接着,我们介绍了本电路设计的软件设计。
在软件设计中,我们采用了状态机设计方法,将交通控制逻辑分为多个状态,通过状态间的转移完成交通灯的切换控制。
具体地,我们将交通灯控制状态划分为三种:绿灯、黄灯和红灯。
在每种状态下,我们通过计数器和状态转移条件来实现精确的时间控制和灯颜色的自动切换。
同时,为了提高控制的灵活性,我们设计了手动控制模式,让用户可以通过按钮手动切换交通灯状态。
最后,我们介绍了本电路设计的实现结果。
在实现过程中,我们使用了Quartus II软件进行综合、布局和验证,并将设计的电路下载到FPGA开发板上进行实验。
实验结果表明,本交通灯控制电路设计实现了稳定、灵活和精确的交通控制,能够满足不同的交通道路需求。
综上所述,本文介绍了一种基于FPGA的交通灯控制电路设计,通过硬件和软件设计,实现了稳定、灵活和精确的交通控制。
该设计可以为城市交通管理提供帮助,为交通事故和交通拥堵的缓解做出贡献。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1设计任务与要求 (3)2系统设计总体方案 (3)3数字时钟各模块电路具体实现 (3)3.1 时钟分频模块 (3)3.2模式选择模块 (4)3.3时钟模块 (5)3.4 显示模块 (10)3.5 电子时钟原理图 (12)4 交通灯各模块电路具体实现 (13)4.1 交通灯原理图 (13)4.2主干道控制(time1) (13)4.3次干道控制(time2) (14)4.4 灯显控制(light) (15)5 总结 (15)参考文献 (16)1设计任务与要求数字电子时钟:(1)基本的要求:实现时、分、秒的显示(2)具有校时校分功能(3)具有整点报时功能(选做)(4)具有闹铃功能(选做)交通灯:(1)主干道:45秒绿灯,5秒黄灯,25秒红灯(2)次干道:50秒红灯,20秒绿灯,5秒红灯(3)时间可调(选做)2系统设计总体方案2.1 数字时钟总体设计2.2 交通灯总体设计3数字时钟各模块电路具体实现3.1分频模块由50MHz的输入频率分离10Hz(用于时钟脉冲)、1KHz(数码管扫描脉冲)、gaoyin_1KHz(整点报时高音频率)、diyin_500Hz(整点报时低音频率)的不同频率。
代码:module fenpin( clk,clk_1Hz,clk_2Hz,clk_4Hz,clk_10Hz,clk_1KHz,clk_6MHz,clk_gaoyin_1KHz,clk_diyin_500Hz);input clk;outputclk_4Hz,clk_6MHz,clk_gaoyin_1KHz,clk_diyin_500Hz,clk_1Hz,clk_2Hz,clk_10Hz,clk_1KHz;regclk_4Hz,clk_6MHz,clk_gaoyin_1KHz,clk_diyin_500Hz,clk_1Hz,clk_2Hz,clk_10Hz,clk_1KHz;reg [27:0]count1,count2,count3,count4,count5,count6,count7,count8;always@ (posedge clk )begincount1=count1+1'b1;if(count1==24999999) begin clk_1Hz=~clk_1Hz; count1=0;endcount2=count2+1'b1;if(count2==12499999) begin clk_2Hz=~clk_2Hz; count2=0;endcount3=count3+1'b1;if(count3==2499999) begin clk_10Hz=~clk_10Hz; count3=0;endcount4=count4+1'b1;if(count4==24999) begin clk_1KHz=~clk_1KHz; count4=0;endcount5=count5+1'b1;if(count5==6249000) begin clk_4Hz=~clk_4Hz; count5=0;endcount6=count6+1'b1;if(count6==4) begin clk_6MHz=~clk_6MHz; count6=0;endcount7=count7+1'b1;if(count7==24999) begin clk_gaoyin_1KHz=~clk_gaoyin_1KHz; count7=0;endcount8=count8+1'b1;if(count5==50000) begin clk_diyin_500Hz=~clk_diyin_500Hz; count8=0;end endendmodule3.2 模式选择模块输入高电平有效,未接受信号时输出M=0;接受到第一个高电平信号时M=1; 接受到第二个高电平信号时M=2; 接受到第三个高电平信号时M=3; 接受到第四个高电平信号时M=4;代码:module moshi(Clk,M);input Clk;//input res;output [2:0] M;reg[2:0] M;always@(posedge Clk)beginM = M + 1;if(M == 5)M = 0;endendmodule该模块仿真图图一模式选择仿真图3.3时钟模块该模块包括:时钟、校时、闹钟、整点报时四部分。
代码:module shizhong(CLK,M,N,T,B,C,gap,dip,gao,di);input CLK; //输入频率10Hz;input [2:0] M; //输入模式Minput B,C,gap,dip;output [23:0] T;output N,gao,di;reg [23:0] D = 1202501; //设置初始时间:12:59:45reg [23:0] T;reg [23:0] Q = 1245184; //时钟初始闹铃:13:00:00reg N,gao,di;reg [3:0] i;//reg C;always @(posedge CLK )begini = i + 1;if(M == 0) //模式0时正常显示时间beginT = D ;if(i > 9)begini = 0;D[3:0] = D[3:0] + 1;endif(D[3:0] == 10) //miaobeginD[3:0] = 0;D[7:4] = D[7:4] + 1;if(D[7:4] == 6)D[7:4] = 0;if(D[7:0] == 0) //fenD[11:8] = D[11:8] +1;if(D[11:8] == 10)beginD[11:8] = 0;D[15:12] = D[15:12]+1;if( D[15:12] == 6)D[15:12] = 0;endif(D[15:0] == 0) //shiD[19:16] = D[19:16]+1;if(D[19:16] == 10)beginD[19:16] = 0;D[23:20] = D[23:20] + 1;endendif(D[23:16] == 36 )D[23:0] = 0;if(D[15:8] == 89) //当分针为59时beginif(D[7:0] == 85 || D[7:0] == 86 || D[7:0] == 87 || D[7:0] == 88 )//在55、56、57、58秒时di输出500Hzdi = dip;elsebeginif(D[7:0] == 89) gao = gap; //在59秒时gao输出1KHzendendelsebegindi = 0;gao = 0;endendif(M == 1) //校时beginT = D;if(B) //B为高电平时时针累加beginD[19:16] = D[19:16]+1;if(D[19:16] == 10)beginD[19:16] = 0;D[23:20] = D[23:20] + 1;endif(D[23:16] == 36 )D[23:16] = 0;endif(C) //C为高电平时时针累减beginD[19:16] = D[19:16]-1;if(D[19:16] == 15)beginD[19:16] = 9;D[23:20] = D[23:20] - 1;endif(D[23:16] == 249 )D[23:16] = 35;endendif(M == 2) //校分beginT = D;if(B) //B为高电平时时针累加beginD[11:8] = D[11:8] +1;if(D[11:8] == 10)beginD[11:8] = 0;D[15:12] = D[15:12]+1;endif( D[15:12] == 6)D[15:12] = 0;endif(C) //C为高电平时时针累减beginD[11:8] = D[11:8] - 1;if(D[11:8] == 15)beginD[11:8] = 9;D[15:12] = D[15:12]-1;if( D[15:12] == 15)D[15:12] = 5;endendif(M == 3) //调节闹铃时beginT = Q;if(B)beginQ[19:16] = Q[19:16]+1;if(Q[19:16] == 10)beginQ[19:16] = 0;Q[23:20] = Q[23:20] + 1;endif(Q[23:16] == 36 )Q[23:16] = 0;endif(C)beginQ[19:16] = Q[19:16]-1;if(Q[19:16] == 15)beginQ[19:16] = 9;Q[23:20] = Q[23:20] - 1;endif(Q[23:16] == 249 )Q[23:16] = 35;endendif(M == 4) //调节闹铃时beginT = Q;if(B)beginQ[11:8] = Q[11:8] +1;if(Q[11:8] == 10)beginQ[11:8] = 0;Q[15:12] = Q[15:12]+1;endif( Q[15:12] == 6)Q[15:12] = 0;if(C)beginQ[11:8] = Q[11:8] - 1;if(Q[11:8] == 15)beginQ[11:8] = 9;Q[15:12] = D[15:12]-1;endif( Q[15:12] == 15)Q[15:12] = 5;endendif(D[23:8] == Q[23:8] && D[7:0] < 48 ) //闹铃控制输出端N = 1;else N = 0;endendmodule图二正常显示仿真图三校时仿真图四闹铃调节仿真3.4 显示模块功能:动态八位数码管扫描输入参数:扫描时钟clk_1k,待显示的数据d输出参数:数码管段选输出sm_seg,数码管位选输出sm_bit备注:待显示的数据为16进制格式,例如输入0x12345678,显示12345678代码:module led_drive3(clk_1k,D,sm_seg,sm_bit); //模块名suan_ledinput clk_1k; //输入时钟input[23:0] D;output[7:0] sm_seg; //数码管段选输出sm_segoutput[7:0] sm_bit; //数码管位选输出sm_bitreg[7:0] sm_seg_r; //数码管段选输出寄存器reg[7:0] sm_bit_r; //数码管位选输出寄存器reg[3:0] disp_dat; //定义显示数码寄存器reg[2:0] count; //定义计数寄存器assign sm_seg = sm_seg_r; //输出数码管译码结果assign sm_bit = sm_bit_r; //输出数码管选择always @(posedge clk_1k) //定义上升沿触发进程begincount <= count +1'b1;endalways @(posedge clk_1k)begincase(count) //选择扫描显示数据//3'd0 : disp_dat = {d7,d6,d5,d4}; //第一个数码管//3'd1 : disp_dat = {d3,d2,d1,d0}; //第二个数码管3'd2 : disp_dat = D[23:20]; //第三个数码管3'd3 : disp_dat = D[19:16]; //第四个数码管3'd4 : disp_dat = D[15:12]; //第五个数码管3'd5 : disp_dat = D[11:8]; // 第六个数码管3'd6 : disp_dat = D[7:4];//3'd6 : disp_dat = {d7,d6,d5,d4};// 第七个数码管3'd7 : disp_dat = D[3:0];//3'd7 : disp_dat = {d3,d2,d1,d0};// 第八个数码管default : disp_dat = 0;endcasecase(count) //选择数码管显示位3'd0 : sm_bit_r = 8'b1111_1111; //选择第一个数码管显示3'd1 : sm_bit_r = 8'b1111_1111; //选择第二个数码管显示3'd2 :begin sm_bit_r = 8'b1111_1011; end//选择第三个数码管显示3'd3 :begin sm_bit_r = 8'b1111_0111; end//选择第四个数码管显示3'd4 :begin sm_bit_r = 8'b1110_1111; end//选择第五个数码管显示3'd5 :begin sm_bit_r = 8'b1101_1111; end//选择第六个数码管显示3'd6 :begin sm_bit_r = 8'b1011_1111; end//选择第七个数码管显示3'd7 :begin sm_bit_r = 8'b0111_1111; end//选择第八个数码管显示default : sm_bit_r = 8'b1111_1111;endcaseendalways @(disp_dat)begincase (disp_dat) //七段译码4'h0 : sm_seg_r = 8'hc0; //显示"0"4'h1 : sm_seg_r = 8'hf9; //显示"1"4'h2 : sm_seg_r = 8'ha4; //显示"2"4'h3 : sm_seg_r = 8'hb0; //显示"3"4'h4 : sm_seg_r = 8'h99; //显示"4"4'h5 : sm_seg_r = 8'h92; //显示"5"4'h6 : sm_seg_r = 8'h82; //显示"6"4'h7 : sm_seg_r = 8'hf8; //显示"7"4'h8 : sm_seg_r = 8'h80; //显示"8"4'h9 : sm_seg_r = 8'h90; //显示"9"4'ha : sm_seg_r = 8'h88; //显示"a"4'hb : sm_seg_r = 8'h83; //显示"b"4'hc : sm_seg_r = 8'hc6; //显示"c"4'hd : sm_seg_r = 8'ha1; //显示"d"4'he : sm_seg_r = 8'h86; //显示"e"4'hf : sm_seg_r = 8'h8e; //显示"f"default: sm_seg_r = 8'hff;//不显示endcaseendendmodule3.5 电子时钟原理图图五时钟原理图4数字时钟各模块电路具体实现4.1 交通灯原理图包含模块:分频(同时钟)、主干道控制(time1)、次干道控制(time2)、灯显控制(light)、数码管显示(同时钟)输入引脚:clk(50MHz)输出引脚:主干道红灯(R)绿灯(G)黄灯(Y)、次干道红灯(R1)绿灯(G1)黄灯(Y1)数码管显示(seg[23..0],bit[7..0])图六交通灯原理图4.2主干道控制(time1)绿灯45秒后,变为黄灯5秒后,变为红灯25秒后,变为红灯,以此顺序循环。