基于FPGA的数字钟的设计

合集下载

基于FPGA的数字时钟课程设计

基于FPGA的数字时钟课程设计

西安郵電學院基于FPGA的数字时钟成员:技术规范一、功能定义1、分频:在电子钟的设计中,涉及到的频率有三个:(1):1Hz的秒计时频率,用来进行秒计时;(2):4Hz的按键防抖频率;(3):1000Hz的循环扫描频率;因此在分频模块应实现将芯片中的高频率时钟分频得到上面的三个所需频2、控制:进行正常计时,时间调整,时间复位模式的选择:(1)时间初始复位;(2)选择秒时间调整的模式;(3)选择分时间调整的模式;3、计时:进行调整时间,正常计时;(1)正常计时;(2)调整秒计时;(3)调整分计时;4、选择输出:进行时间高低位的变换及循环扫描输出:(1)进行时间高低位的变换;设计思路:一、总体设计思路图:二、功能引脚定义1、总体引脚(1)K[1]:输入,控制是否进入调整模式,调时模式或调分模式。

(2)K[2]:输入,根据K1的选择进行加1调时。

(3)CLK:输入,1赫兹,控制秒钟的频率。

(4)CLK1K:输入,1K赫兹,控制时间的连续扫描输出。

(5)[7:0]LED:输出,七段显示译码管的输入。

(6)[5:0]SEG:输出,控制六个数码管的是否接通。

(7) SC:输入,时间复位。

2、(1)控制模块:输出控制信号和时分秒计时。

控制信号控制时分秒是否正常计时。

K[1]:输入,控制是否进入调整模式,调时模式或调分模式。

K[2]:输入,根据K1的选择进行加1调时。

SC:输入,时间复位。

[5:0]SEC:复位秒计时。

[5:0]MIN:复位、调时分计时。

[5:0]HOUR:复位、调时时计时。

KEN:控制是否进行正常及时、进入调时复位状态。

(2)计时模块秒计时:输出正常的秒计时或复位计时。

分计时:输出正常的分计时或复位计时或调时计时。

时计时:输出正常的时计时或复位计时或调时计时。

(3)时间扫描模块:利用高频率的时钟不断地循环扫描是分秒计时,以便循环译码;输出控制信号,控制数码管是否有效;此模块同时进行时间的高地位的计算与输出。

基于FPGA的数字钟设计

基于FPGA的数字钟设计

EDA设计实验 基于FPGA的数字计时器的设计中文摘要FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

FPGA以设计灵活、速度快、功耗低,在集成电路中得到广泛应用。

本设计选用ALTERA公司的EP1C12Q240C8芯片,利用VHDL语言采用自顶向下的方法在Quartus Ⅱ环境下完成了数字钟的设计,最后在实验箱上进行测试。

该数字钟包含的功能有计时、显示星期、校时校分、清零、整点报时、音乐闹铃。

关键词:FPGA,SmartSOPC,Quartus Ⅱ,VHDL,多功能数字钟AbstractFPGA (Field-Programmable Gate Array) is the further development of PAL, GAL, CPLD and other programmable devices based on the product. FPGA has been widely used in integrated circuits for its flexible designing, fast speed and low power consumption.The design uses the silicon chip EP1C12Q240C8 produced by the company of ALTERA. And with the help of VHDL, the design of a digital clock is completed using the top-down approach under Quartus Ⅱ, finally carried out in the SmartSOPC. Functions of the digital clock are: timer, showing day, setting time, resetting, Chime on every hour, and alarm with music.Key words: FPGA, SmartSOPC, Quartus Ⅱ, VHDL, Multiple-used digital clock[注]:完整电路及程序见相应的设计文件中,本文只给出部分电路及程序。

基于FPGA的多功能数字钟设计报告

基于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的数字钟设计

数字钟的设计一、 设计要求设计一个数字钟,要求用数码管分别显示时、分、秒的计数,同时可以进行时间设置,并且要求在整点的时候能够实现报时功能。

二、 设计原理计数器在正常工作下是对1Hz的频率计数,在调整时间状态下是对调整的时间模块进行计数;控制按键来选择是正常计数还是调整时间,并决定是调整时还是分;时间显示的LED数码管采用动态扫描实现;在整点到达时,还具有整点报时功能。

三、 电路符号数字钟电路符号如下图所示。

CLK2为分频之前的信号,CLR为清零端,CCK 为校时允许端。

MC为分信号调整端,HC为时信号调整端。

HH[3..0]为时高位,HL[3..0]为时低位,MH[3..0]为分高位,ML[3..0]为分低位,SH[3..0]为秒高位,SL[3..0]为秒低位。

DOUT[6..0]是数码管驱动,SEG[5..0]是位选择信号,RING是整点报时信号。

四、 设计方法本设计的电子时钟包括:分频模块、计时模块、校时模块、动态扫描译码显示模块和整点报时模块。

下面通过各个模块的设计来了解电子时钟的构成:一、 分频模块程序附录:module clk2clk1s(clk,clk1s); input clk;output clk1s;reg clk1s;reg [3:0] cnt;always@(posedge clk)if(cnt==4'b1111)beginclk1s<=~clk1s;cnt<=0;endelsecnt<=cnt+1; endmodule波形仿真:二、 计时模块六十进制计数器六十进制计数器程序附录:六十进制计数器模块:module m60(clk,clr,qh,ql,cao);input clk,clr;output cao;output[3:0] qh,ql;reg [3:0] qh,ql;reg cao;always @(posedge clk or negedge clr) beginif(clr==0)beginqh<=4'h0;ql<=4'h0;cao<=0;endelse if(ql==9)beginql<=0;if(qh==5)beginqh<=0;cao<=1;endelse qh=qh+1;endelsebeginql<=ql+1;cao<=0;endendendmodule二十四进制计数器模块:module m24(clk,clr,qh,ql);input clk,clr;output[3:0] qh,ql;reg [3:0] qh,ql;always @(posedge clk or negedge clr) beginif(clr==0)beginqh<=4'h0;ql<=4'h0;endelse if(qh==2)beginql<=ql+1;if(ql==3)beginqh<=0;ql<=0;endendelse if(ql==9)beginqh<=qh+1;ql<=0;endelseql<=ql+1; end endmodule波形仿真:清零清零正常计时三、 校时模块四、 动态译码显示模块CCK 为0不支持校时,有进位信号时产生分(时)脉冲程序附录:1、位扫描信号(HH,HL,MH,ML,SH,SL逐位扫描,并输出)module sel(clk,hh,hl,mh,ml,sh,sl,out);input clk;input [3:0] hh,hl,mh,ml,sh,sl;output [3:0] out;reg [3:0] out;reg [3:0] ss=0;always @(posedge clk)beginif(ss<4'b0101)ss<=ss+1;elsess<=0;endalways @(posedge clk)begincase(ss)4'd0:out<=sl;4'd1:out<=sh;4'd2:out<=ml;4'd3:out<=mh;4'd4:out<=hl;4'd5:out<=hh;endendmodule仿真图:2、段扫描信号(选择数码管点亮哪一位)module seg(clk,seg);input clk;output [5:0] seg;reg [5:0] seg;reg [3:0] ss=0;always @(posedge clk)beginif(ss<4'b0101)ss<=ss+1;elsess<=0;endalways @(posedge clk)begincase(ss)4'd0:seg<=6'b111110;4'd1:seg<=6'b111101;4'd2:seg<=6'b111011;4'd3:seg<=6'b110111;4'd4:seg<=6'b101111;4'd5:seg<=6'b011111;default:seg<=6'b111111;endcaseend3、4—7译码module decode4_7(decodeout,indec); output[6:0] decodeout;input[3:0] indec;reg[6:0] decodeout;always @(indec)begincase(indec)4'd0:decodeout=7'b1111110;4'd1:decodeout=7'b0110000;4'd2:decodeout=7'b1101101;4'd3:decodeout=7'b1111001;4'd4:decodeout=7'b0110011;4'd5:decodeout=7'b1011011;4'd6:decodeout=7'b1011111;4'd7:decodeout=7'b1110000;4'd8:decodeout=7'b1111111;4'd9:decodeout=7'b1111011;default: decodeout=7'b0000000;endcaseendendmodule五、 整点报时模块六、 数字钟仿真图数字钟的设计注:动态扫描的时钟频率尽量要快。

基于FPGA数字时钟

基于FPGA数字时钟

基于FPGA的数字时钟设计一、课程设计目的1、进一步熟悉QuartusⅡ的软件使用方法;2、熟悉可编程逻辑器件的开发流程及硬件测试方法;3、熟悉基于FPGA的综合数字系统设计方法;二、设计任务设计一台可以显示时、分、秒的数字钟。

如图1所示为基于FPGA的数字钟设计的系统框图。

图1 数字钟系统三、设计要求1、能直接显示小时、分、秒,其中小时为以二十四为计数周期;2、能够显示日期(即年、月、日),且要求在显示时钟的数码管上显示日期,即时钟数码管与日期数码管复用;3、年、月、日要严格按照实际日期,例如1月31天,4月30天,2月闰年29天等;4、当数字钟发生走时错误时,要求电路有校时功能,可以对时、分单独校正,且校正时间时系统时钟不工作;5、当日期发生错误时,要求有校正日期功能,可以对年、月、日单独校正,且矫正日期时时钟系统仍然工作;6、具有闹钟功能,即输入想要定时的时间,当时钟到达该时间时报警,系统可由灯亮代表报警信号。

四、设计内容1、时间计数模块本次是将秒分时各个模块分开进行设计,用秒的进位作为分模块的脉冲,用分的进位作为是模块的脉冲。

秒进位的仿真波形程序:秒的程序module miao(clk,gdata,ddata,en,cl,clr);input clk;input en;input clr;output [3:0] ddata;output [3:0] gdata;output cl;reg [7:0] q;reg cl;assign ddata=q%10;assign gdata=q/10;always @(negedge clk or posedge clr)beginif(clr==1)q=0;elsebeginif(en==1)beginif(q<59)beginq=q+1;cl=0;endelsebeginq=0;cl=1;endendendendendmodule分模块和时模块的程序一秒程序类似,只是进位计数不一样。

基于FPGA的数字钟课程设计

基于FPGA的数字钟课程设计

集成电路设计课程设计报告专业班级学号姓名基于FPGA的数字钟课程设计1.任务和设计要求设计具有时、分、秒计数显示,以24小时循环计时的时钟电路,带有清零和校准功能;2.设计原理采用硬件描述语言Verilog 进行编程,实现20MHZ晶振到1HZ的分频;采用verilog 语言实现数字表功能实现的各个模块;通过各个模块的代码生成相应的模块原理图;再将各个模块生成的原理图进行叠加组成一个数字表系统;3.系统设计设计的数字表有6个输入,16个输出;6个输入中,有一个是时钟信号,开发板上的28号引脚输入的50MHZ的时钟信号;一个清零端,当数字表正常显示时,按下清零端可以实现数字钟整体电路图:4.各个模块设计基于EP1C6Q240C8的数字钟设计,有6个模块组成:Fdiv 分频模块Control 模式选择模块Tune 校正模块Zoushi 时间正常运行模块Saomiao 数码管动态扫描模块;Decoder BCD译码模块;Fdiv 模块:功能:实现20MHZ的时钟信号分成10KHZ的信号和1HZ的信号;输入:clk 为20MHZ的时钟信号;输出:f10000HZ 为10KH的时钟信号;F1HZ 为1HZ的时钟信号;Fdiv 模块代码:module fdiv(clk,f10000Hz,f1Hz);output f10000Hz,f1Hz;input clk;reg f10000Hz,f1Hz;integer CNT1=0,CNT2=0;always@(posedge clk)beginif(CNT1<1999)beginCNT1=CNT1+1;f10000Hz<=1'b0;endelsebeginCNT1=0;f10000Hz<=1'b1;endendalways@(posedge f10000Hz)beginif(CNT2<9999)beginCNT2=CNT2+1;f1Hz<=1'b0;endelsebeginCNT2=0;f1Hz<=1'b1;endendendmodulefdiv 模块波形仿真:由于实际的分频波形仿真中,由于要将20MHZ的分成1HZ的,需要将信号缩小20 000 000倍,因此,此处采用将20HZ的先分成10HZ,然后再将10HZ的分成1HZ的时钟信号;在仿真中这样整,在实际演示中再改下代码,实现真正的20MHZ到1HZ的分频;它们只是一个倍数关系而已;Control 模块:功能:实现电子表的正常显示及时间校正模式的转换;输入:key 模式修改键,每来一个高电平,mode加一次。

基于FPGA的数字时钟设计

基于FPGA的数字时钟设计

基于FPGA的数字时钟设计一、实验设计目的:1、进一步熟悉QuartusⅡ的软件使用方法;2、熟悉可编程逻辑器件的开发流程及硬件测试方法;3、熟悉基于FPGA的综合数字系统设计方法;二、设计任务及要求:设计一台可以显示时、分、秒的数字钟。

如图:图1 数字钟系统要求:1、能直接显示小时、分、秒,其中小时为以二十四为计数周期;2、当电路发生走时错误时,要求电路有校时功能,可以对时、分单独校正;3、具有闹钟功能,即输入想要定时的时间,当时钟到达该时间时报警,系统可由灯亮代表报警信号。

4、能显示年月日,使其具有日历功能,并能完成对三种日期状态的校正。

三、设计思路:在24进制程序的基础上设计时钟功能,并加入校正模块以实现对时钟的校正。

在实现时钟功能后添加闹钟模块,并用高位信号表示报时信号。

根据时钟设计方法设计日历功能,同样也加入校正模块。

并且根据日期的进位特点(3月31日,4月30日)完善对日历功能的设计。

四、设计原理:1、根据24进制与60进制的进位信号,完成分钟位,小时位的显示,使其构成基本时钟功能。

2、根据24小时的进位信号count,进行年月日功能的实现。

设置K2与K1为日历与时钟的切换键。

3、在时钟电平作用下,设计两个高低电位JZ1与JZ2电平与K2与K1信号同时控制小时位、分钟的校正。

4、用时钟电平clk2作为闹钟的进位信号,设置K2与K1为闹钟和时钟的切换键。

设置MZ1与MZ2控制闹钟的分钟位与小时位,进行闹钟的设定。

5、在K2、K1与使能信号控制下,设置JZ1与JZ2进行对日历的日与月的校正;JZ1与JZ2进行对年份的个位与十位的校正。

6、最终用K1、K2的四种模式控制显示闹钟、时钟与日历的切换显示模块。

五、设计过程:当时间为23:59:59则进位端count为1,此时判别月份与日期,进行相应的日进位与月进位。

模块2:校准与闹钟设置该程序段为分与时校正,当K1=K2=0时,JZ1为1时,进行分校准;JZ2为1时,进行时校准。

基于FPGA的数字时钟设计

基于FPGA的数字时钟设计

FPGA大作业报告定时闹钟(已在DE2板上测试)分析与设计分析题目要求设计一个具有系统时间设置和带闹钟功能的24小时计时器中的应用,大致应该实现计时功能、设置并显示新的闹钟时间、设置新的计时器时间、闹钟功能这四个基础功能。

我们的思路是先设计一个基础计时器开始,再添加各种需要的功能。

即为下图所示:而设计一个基础计时器,则可以考虑用很基础的三个模块完成:分频模块、计时模块、显示模块。

计时模块也是核心的一个部分,我们所需要添加的各种功能模块也可以完全融合在该模块中,当然也可以独立出来。

由题目要求,该系统需要一个系统50MHz时钟,当然也应该给定一个系统复位(或者是模块复位,这里选用仅在时钟模块复位)。

另外需要3个按键,分别是设置按键“set”、设置系统时间按键“tim”、设置闹钟时间按键“alarm”,以及四组时间输入。

我们将四个数码管显示分为shi1、shi0、fen1、fen0,每一个由4位拨动开关控制设定时间,因为每一个最大值最多为“9”(1001),所以用4位足够。

因为要驱动7位数码管,所以输出量的位宽设为7位[6:0]。

最终选定由三个部分组成所有功能。

下图为系统的整个内部关联:设计分频模块功能:将系统时钟50MHz分频为低频秒计数时钟(1Hz)和显示刷新时钟(1KHz)。

端口定义:input clk;output clk1hz , clk1khz ;代码:module fp1hz(clk,clk1hz,clk1khz);input clk; //50MHzoutput clk1hz,clk1khz; //1Hz、1KHzreg[24:0] cnt1;reg clk1hz;always@(posedge clk) //分频1Hzbeginif(cnt1==25'd2*******)begincnt1<=0;clk1hz<=~clk1hz;endelsecnt1<=cnt1+1'b1;endreg[14:0] cnt2;reg clk1khz;always@(posedge clk) //分频1KHzbeginif(cnt2==15'd24999)begincnt2<=0;clk1khz<=~clk1khz;endelsecnt2<=cnt2+1'b1;endendmodule时钟处理模块功能:在秒时钟下计数,实现基本计时器功能,并且添加设置系统时间和闹钟时间以及闹铃功能(用LED取代)。

基于FPGA的数字电子钟的设计与实现

基于FPGA的数字电子钟的设计与实现

基于FPGA的数字电⼦钟的设计与实现背景:本实验所有结果基于Quartus II 13.1 (64-bit)实现,实验过程采⽤⾃下⽽上⽬录⼀、基本功能设计与思路基本功能:能实现秒、分钟、⼩时的计数,计数结果清晰稳定的显⽰在 6 位数码管上。

1、动态显⽰模块该模块主要功能是通过数码管的动态扫描实现 6 位数码管显⽰计数结果,本模块由扫描模块scan_cnt6,位选控制模块 dig_select,数据选择控制模块 seg_select 以及译码模块 decoder 构成扫描模块 scan_cnt6模块功能:产⽣ 位选控制端dig_select 和数据选择端 code_select 模块所需要的地址信息,扫描时钟决定位选信号和数据切换的速度。

设计思路:利⽤74390芯⽚(P160 TTL 双⼗进制异步计数器)构建⼀个模六计数器,就是6进制计数器,利⽤计数到6(110)时,“q2”和“q1”为⾼电平,产⽣ ⼀个复位信号,加到74390的⾼电平有效的异步清0端“1CLR”上,使计数器回0,从⽽实现模六计数。

设计结果:cnt6模块设计图波形仿真:(默认为时序仿真)cnt6模块波形仿真图位选模块 dig_select模块功能:在地址端的控制下,产⽣位选信号。

设计思路:利⽤74138芯⽚(3线-8线译码器),当选通端输⼊端G1为⾼电平,选通端输⼊端G2AN和G2BN为低电平时,将扫描信号cnt6的输出作为输⼊信号,dig[5..0]是译码输出,输出低电平有效。

设计结果:dig_select模块设计图波形仿真:dig_select模块波形仿真图数据选择模块 seg_select模块功能:输⼊ 6 组数据,每组数据 4bit,本模块完成在地址端的控制下从6 组数据当中选择 1 组输出。

设计思路:利⽤74151芯⽚(P91 8选1数据选择器),在控制输⼊端GN为低电平时,将扫描信号的选择下,分别选中D[5..0]对应的输⼊信号输出为Y。

基于FPGA多功能数字钟的设计

基于FPGA多功能数字钟的设计

实验名称:基于FPGA的数字时钟设计一、实验目的:通过实验熟练运用Verilog HDL语言和 FPGA开发软件,使用BASYS2开发板设计一个可调式并且较复杂的数字时钟。

二、实验硬件要求:计算机、BASYS2开发板、蜂鸣器三、实验内容:1、电路功能:在ISE Design Suite 14.7软件开发环境下,使用Verilog描述语言、结合FPGA开发板编译和仿真数字时钟;要求时钟能进行基本的计时功能,按照:“时:分”来显示时间,秒的功能由流水灯表示;能引入秒脉冲进行校时、校分,并可用rst信号给清零;具有整点报时功能,当计时到整点的时候蜂鸣器开始鸣响,响声为乐曲“铃儿响叮当”。

2、电路图:3、Veilog 程序:1)分频模块div_clk:module divclk(sys_clk,rst,sec_clk);input sys_clk,rst;//系统时钟,复位output reg sec_clk;//秒时钟输出reg[27:0] cnt;//分频计数器,在人眼可识别范围之内always @(negedge sys_clk)beginif(rst)//对计数器进行复位begincnt <= 28'h0000000;sec_clk <= 1'b0;endelseif(cnt >= 28'h17d783f)begincnt <= 28'h0000000;sec_clk <= ~sec_clk;endelse cnt <= cnt+1'b1;endendmodule2)时钟计时模块clockmoduleclock(clk,rst,key,hor_h,hor_l,min_h,min_l,sec_h,sec_l,speak,sys_clk); input clk,rst,sys_clk;input [3:0]key;output [3:0]hor_h,hor_l,min_h,min_l,sec_h,sec_l;output speak;reg [3:0]hor_h,hor_l,min_h,min_l,sec_h,sec_l;reg speak;always@(posedge clk or posedge rst)beginif(rst)beginsec_h <=4'h0;sec_l <=4'h0;min_h <=4'h0;min_l <=4'h0;hor_h <=4'h0;hor_l <=4'h0;endelsecase(key)4'b1000:beginif(hor_h >= 4'h2)hor_h <= 4'h0;elsehor_h <= hor_h + 1'b1;end4'b0100:beginif(hor_l >= 4'h9||(hor_h >= 4'h2 && hor_l >= 4'h3)) hor_l <= 4'h0;elsehor_l <= hor_l + 1'b1;end4'b0010:beginif(min_h >= 4'h5)min_h <= 4'h0;elsemin_h <= min_h + 1'b1;end4'b0001:beginif(min_l >= 4'h9)min_l <= 4'h0;elsemin_l <= min_l + 1'b1;enddefault :beginif(sec_l >= 4'h9)beginsec_l <= 4'h0;if(sec_h >= 4'h5)beginsec_h <= 4'h0;if(min_l >= 4'h9)beginmin_l <= 4'h0;if(min_h >= 4'h5)beginmin_h <= 4'h0;if(hor_l >= 4'h9||(hor_h >= 4'h2 && hor_l >= 4'h3))beginhor_l <= 4'h0;if(hor_h >= 4'h2)hor_h <= 4'h0;elsehor_h <= hor_h + 1'b1;endelsehor_l <= hor_l + 1'b1;endelsemin_h <= min_h + 1'b1;endelsemin_l <= min_l + 1'b1;endelsesec_h <= sec_h + 1'b1;endelsesec_l <= sec_l + 1'b1;endendcaseendalways @(posedge clk)beginif(rst)speak <= 1'b0;else if(min_h == 4'h0 && min_l <=4'h0 && sec_h <= 4'h0)speak <= 1'b1;elsespeak <= 1'b0;endendmodule3)发声模块speaker:module speaker(clk,rst,en,f);input clk,rst,en;output reg f;reg [6:0] tonestep;reg [3:0] tonecode;reg [19:0] divcnt;reg [19:0] cntnum;reg sub_clk;reg[24:0] sub_cnt;always@(posedge clk)beginif(rst) beginsub_cnt <= 0;cntnum <= 0;divcnt <= 0;f <= 0;sub_clk <=0;endelse beginif(sub_cnt >=1500000)beginsub_clk <= ~sub_clk;sub_cnt <=0;endelse sub_cnt <= sub_cnt + 1'b1;if(en == 1'b1)begincase(tonecode)1:cntnum <= 95444;2:cntnum <= 85052;3:cntnum <= 75750;4:cntnum <= 71625;5:cntnum <= 63775;6:cntnum <= 56825;7:cntnum <= 50600;default : cntnum <= 0;endcaseif(cntnum == 0)f <= 1'b0;elseif(divcnt >= cntnum)begindivcnt <= 0;f <= ~f;endelse divcnt <= divcnt + 1'b1;endendendalways@(posedge sub_clk)beginif(rst)begintonestep <= 0;tonecode <= 0;endelseif(tonestep <=80)tonestep <= tonestep + 1'b1;else tonestep <= 0;case(tonestep)7'b0000000:tonecode <= 3;7'b0000001:tonecode <= 3;7'b0000010:tonecode <= 8;7'b0000011:tonecode <= 3;7'b0000100:tonecode <= 3;7'b0000101:tonecode <= 8;7'b0000110:tonecode <= 8;7'b0000111:tonecode <= 3;7'b0001000:tonecode <= 3;7'b0001001:tonecode <= 3;7'b0001010:tonecode <= 3;7'b0001011:tonecode <= 8;7'b0001100:tonecode <= 8;7'b0001101:tonecode <= 3;7'b0001110:tonecode <= 3;7'b0001111:tonecode <= 8;7'b0010000:tonecode <= 3;7'b0010001:tonecode <= 3;7'b0010010:tonecode <= 8;7'b0010011:tonecode <= 8;7'b0010101:tonecode <= 3; 7'b0010110:tonecode <= 3; 7'b0010111:tonecode <= 3; 7'b0011000:tonecode <= 8; 7'b0011001:tonecode <= 8; 7'b0011010:tonecode <= 3; 7'b0011011:tonecode <= 3; 7'b0011100:tonecode <= 8; 7'b0011101:tonecode <= 5; 7'b0011110:tonecode <= 5; 7'b0011111:tonecode <= 8; 7'b0100000:tonecode <= 8; 7'b0100001:tonecode <= 1; 7'b0100010:tonecode <= 1; 7'b0100011:tonecode <= 8; 7'b0100100:tonecode <= 2; 7'b0100101:tonecode <= 2; 7'b0100110:tonecode <= 8; 7'b0100111:tonecode <= 8; 7'b0101000:tonecode <= 3; 7'b0101001:tonecode <= 3; 7'b0101010:tonecode <= 3; 7'b0101011:tonecode <= 3; 7'b0101100:tonecode <= 8; 7'b0101101:tonecode <= 8; 7'b0101110:tonecode <= 4; 7'b0101111:tonecode <= 4; 7'b0110000:tonecode <= 8; 7'b0110001:tonecode <= 4; 7'b0110010:tonecode <= 4;7'b0110100:tonecode <= 8; 7'b0110101:tonecode <= 4; 7'b0110110:tonecode <= 4; 7'b0110111:tonecode <= 4; 7'b0111000:tonecode <= 8; 7'b0111001:tonecode <= 4; 7'b0111010:tonecode <= 8; 7'b0111011:tonecode <= 8; 7'b0111100:tonecode <= 4; 7'b0111101:tonecode <= 4; 7'b0111110:tonecode <= 8; 7'b0111111:tonecode <= 3; 7'b1000000:tonecode <= 3; 7'b1000001:tonecode <= 8; 7'b1000010:tonecode <= 8; 7'b1000011:tonecode <= 3; 7'b1000100:tonecode <= 3; 7'b1000101:tonecode <= 3; 7'b1000110:tonecode <= 8; 7'b1000111:tonecode <= 3; 7'b1001000:tonecode <= 8; 7'b1001001:tonecode <= 3; 7'b1001010:tonecode <= 8; 7'b1001011:tonecode <= 5; 7'b1001100:tonecode <= 5; 7'b1001101:tonecode <= 8; 7'b1001110:tonecode <= 5; 7'b1001111:tonecode <= 5; 7'b1010000:tonecode <= 8; 7'b1000001:tonecode <= 8;7'b1000010:tonecode <= 4;7'b1000011:tonecode <= 4;7'b1000100:tonecode <= 8;7'b1000101:tonecode <= 2;7'b1000110:tonecode <= 2;7'b1000111:tonecode <= 8;7'b1001000:tonecode <= 8;7'b1001001:tonecode <= 1;7'b1001010:tonecode <= 1;7'b1001011:tonecode <= 1;7'b1001100:tonecode <= 1;7'b1001101:tonecode <= 8;7'b1001110:tonecode <= 8;7'b1001111:tonecode <= 5;7'b1010000:tonecode <= 5;7'b1010001:tonecode <= 8;7'b1010010:tonecode <= 3;7'b1010011:tonecode <= 3;7'b1010100:tonecode <= 8;7'b1010101:tonecode <= 8;7'b1010110:tonecode <= 2;7'b1010111:tonecode <= 2;7'b1011000:tonecode <= 8;7'b1011001:tonecode <= 1;7'b1011010:tonecode <= 1;7'b1011011:tonecode <= 8;7'b1011100:tonecode <= 8;endcaseendendmodule4)数码管显示模块seg:module seg(q,ctr,h_h,h_l,m_h,m_l,clk,rst);output[6:0]q;output[3:0] ctr;input[3:0] h_h,h_l,m_h,m_l;input clk,rst;reg[6:0] q;reg[25:0] count;reg[3:0] temp;reg[3:0] scan;always @ (posedge clk)beginif (rst)begincount = 0;endelsebegincount = count +1;endendalways @ (posedge clk ) //Seg Scanbeginif(rst)beginscan<=4'b0000;endelsecase(count[11:10]) // 执行设计时将扫描频率改回 2'b00: scan<=4'b0111;2'b01: scan<=4'b1011;2'b10: scan<=4'b1101;2'b11: scan<=4'b1110;endcaseendassign ctr = scan;always @ (posedge clk) //Seg Scanbeginif(rst)begintemp<=4'b0000;endelsecase(count[11:10]) // 执行设计时将扫描频率改回 2'b00: temp<=h_h;2'b01: temp<=h_l;2'b10: temp<=m_h;2'b11: temp<=m_l;endcaseendalways @(posedge clk) //数码管译码beginif(rst)beginq<=7'b0000000;endelsecase(temp)4'd0:q<=7'b0000001; //04'd1:q<=7'b1001111; //14'd2:q<=7'b0010010; //24'd3:q<=7'b0000110; //34'd4:q<=7'b1001100; //44'd5:q<=7'b0100100; //54'd6:q<=7'b0100000; //64'd7:q<=7'b0001111; //74'd8:q<=7'b0000000; //84'd9:q<=7'b0000100; //9default:q<=7'b0000001;endcaseendendmodule5)秒计时流水灯模块sec_ledmodule sec_led(input sys_clk,input rst,output [7:0] led);reg[24:0] cnt;reg[7:0] led_reg;always@(posedge sys_clk)beginif(rst)cnt <= 0;else cnt <= cnt+1;endalways@(posedge sys_clk)beginif(rst)led_reg <= 8'b0000_0001;else if (cnt == 25'd4*******)beginled_reg <= led_reg << 1;if(led_reg==8'b1000_0000)led_reg<=8'b0000_0001;endassign led=led_reg;Endmodule6键盘修改模块:module keyboard(input sys_clk,// input rst_n,input ps2_clk,input ps2_data,output reg[3:0] key_val);wire [15:0]xkey;reg ps2cf,ps2df;reg clk25=0;reg [7:0]ps2c_filter,ps2d_filter;reg [10:0]shift1,shift2;assign xkey={shift2[8:1],shift1[8:1]};assign rst_n=1;always@(posedge sys_clk)clk25=~clk25;always@(posedge clk25 or negedge rst_n) beginif(!rst_n)beginps2c_filter<=0;ps2d_filter<=0;ps2cf<=1;ps2df<=1;endelsebeginps2c_filter[7]<=ps2_clk;ps2c_filter[6:0]<=ps2c_filter[7:1];ps2d_filter[7]<=ps2_data;ps2d_filter[6:0]<=ps2c_filter[7:1];if(ps2c_filter==8'b1111_1111)ps2cf<=1;elseif(ps2c_filter==8'b0000_0000)ps2cf<=0;if(ps2d_filter==8'b1111_1111)ps2df<=1;elseif(ps2d_filter==8'b0000_0000)ps2df<=0;endendalways@(negedge ps2cf or negedge rst_n)beginif(!rst_n)beginshift1<=0;shift2<=1;endelsebeginshift1<={ps2df,shift1[10:1]};shift2<={shift1[0],shift2[10:1]};endendparameterone = 16'b0001_0110_0001_0110,//{16,16},two = 16'b0001_1110_0001_1110,//{1e,1e},three = 16'b0010_0110_0010_0110,//{26,26},four = 16'b0010_0101_0010_0101,//{25,25},onen = 16'b1111_0000_0001_0110,//{F0,16},twon = 16'b1111_0000_0001_1110,//{F0,1E},threen = 16'b1111_0000_0010_0110,//{F0,26},fourn = 16'b1111_0000_0010_0101;//{F0,25};always@(xkey)case(xkey)one:key_val<=4'b1000;two:key_val<=4'b0100;three:key_val<=4'b0010;four:key_val<=4'b0001;onen:key_val<=4'b0000;twon:key_val<=4'b0000;threen:key_val<=4'b0000;fourn:key_val<=4'b0000;default:key_val<=4'b0000;endcaseendmodulemodule keyboard(input sys_clk,// input rst_n,input ps2_clk,input ps2_data,output reg[3:0] key_val);wire [15:0]xkey;reg ps2cf,ps2df;reg clk25=0;reg [7:0]ps2c_filter,ps2d_filter;reg [10:0]shift1,shift2;assign xkey={shift2[8:1],shift1[8:1]};assign rst_n=1;always@(posedge sys_clk)clk25=~clk25;always@(posedge clk25 or negedge rst_n)beginif(!rst_n)beginps2c_filter<=0;ps2d_filter<=0;ps2cf<=1;ps2df<=1;endelsebeginps2c_filter[7]<=ps2_clk;ps2c_filter[6:0]<=ps2c_filter[7:1];ps2d_filter[7]<=ps2_data;ps2d_filter[6:0]<=ps2c_filter[7:1];if(ps2c_filter==8'b1111_1111)ps2cf<=1;elseif(ps2c_filter==8'b0000_0000)ps2cf<=0;if(ps2d_filter==8'b1111_1111)ps2df<=1;elseif(ps2d_filter==8'b0000_0000)ps2df<=0;endendalways@(negedge ps2cf or negedge rst_n)beginif(!rst_n)beginshift1<=0;shift2<=1;endelsebeginshift1<={ps2df,shift1[10:1]};shift2<={shift1[0],shift2[10:1]};endendparameterone = 16'b0001_0110_0001_0110,//{16,16},two = 16'b0001_1110_0001_1110,//{1e,1e},three = 16'b0010_0110_0010_0110,//{26,26},four = 16'b0010_0101_0010_0101,//{25,25},onen = 16'b1111_0000_0001_0110,//{F0,16},twon = 16'b1111_0000_0001_1110,//{F0,1E},threen = 16'b1111_0000_0010_0110,//{F0,26},fourn = 16'b1111_0000_0010_0101;//{F0,25};always@(xkey)case(xkey)one:key_val<=4'b1000;two:key_val<=4'b0100;three:key_val<=4'b0010;four:key_val<=4'b0001;onen:key_val<=4'b0000;twon:key_val<=4'b0000;threen:key_val<=4'b0000;fourn:key_val<=4'b0000;default:key_val<=4'b0000;endcaseendmodule4、仿真波形图和波形解释:(1)、仿真波形图:(2)、波形解释:将系统的50Mhz的时钟频率进行分频为1hz的频率。

基于FPGA的数字钟的设计

基于FPGA的数字钟的设计

课题要求(1)技术要求:掌握多功能数字钟的工作原理;熟练掌握Quartus 2软件的使用方法;掌握用Quartus 2软件的原理图输入的设计方法;掌握不同进制计数器及时钟控制电路的设计方法;能根据设计要求对设计电路进行功能仿真和测试。

(2)功能要求:能进行正常的时,分,秒计时功能,分别由6个数码管显示24小时,60分钟,60秒钟的计时器显示;能利用实验系统上的按键实现“校时”“校风”功能;能利用扬声器做正点报时。

(3)本人的工作:硬件焊接及调试设计方案(1)显示部分:数码管显示时分秒;(2)校时部分:通过按键的通断调整时分秒;(3)报时部分:正点时蜂鸣器鸣响报时。

硬件电路设计及安装图数字钟的基本结构由两个60进制计数器和一个24进制计数器构成,分别对秒,分,时进行计时,当计时达到23时59分59秒是,再来一个技术脉冲,则计数器清零,重新开始计时。

秒计数器的技术始终CLK为1Hz的标准信号。

当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟的计数器的进位输出信号又作为时钟计数器的计数信号。

时分秒的计时结果由6个数码管来动态显示。

数字钟除了能够正常计时外,还能够对时间进行调整。

因此,通过模式选择信号mod1,mod2控制数字钟的工作状态,即控制数字钟,使其正常工作于正常计时,调分时。

当数字钟处于时状态时,3个计数器允许计数,切时分秒计数器的时钟信号分别为CLK,秒的进位,分的进位;当数字钟处于调试状态时,被调的部分会一秒一秒的增加;当计时到正点时,speak 将被赋予1KHz的脉冲信号用于驱动扬声器。

硬件电路安装及调试(1)按照电路图焊接所有元器件。

在负责这一部分的工作时,由于元器件交多并且焊接板比较小,给自己的焊接排版带来了很大问题。

由于排版的不利,导致最后焊接好后电路板的走线重叠交错,很容易导致短路和断路,在以后的焊接工作中,要重视排版和走线安排的重要性,尽量做到整个电路板的有效焊接很布局走线美观。

基于FPGA的数字钟设计

基于FPGA的数字钟设计

江苏科技大学实验报告实验名称:基于FPGA的数字钟设计学院:电子信息工程学院专业:电子与通信工程学号:149******姓名:***指导老师:**日期:2014.11.18一. 数字钟总体设计方案:1.1设计目的①正确显示时、分、秒;②可手动校时,能分别进行时、分的校正;③清零功能;1.2设计思路数字钟的设计模块包括:分频器模块、“时、分、秒”计数器模块、和译码显示模块。

每一个功能模块作为一个实体单独进行设计,最后再用VHDL的例化语句将各个模块进行整合,生成顶层实体top。

该数字钟可以实现3个功能:计时功能、设置时间功能和清零功能。

二.数字钟各具体模块2.1 分频器(fengp)模块本系统共需3种频率时钟信号(10MHz、1Hz、1KHz)。

为减少输入引脚,本系统采用分频模块,只需由外部提供10MHz基准时钟信号,其余两种频率时钟信号由分频模块得到。

分频器管脚分频器代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fengp isport(clk0:in std_logic;clk_1Hz,clk_1kHz:out std_logic);end entity;architecture one of fengp issignal q1Hz:integer range 0 to 9999999 ;signal q1kHz:integer range 0 to 9999 ;beginprocess(clk0)beginif clk0'event and clk0='1'thenif q1Hz<5000000-1 then clk_1Hz<='0';q1Hz<=q1Hz+1;elsif q1Hz=10000000-1 then q1Hz<=0;else clk_1Hz<='1';q1Hz<=q1Hz+1;end if;if q1kHz<5000-1 then clk_1kHz<='0';q1kHz<=q1kHz+1;elsif q1kHz=10000-1 then q1kHz<=0;else clk_1kHz<='1';q1kHz<=q1kHz+1;end if;end if;end process;end;2.2 60(count60)进制计数校时模块本模块要实现的功能是:正常计时、校时、校分在每个状态下都会产生不同控制信号实现相应的功能。

基于FPGA的数字钟设计

基于FPGA的数字钟设计

基于FPGA的数字钟设计(VHDL语言实现)摘要本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在MaxplusII工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。

芯片采用EP1K100QC208-3,由时钟模块、控制模块、计时模块、数据译码模块、显示以及报时模块组成。

经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成年、月、日和时、分、秒的分别显示,由按键输入进行数字钟的校时、清零、启停功能。

关键词数字钟;硬件描述语言;VHDL;FPGA;键盘接口AbstractThe design for a multi-functional digital clock, with a year, month, day, hours, minutes and seconds count display to a 24-hour cycle count; have proof functions and the whole point timekeeping function.The use of EDA design technology, hardware-description language VHDL description logic means for the system design documents, in MaxplusII tools environment, a top-down design, by the various modules together build a FPGA-based digital clock.The main system chips used EP1K100QC208-3, make up of the clock module, control module, time module, data decoding module, display and broadcast module. After compiling the design and simulation procedures, the programmable logic device to download verification, the system can complete the year, month, day and the hours, minutes and seconds respectively, using keys to modify, cleared , start and stop the digital clock.Keywords digital clock; hardware description language; VHDL; FPGA;keyboard interface目录1 绪论 (1)1.1 选题背景 (1)1.1.1 课题相关技术的发展 (2)1.1.2 课题研究的必要性 (2)1.2 课题研究的内容 (3)2 FPGA简介 (4)2.1 FPGA概述 (4)2.2 FPGA基本结构 (4)2.3 FPGA系统设计流程 (7)2.4 FPGA开发编程原理 (8)3 数字钟总体设计方案 (10)3.1 数字钟的构成 (10)3.2 数字钟的工作原理 (11)4 单元电路设计 (13)4.1 分频模块电路设计与实现 (13)4.2 校时控制模块电路设计与实现 (14)4.2.1 键盘接口电路原理 (14)4.2.2 键盘接口的VHDL描述 (15)4.3 计数模块设计与实现 (23)4.3.1 秒计数模块 (23)4.3.2 日计数模块 (25)4.3.3 月计数和年计数模块 (28)4.4 动态扫描及显示电路设计与实现 (30)4.4.1 动态扫描模块 (30)4.4.2 显示模块 (31)5 实验结论与研究展望 (32)5.1 实验结论 (32)5.2 研究展望 (33)致谢 (34)附录 (35)参考文献 .................................................................... 错误!未定义书签。

基于FPGA的数字钟设计

基于FPGA的数字钟设计

基于FPGA的数字钟系统姓名:蒋佳霖学号:1023000657学院:物理与电子学院摘要:本文利用FPGA的Verilog语言设计数字钟系统。

并采用Quartuse 进行综合,仿真,实验。

经过测试,本文所设计的系统基本可以实现数字的计时和显示,调整时间的功能。

关键字:FPGA,Verilog语言,数字钟系统1、设计所实现的功能本文所设计的数字钟系统能进行时,分,秒的显示,和对时间的校正。

能够利用按键进行“调时”,“调分”,“清秒”的功能,随时对数码管进行调整和校正。

数字钟系统是由系统时钟,数码管,FPGA,三个功能键组成。

2、设计所采用的思想本文所设计的数字钟系统采用Veriloig自顶而下的设计方法。

在编程中,通过键位的数值的判断来调用例化语句实现控制模块对计时模块和分频模块的控制。

3、各模块的代码及测试情况分频模块的代码:module szz_fenpin(clk,clk_1HZ);input clk;outpit clk_1HZ;reg[31:0] count;always @(posedge clk)beginif ( count < M/2-1)begincount <= count + 1;endelsebegincount <= 0;clk_1HZ <= ~clk_1HZ;endendendmodule注:本文所使用的分频模块只能进行偶数分频。

M为分频的倍数。

计时模块:module szz_js(clk_1HZ,num1,num2,num3,num4,num5,num6);input clk_1HZ;output reg[3:0] num1,num2,num3,num4,num5,num6;always@(posedge clk_1HZ)beginif((num6==4'b10)&&(num5==4'b100)) beginnum5=4'b0;num6=4'b0;endelse if(num5==4'b1001)beginnum6=num6+4'b1;num5=4'b0;endelse if(num4==4'b0110)beginnum5=num5+4'b1;num4=4'b0;endelse if(num3==4'b1001)beginnum3=4'b0;num4=num4+4'b1;endelse if(num2==4'b0110)beginnum2=4'b0;num3=num3+4'b1;endelse if(num1==4'b1001)beginnum1=4'b0;num2=num2+4'b1;endelsebeginnum1=num1+4'b1;endendendmodule注:本文所使用的计时模块的代码采用状态机,非阻塞语句赋值,所以在判以后不会立即清零,所以判断采用是当其为5的时候才进行下一次状态,并在下一次状态进行清零。

数电课程设计-基于FPGA的数字时钟的设计-图文

数电课程设计-基于FPGA的数字时钟的设计-图文

数电课程设计-基于FPGA的数字时钟的设计-图文基于FPGA的数字时钟的设计课题:基于FPGA的数字时钟的设计学院:电气信息工程学院专业:测量控制与仪器班级:08测控(2)班姓名:潘志东学号:083142392022年12月12日数字电路课程设计综述近年来随着数字技术的迅速发展,各种中、大规模集成电路在数字系统、控制系统、信号处理等方面都得到了广泛的应用。

这就迫切要求理工科大学生熟悉和掌握常用中、大规模集成电路功能及其在实际中的应用方法,除通过实验教学培养数字电路的基本实验方法、分析问题和故障检查方法以及双踪示波器等常用仪器使用方法等基本电路的基本实验技能外,还必须培养大学生工程设计和组织实验能力。

本次课程设计的目的在于培养学生对基本电路的应用和掌握,使学生在实验原理的指导下,初步具备基本电路的分析和设计能力,并掌握其应用方法;自行拟定实验步骤,检查和排除故障、分析和处理实验结果及撰写实验报告的能力。

综合实验的设计目的是培养学生初步掌握小型数字系统的设计能力,包括选择设计方案,进行电路设计、安装、调试等环节,运用所学知识进行工程设计、提高实验技能的实践。

数字电子钟是一种计时装置,它具有时、分、秒计时功能和显示时间功能;具有整点报时功能。

-2-数字电路课程设计1、课题要求1.1课程设计的性质与任务1)根据课题要求,复习巩固数字电路有关专业基础知识;2)掌握数字电路的设计方法,特别是熟悉模块化的设计思想;3)掌握QUARTUS-2软件的使用方法;4)熟练掌握EDA工具的使用,特别是原理图输入,波形仿真,能对仿真波形进行分析;5)具备EDA技术基础,能够熟练使用VHDL语言进行编程,掌握层次化设计方法;6)掌握多功能数字钟的工作原理,学会不同进制计数器及时钟控制电路的设计方法;7)能根据设计要求对设计电路进行仿真和测试;基本功能:能进行正常的时、分、秒计时功能,分别由6个数码管显示24小时,60分钟,60秒钟的计数器显示。

基于FPGA的数字时钟设计

基于FPGA的数字时钟设计

基于FPGA的数字时钟设计数字时钟是现代生活中必不可少的时间展示设备,广泛应用于各种场所,如家庭、办公室、学校等。

随着科技的不断发展,数字时钟的功能也得到不断升级,为人们日常生活提供了更多的便利和体验。

本文将介绍基于FPGA的数字时钟设计方案。

FPGA(Field Programmable Gate Array)是可编程门阵列的缩写,是一种现场可编程逻辑器件。

FPGA具有可编程性强、功能强大、极低的延迟等特点,被广泛应用于数字系统设计中。

本文中使用FPGA来实现数字时钟设计方案。

数字时钟的核心是计时电路,计时电路可以通过FPGA实现,使用FPGA来实现数字时钟的主要优点是可编程性强,能够满足不同需求的设计。

一、数字时钟的设计思路1、时钟信号的产生数字时钟的起点是时钟信号的产生,时钟信号的产生一般需要使用晶振。

晶振可以在一定频率范围内提供稳定的时钟信号。

FPGA可以通过将晶振与逻辑电路相连接,从而得到稳定的时钟信号。

2、计时电路的设计在数字时钟中,需要实现时、分、秒的计时功能。

这可以采用三个计时器来实现。

计时器可以使用FPGA内置的计数器实现,也可以通过逻辑电路实现。

计时器根据时钟信号的变化而变化,通过累计时钟信号的脉冲数计算出时、分、秒。

3、数码管的控制数字时钟的时间要通过数码管进行显示,数码管需要接受来自FPGA的控制信号才能正常显示数字。

通常采用多路复用器的方式来控制数码管的显示。

这里可以使用FPGA内置的多路复用器实现,FPGA输出控制信号,控制多路复用器选择哪个数码管进行显示。

数字时钟的硬件设计主要包括以下部分:时钟信号发生电路包含晶振以及晶振产生的时钟信号经过变压器传送到电路板上。

在电路板上,时钟信号经过电路处理,产生一定的电平和频率,供后续计时模块使用。

2、计时模块计时模块包括三个计时器,分别用于计算时、分、秒。

计时器通过累加时钟信号的脉冲数计算时间。

计时模块的输出需要送到数码管的控制模块进行显示。

基于FPGA的数字钟设计

基于FPGA的数字钟设计

电子课程设计实验报告本报告共有两个项目——数字钟和音乐计算器,每个项目由三部分组成,第一部分为工程顶层图,第二部分为模块划分及功能,第三部分为实验中遇到的问题及解决方法,最后是对课程的一点建议。

项目一:数字钟一.顶层图二.模块划分及功能数字钟主要有分频,输入,计时,闹钟,数据选择,音乐,显示七大模块,其中各模块的功能介绍如下:1.分频模块(fenpin):功能是产生用于计时,扫描输入,扫描显示,以及播放音乐所需的各个频率的信号。

2.输入模块(input):功能是识别键盘的输入,具体来说,主要是判断是否有键按下,并且确定按下的是哪个键,并给出相应的操作信号。

3.计时模块(minute,hour):分为分计时(minute)和小时计时(hour)两个小模块,分别完成分位与小时为的计时与时间设置功能,正常计时是每次清零后从00:00开始计时,若预置时间,则从预置数开始计。

4.闹钟模块(alart):功能是设置闹钟和整点报时,当切换至闹钟设置时,可以输入时间,并将其记录下来,当时钟时间与闹钟预设时间相同时,给出一个脉冲信号,另一功能是当时钟为整点时给出一个脉冲信号。

5.数据选择(sel):功能是设置时间时将键盘输入的数据传给计时和显示模块,当设置闹钟时将键盘输入的数据传给闹钟和显示模块。

6.音乐(music):功能是当闹钟部分给出给出响铃信号(闹钟和整点)时响起两端不同的音乐。

7.扫描显示(display):功能是在数码管上分别显示时间的四位数值,并且当时间设置至某一位时点亮相应的小数点。

三.问题及解决方法1.语法错误因为第一个项目是数字钟,刚接触时对VHDL语言还不是非常熟悉,因此常常会犯忘掉分号或是END IF 之类的错误,这类问题根据编译时的提示都能解决。

2.键盘的稳定性问题最初设计的键盘扫描方式是一直扫描,当有按键按下时也不断给出该键的位置并执行相应的操作,但是在上板后发现键盘不稳定,具体表现是当按下某个键时两次扫描给出的位置可能有偏差,例如按着2键,可能在中间某一次会显示成3,最后解决的方法是当检测到如果有按键按下时边将扫描列的高电平锁定在该列,例如检测到有按键1时,便将列输出锁定为“1000”,直到按键松开时再从下一列重新开始扫描,这样键盘就稳定了很多。

基于FPGA的数字电子时钟设计

基于FPGA的数字电子时钟设计

名目第一章绪论现代社会的标志之一确实是根基信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。

支撑信息电子产品高速开展的根底确实是根基微电子制造工艺水平的提高和电子产品设计开发技术的开展。

前者以微细加工技术为代表,而后者的代表确实是根基电子设计自动化〔electronicdesignautomatic,EDA〕技术。

本设计采纳的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、存放器传输级和逻辑门级这三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。

ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器;而FPGA是特不的ASIC芯片,与其它的ASIC芯片相比,它具有设计开发周期短、设计制造本钞票低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。

在操纵系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所对应的功能。

因此,按键信息输进是与软件结构紧密相关的过程。

依据键盘结构的不同,采纳不同的编码方法,但不管有无编码以及采纳什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。

[1]钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些根基上以钟表数字化为根底的。

因此研究数字钟以及扩大其应用有着特不现实的意义。

1.1选题背景本节将从FPGA嵌进式应用开发技术与数字钟技术开展的客瞧实际动身,通过对该技术开展状况的了解及课题本身的需要,指出研究基于FPGA的芯片系统与设计——数字钟的设计与实现的必要性。

课题相关技术的开展当今电子产品正向功能多元化,体积最小化,功耗最低化的方向开展。

它与传统的电子产品在设计上的显着区不是大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗落低,同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。

基于FPGA的数字钟设计

基于FPGA的数字钟设计

基于FPGA的多功能数字钟一、设计题目基于Xilinx FPGA的多功能数字钟设计二、设计目的1.掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;2.熟悉一种EDA软件使用;3.掌握Verilog设计方法;4.掌握分模块分层次的设计方法;5.用Verilog完成一个多功能数字钟设计;6.学会FPGA的仿真。

三、设计内容设计实验项目九多功能电子钟✧功能要求:利用实验板设计实现一个能显示时分秒的多功能电子钟,具体要求为:基本功能:1)准确计时,以数字形式显示时、分、秒,可通过按键选择指示当前显示时间范围模式;2)计时时间范围 00:00:00-23:59:593)可实现校正时间功能;4)可通过实现时钟复位功能:00:00:00扩展功能:1)定时报:时间自定(不要求改变),闹1分钟(1kHz)---利用实验板LED或外接电路实现。

2)仿广播电台正点报时:XX:59:[51,53,55,57(500Hz);59(1kHz)] ---利用实验板LED或外接电路实现。

3)报整点时数:XX:00:[00.5-XX.5](1kHz),自动、手动---利用实验板LED或外接电路实现。

4)手动输入校时;5)手动输入定时闹钟;6)万年历;7)其他扩展功能;✧设计步骤与要求:1)计算并说明采用Basys2实验板时钟50MHz实现系统功能的基本原理。

2)在Xilinx ISE13.1 软件中,利用层次化方法,设计实现模一百计数及显示的电路系统,设计模块间的连接调用关系,编写并输入所设计的源程序文件。

3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快得出仿真结果)。

4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit类型文件。

5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。

四、总体设计思路主体分为分频模块,正常时间模块(包含两个模60计数器和一个模24计数器子模块),闹钟模块(分为一个模60计数器模块,一个模24计数器模块,四个比较器模块),电台报时模块,数码管显示模块(分为模式选择模块,片选信号及扫描程序模块,和译码模块)。

基于FPGA的数字时钟设计

基于FPGA的数字时钟设计

基于FPGA的数字时钟设计一、数字时钟的设计方案及框图1.1 设计方案(1)数字时钟按24 h 制设计,由6 只数码管显示小时、分钟、秒;(2)小时单元和分钟单元具有复位功能,当按下对应按键时,小时单元和分钟单元复位为00;(3)动态扫描功能,扫描输出轮流点亮各个数码管,可用来检测数码管的好坏;由功能要求可将系统分模块实现。

将系统分为7 个模块来实现。

这7 个模块分别为:①24 进制计数器;②60 进制计数器;③分频器;④选择显示数据模块:其功能为将输入的六路信号(时十位﹑时个位﹑分十位﹑分个位﹑秒十位﹑秒个位)轮流选中送给七段显示译码器,即在一个时间单元内只显示一路信号的值;⑤动态扫描控制模块:其功能为控制数码管电路的亮灭,即完成对6 个数码管的扫描控制功能;⑥七段显示译码器:完成BCD 码向7 段显示码的转换;⑦模六计数器:用来控制数码管的片选信号,同时作为选择显示数据模块的地址产生器。

1.2 系统的模块框图如图1 所示,采用自顶向下的设计方法,通过对功能框图的分析,将系统分模块来进行设计,然后再通过例化语句完成各模块间的衔接,最终实现了顶层描述,完成系统预定功能。

1.3 系统的工作流程描述如图1,时钟系统具有一个使能端en、一个异步清零端clr 以及时钟脉冲输入端clk。

由6 个计数器分别完成小时、分钟、秒的计时,并分别通过数据选择器的6 个输入端送入选择器,数据选择器的使能端由一个模为六的计数器控制,轮流选中数据选择器的6 个输入端,这样,6 个输入端口的数据在数据选择器的输出端口就得到了串行轮流的输出。

此输出作为七段显示译码器的字符输入端,经译码后在数码管显示电路上显示出对应字形。

数码管显示电路上的6 个数码管同样采用轮流点亮的方式。

由于循环的速度非常快,所以肉眼看起来仍然是同时显示的感觉。

二、各模块的设计实现2.1 24 进制计数器和60 进制计数器的实现24 进制计数器的功能为完成计时电路中小时单元的计时功能,并且具有异步清零端clr(低电平有效)﹑使能端en(高电平有效);当数字钟处于正常计时状态时,完成小时计时,并且受分计时模块(60 进制)进位输出信号的控制。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字钟的设计学生姓名:XXX学生学号:20XX院(系):电气信息工程学院年级专业:20XX级电子信息工程班小组:XXXX指导教师:XXXX二零XX年X月XX日摘要本设计为一个多功能的数字钟,具有时、分、秒计数显示功能,以24小时循环计数;具有校对功能。

本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在QUARTUSII工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。

系统由时钟模块、控制模块、计时模块、数据译码模块、显示以及组成。

经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的清零、启停功能。

关键词数字钟,硬件描述语言,VHDL,FPGAAbstractThe design for a multi-functional digital clock, with hours, minutes and seconds count display to a 24-hour cycle count; have proof functions function.The use of EDA design technology, hardware-description language VHDL description logic means for the system design documents, in QUAETUSII tools environment, a top-down design, by the various modules together build a FPGA-based digital clock.The main system make up of the clock module, control module, time module, data decoding module, display and broadcast module. After compiling the design and simulation procedures, the programmable logic device to download verification, the system can complete the hours, minutes and seconds respectively, using keys to cleared , start and stop the digital clock.Keywords digital clock,hardware description language,VHDL,FPGA目录摘要 (I)ABSTRACT (II)1 题目的意义和设计的要求 (1)1.1题目的意义 (1)1.2设计的要求 (1)2 设计的基本原理 (2)3 设计方案 (4)3.1设计思路 (4)3.2各模块的模块图和功能 (4)3.2.1 分频器模块 (4)3.2.2 六进制计数器模块 (6)3.2.3 十进制计数器模块 (7)3.2.4 二十四进制计数器模块 (8)3.2.5 译码器模块 (10)3.2.6 顶层文件模块 (11)4 各模块的仿真 (14)4.1分频器模块仿真图 (14)4.2六进制计数器模块仿真图 (14)4.3十进制计数器模块仿真图 (14)4.4二十四进制计数器模块仿真图 (14)4.5译码器模块仿真图 (15)4.6顶层文件模块仿真图 (15)5 结论 (16)参考文献 (17)1 题目的意义和设计的要求1.1 题目的意义现在是一个知识爆炸的新时代。

新产品、新技术层出不穷,电子技术的发展更是日新月异。

可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。

在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。

因此我们需要一个定时系统来提醒这些忙碌的人。

数字化的钟表给人们带来了极大的方便。

近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。

多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。

1.2 设计的要求本设计主要研究基于FPGA的数字钟,要求时间以24小时为一个周期,显示时、分、秒。

采用1HZ的基准信号产生1S的基准时间,秒的个位加到10就向秒的十位进一,秒的十位加到6就向分的个位进一,分的个位加到10就向分的十位进一,分的十位加到6就向时进一。

该时钟具有清零功能,可以对时、分及秒进行清零,为了保证计时的稳定及准确须由晶体振荡器提供时间基准信号。

该系统是基于FPGA的设计,采用VHDL进行系统功能描述,采用自顶向下的设计方法,用QUARTUSⅡ软件进行仿真测试。

2 设计的基本原理振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,然后经过分频器输出标准秒脉冲。

秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“24翻0”规律计数。

计满后各计数器清零,重新计数。

一般说来,一个比较大的完整的项目应该采用层次化的描述方法:分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是TOP DOWN(自顶向下)的设计方法。

目前这种高层次的设计方法已被广泛采用。

高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,使工艺转化变得轻而易举。

CPLD/FPGA系统设计的工作流程如图1所示。

图1CPLD/FPGA系统设计流程流程说明:1.工程按照“自顶向下”的设计方法进行系统划分。

2.输入VHDL代码,这是设计中最为普遍的输入方式。

此外,还可以采用图形输入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。

3.将以上的设计输入编译成标准的VHDL文件。

4.进行代码级的功能仿真,主要是检验系统功能设计的正确性。

这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。

一般情况下,这一仿真步骤可略去。

5.利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。

综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。

6.利用产生的网络表文件进行适配前的时序仿真,仿真过程不涉及具体器件的硬件特性,是较为粗略的。

一般的设计,也可略去这一步骤。

7.利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。

8.在适配完成后,产生多项设计结果:(a)适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;(b)适配后的仿真模型;(c)器件编程文件。

根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。

如果仿真结果达不到设计要求,就修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求。

最后将适配器产生的器件编程文件通过编程器或下载电缆载入到目标芯片CPLD/FPGA中。

3 设计方案3.1 设计思路采用分模块设计的方法,再用一个顶层文件将各模块联系起来如图2所示。

图2 时钟模块图将晶振通过分频器分频后产生1HZ(1S)的基本频率,然后通过十进制计数器计数,此时计秒的个位,满十后向秒的十位进一,秒十位采用六进制计数器,计满后向分的个位进一,分个位采用十进制计数器,计满后向分十位进一,分十位采用六进制计数器,计满后向时进一,时采用二十四进制计数器,计满后清零,最后将秒的个、十位,分的个、十位,时的个、十位,用译码器译为数码管显示的七段译码数。

3.2 各模块的模块图和功能3.2.1 分频器模块晶体振荡器是构成数字式时钟的核心,振荡器的稳定度及频率的精度决定了数字钟计时的准确程度,它保证了时钟的走时准确及稳定。

石英晶体的选频特性非常好,只有某一频率点的信号可以通过它,其它频率段的信号均会被它所衰减,而且,振荡信号的频率与振荡电路中的R 、C 元件的数值无关。

因此,这种振荡电路输出的是准确度极高的信号。

然后再利用分频电路,将其输出信号转变为秒信号,其组成框图如图3。

本系统使用的晶体振荡器电路给数字钟提供一个频率稳定准确的12MHz 的方波信号,其输出至分频电路。

分频电路的逻辑框图如图4所示。

图4 分频电路模块分频器程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DIV ISPORT(CLK,RESET: IN STD_LOGIC;F: OUT STD_LOGIC);END DIV;ARCHITECTURE ART OF DIV ISSIGNAL Q: INTEGER RANGE 0 TO 10;BEGINPROCESS(CLK)BEGINIF(CLK'EVENT AND CLK='1') THENIF(RESET='0') THEN Q<=0;秒信号ELSIF Q<=4 THEN F<='1';Q<=Q+1;ELSIF Q=9 THEN F<='0';Q<=0;ELSE F<='0';Q<=Q+1;END IF;END IF;END PROCESS;END ART;3.2.2 六进制计数器模块对秒和分的十位进行计数,计数满六便变为0,产生进位。

六进制计数器的逻辑框图如图5所示:图5 六进制计数器模块六进制计数器程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER6 ISPORT ( CLK : IN STD_LOGIC;RESET : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(2 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);C :OUT STD_LOGIC);END COUNTER6;ARCHITECTURE BEHA VIORAL OF COUNTER6 ISSIGNAL COUNT : STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINDOUT <= COUNT;PROCESS(CLK,RESET,DIN)BEGINIF RESET= '0' THENCOUNT <= DIN;C<='0';ELSIF RISING_EDGE(CLK) THENIF COUNT="101" THENCOUNT<="000";C<='1';ELSECOUNT<=COUNT+1;C<='0';END IF;END IF;END PROCESS;END BEHA VIORAL;3.2.3 十进制计数器模块对秒和分的个位进行计数,计满10便变为0,并产生进位。

相关文档
最新文档