基于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的多功能数字时钟设计综述
流程说明:
1.工程师按照“自顶向下”的设计方法进行系统划分。
2.输入VHDL代码,这是设计中最为普遍的输入方式。此外,还可以采用图形输入方式(框图、状态图等),这种输入方式具有直观、容易理解的优点。
3.将以上的设计输入编译成标准的VHDL文件。
4.进行代码级的功能仿真,主要是检验系统功能设计的正确性。这一步骤适用于大型设计,因为对于大型设计来说,在综合前对源代码仿真,就可以大大减少设计重复的次数和时间。一般情况下,这一仿真步骤可略去。
第二章
2.1
FPGA是现场可编程门阵列(Field Programmable Gate Array)的简称,与之相应的CPLD是复杂可编程逻辑器件(Complex Programmable Logic Device)的简称,两者的功能基本相同,只是实现原理略有不同,所以有时可以忽略这两者的区别,统称为可编程逻辑器件或CPLD/FPGA。CPLD/FPGA几乎能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路。它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入或硬件描述语言自由的设计一个数字系统。通过软件仿真可以事先验证设计的正确性,在PCB完成以后,利用CPLD/FPGA的在线修改功能,随时修改设计而不必改动硬件电路。使用CPLA/FPGA开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。这些优点使得CPLA/FPGA技术在20世纪90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言HDL的进步[1]。
5.利用综合器对VHDL源代码进行综合优化处理,生成门级描述的网络表文件,这是将高层次描述转化为硬件电路的关键步骤。综合优化是针对ASIC芯片供应商的某一产品系列进行的,所以综合的过程要在相应的厂家综合库的支持下才能完成。
基于FPGA多功能数字钟设计讲解
前言现代的社会是一个信息产品广泛使用,产品的性能越来越强大,做工越来越精细,工艺越来越高,更新换代越来越迅速的社会。
而支持电子信息产品高速发展的是不断提高的微电子制造工艺水平和不断发展的电子产品的设计开发技术。
微细加工技术作为微电子的代表,而电子设计自动化则是后者的代表。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计,支持结构、数据流、行为三种描述形式的混合描述、覆盖面广、抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器。
而FPGA是特殊的ASIC芯片,与其他的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所设置的功能。
因此,键信息输入是与软件结构密切相关的过程。
根据键盘的结构不同,采用不同的编码方法。
但无论有无编码以及采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。
它与传统的电子产品在设计上的显著区别于大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低。
同时广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。
美国Altera公司的可编程逻辑器件采用全新的结构和先进的技术,加上Quartus II开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计。
基于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的数字电子钟的设计与实现
基于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多功能数字钟的设计
3、状态转换功能模块
该模块实现电路各状态之间的转换功能,若仅完成基本功能,系统 应包含4个状态,分别为正常计时、对秒位进行设置、对分位进行设置 和对小时位进行设置。若完成扩展功能,还可增加其他状态。这部分可 以用脉冲键输入进行切换,也可以用拨动开关进行切换。根据所选择的 切换方式,自行编写程序。
4、校时功能模块
此模块主要在状态切换到设置时,可以将时、分、秒位设置成需要的 数值,此功能可以由脉冲键输入完成。
5、译码功能模块
此模块功能将计数器产生的数值,通过编译,形成对应七段数码 管显示格式的编码。七段数码管的a-g对应实验箱上的主要引脚为 O50-O56。
6、LED显示模块
本模块使用实验箱上的8个数码管进行显示,为动态显示法,需采用 扫描的方式进行显示。此方法对于扫描频率有一定的要求,在设计时需 考虑采用那个频率作为扫描信号。8个数码管的扫描信号对应实验箱上的 引脚为SO58-SO65。
四、系统仿真
将每个模块编译成功后,进行仿真测试,若仿真结果符合设计 要求,再配置输入输出引脚,若不符合,请返回修改程序,直至仿 真结果合格。将仿真结果截图,记录至设计报告中。
精品课件!
精品课件!
五、硬件验证
将编译通过、仿真结果正确且引脚信息配置正确的程序下载至 实验箱的FPGA中,硬件验证设计是否符合要求。
2、计时功能模块
计时模块需对时、分、秒进行计数,其中小时位为24进制,分 钟和秒钟位为60进制。可以用一段程序对时、分、秒进行连续计数, 也可以对时、分、秒的高位和低位分别计数。注意,如果采用连续 计数方式,因为每位显示时有高位和低位之分,所以需将十进制数 据用BCD码进行转换后,才能输出到七段数码管上显示。
此电子钟分两种工作状态: 1、正常计时的状态; 2、设置时间的状态。
基于FPGA的多功能数字钟设计实现
其中我负责计时、报时、秒表、日期、电子琴等功能的设计和实现:
1.计时、校时与校分(自动校时、手动校时、指定时间(时、分、秒)校时);
2.日期:具备显示日期、设定日期、自动调整日期功能;
3.秒表:具备显示功能、开始与暂停功能、清零功能;
4.电子琴:具备21个声调的发音以及显示功能。
3
3.1
现场可编程门阵列(Field Programmable Gate Arrays,FPGA)是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。它是一种可编程使用的信号处理器件。通过改变配置信息,用户可对其功能进行定义,以满足设计需求。通过开发,FPGA能够实现任何数字器件的功能。与传统数字电路相比,FPGA具有可编程、高集成度、高可靠度和高速等优点。
系统采用AleraDE0开发板,并外接了蜂鸣器电路。系统由分频模块、计时模块、闹钟模块、控制模块、显示模块、秒表模块、音乐模块、日期模块、电子琴模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成需求功能。
关键词:数字时钟,时钟输入
50-MHz振荡器
VGA输出
4-bit电阻式DAC(数位类比转换)
15-pin高密度D型接头
最高支持1280x1024每秒60幅
序列ports
一组RS-232 port (不含DB-9连接器)
一组PS/2 port (若要同时接滑鼠与键盘可使用PS/2 Y Cable来扩充)
两个40-pin扩充槽
4.延时闹钟:具备使闹钟时间延迟的功能;
5.音乐闹钟:具备多种音乐供使用者选择为闹钟。
基于FPGA的多功能数字时钟设计
7.利用适配器将综合后的网络表文件针对某一具体的目标器件进行逻辑映射操作,包括底层器件配置、逻辑分割、逻辑优化和布局布线。
8.在适配完成后,产生多项设计结果:(a)适配报告,包括芯片内部资源利用情况,设计的布尔方程描述情况等;(b)适配后的仿真模型;(c)器件编程文件。根据适配后的仿真模型,可以进行适配后时序仿真,因为已经得到器件的实际硬件特性(如时延特性),所以仿真结果能比较精确的预期未来芯片的实际性能。如果仿真结果达不到设计要求,就修改VHDL源代码或选择不同速度和品质的器件,直至满足设计要求。
1.CLB是FPGA的主要组成部分。图2-1是CLB基本结构框图,它主要由逻辑函数发生器、触发器、数据选择器等电路组成。CLB中3个逻辑函数发生器分别是G、F和H,相应的输出是G’、F’和H’。G有4个输入变量G1、G2、G3和G4;F也有4个输入变量F1、F2、F3和F4。这两个函数发生器是完全独立的,均可以实现4输入变量的任意组合逻辑函数。逻辑函数发生器H有3个输入信号;前两个是函数发生器的输出G’和F’,而另一个输入信号是来自信号变换电路的输出H1。这个函数发生器能实现3输入变量的各种组合函数。这3个函数发生器结合起来,可实现多达9变量的逻辑函数。
基于FPGA的多功能数字钟设计实现
电子技术课程设计设计报告题目:基于FPGA的多功能数字钟设计实现班级:姓名:学号:指导教师:上交日期:2017.5.21摘要本设计为基于FPGA的多功能数字钟设计实现,具有计时、校对、闹钟、报整点等基础功能,以及日期、秒表、电子琴、延时闹钟、音乐闹钟等拓展功能。
本设计采用EDA技术,以硬件描述语言Verilog HDL为系统逻辑描述语言设计文件,在QUARTUSII工具软件环境下,采用自顶向下的设计方法,由各个基本模块共同构建了一个基于FPGA的数字钟。
系统采用Alera DE0开发板,并外接了蜂鸣器电路。
系统由分频模块、计时模块、闹钟模块、控制模块、显示模块、秒表模块、音乐模块、日期模块、电子琴模块组成。
经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成需求功能。
关键词:数字时钟,硬件描述语言,Verilog HDL,FPGA目录摘要 (2)目录 (3)1 绪论 (5)1.1背景 (5)1.2项目创意 (7)2需求分析 (8)2.1任务目标 (8)2.2元件清单 (8)2.3小组分工 (9)3系统设计 (9)3.1 系统主板电路分析 (9)3.2模块化设计方案 (16)4 模块电路设计 (17)4.1顶层模块 (17)4.2分频模块 (19)4.2.1 分频模块设计 (19)4.2.2 分频模块仿真 (21)4.3 计时模块 (21)4.3.1 计时模块设计 (21)4.3.2 计时模块仿真 (23)4.4 控制模块 (24)4.4.1 控制模块设计 (24)4.4.2 控制模块仿真 (24)4.5 秒表模块 (24)4.5.1 秒表模块设计 (24)4.6 日期模块 (26)4.6.1 日期模块设计 (26)4.7 电子琴模块 (28)4.7.1 电子琴模块设计 (28)5 系统调试及结果分析 (30)5.1 硬件检查 (30)5.2 软件编译 (30)5.3 调试过程及结果 (31)5.4 调试注意事项 (32)6 总结 (33)6.1课设中出现的问题与解决方案 (33)6.2心得体会 (33)1 绪论1.1 背景现代的社会是一个信息产品广泛使用,产品的性能越来越强大,做工越来越精细,工艺越来越高,更新换代越来越迅速的社会。
基于FPGA的数字时钟设计毕业设计论文1 精品
设计(论文)题目:基于FPGA的数字时钟设计毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日摘要随着科学技术的飞速发展,系统向着高速度、低功耗、低电压和网络化、移动化方向发展,各个领域对电路的要求越来越高,传统单一功能的电路很难满足发展的要求,而可编程逻辑器件(CPLD/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的多功能数字时钟学生姓名学号系部自动化系专业电气工程与自动化班级指导教师二〇一三年六月南京航空航天大学金城学院本科毕业设计(论文)诚信承诺书本人郑重声明:所呈交的毕业设计(论文)(题目:基于FPGA的多功能数字时钟)是本人在导师的指导下独立进行研究所取得的成果。
尽本人所知,除了毕业设计(论文)中特别加以标注引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写的成果作品。
作者签名:郭建超2013年5 月31 日(学号):2009031236毕业设计(论文)报告纸基于FPGA的多功能数字时钟摘要数字钟由于其具有走时准,显示直观,款式新颖,附加功能多等特点而受到人们的广泛使用。
采用FPGA设计一个具有整点报时,可校时,可显示万年历的数字时钟是本课题的主要任务。
由于数字集成电路的发展和石英晶体震荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产、生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些都是以钟表数字化为基础的。
近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求,因此研究数字钟以及扩大其应用有着非常现实的意义。
本文介绍的基于现场可编程门阵列FPGA实现数字多功能数字时钟,采用自上而下的方法对系统进行设计,以硬件描述语言VHDL为描述语言,利用QuartusII软件进行设计,并在智能可编程器件开发实验系统KH-310上实现数码管显示的时钟,及其计时、校时、整点提示和万年历功能。
其中时钟的秒钟、分钟为60进制计时方式,小时可通过24进制的计时方式,天可通过与月传过来的判断信号来判断大、小平、闰月,可分别用28、29、30、31进制计数实现,月通过12进制计数实现,年通过100进制计数实现。
基于FPGA的多功能数字钟设计
本科生毕业论文(设计)题目: 基于FPGA 的多功能数字钟设计学 院 电子信息工程学院 学科门类 工学装 订 线基于FPGA的多功能数字钟设计摘要当前基于各种数字器件的数字钟种类繁多,对于不同的数字器件的设计方式有所不同,例如基于单片机的数字钟设计和基于CPLD的数字钟设计以及基于FPGA的数字钟设计等等。
可以根据不同的设计要求如响应灵敏度等选择不同的数字器件进行合理设计。
本文介绍基于FPGA的多功能数字钟设计,FPGA具有硬件实现数据处理具有实时性高,可靠稳定的优点。
在硬件方面主要由控制开关、消抖电路、APEX 20KE FPGA 和LED显示等几部分组成。
在编程方面采用VerilogHDL语言实现编程,仿真环境采用MAX+PLUSⅡ软件,以实现数字计时,闹铃和定点报时等功能设计。
该系统具有体积小、功耗低、价格便宜、安全可靠,维护和升级方便的优点,具有较好的应用前景。
关键词:数字钟 FPGA VerilogHDL MAX+PLUSⅡThe Digital(多功能)Clock Based on FPGAABSTRACTThere are many of logic devices which are based on the digital clock at present.The methods are different For a different logic device design. For example, The digital clock based on SCN(Switched Circuit Network), The digital clock based on CPLD(Complex Programable Logic Device)and The digital clock based onFPGA (Field Programmable Gate Array),and so on.We can choosing a different logic devices reasonable to design based on different design requirements such as sensitivity. This article introduces the digital clock based on FPGA. FPGA with data-processing hardwareWith real-time high, the advantages of reliable stability. In terms of hardware from the main control switches, circuit Consumers buffeting, APEX 20KE FPGA and the LED display,We using Programming VerilogHDL hardware On the hardware side programming,and they can digital hardware logic on time, alarm and fixed-point design features such as timekeepingKey words:The Digital Clock Field Programmable Gate Array VerilogHDL MAX+PLUSⅡ目录一概述 (1)1.1 课题的来源、意义 (1)1.2 课题的研究目标、内容及方法手段 (1)1.2.1 课题的研究目标、内容 (1)1.2.2课题的研究方法及手段 (1)二数字钟的原理及软硬件的选择 (3)2.1系统原理 (3)2.2数字钟硬件的选择和设计 (4)2.2.1消抖电路的设计 (5)2.2.2 FPGA的选择 (5)2.2.3 LED显示模块的设计 (6)2.2.4数字钟编译仿真软件的选择 (6)2.2.5数字钟编程语言的选择 (7)三程序设计部分 (8)3.1编译仿真波形及分析 (8)3.1.1主控模块 (8)3.1.2时间模块 (8)3.1.3时间数据与时间设置 (10)3.1.4时间及其设置模块 (11)3.1.5显示模块 (12)3.1.6秒表模块 (13)3.1.7日期自动工作模块 (14)3.1.8日期设置模块 (15)3.1.9日期设置与自动工作模块 (16)3.1.10闹钟模块 (17)3.1.11分频模块 (18)3.1.12多功能数字钟电路图 (19)四验证 (21)五结论 (22)谢辞 (23)参考文献 (24)附录 (25)一概述1.1课题的来源、意义20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
基于FPGA的多功能数字钟设计
目录第一章绪论 (1)1.1选题背景 (2)1.1.1 课题相关技术的发展 (2)1.1.2 课题研究的必要性 (2)1.2课题研究的内容 (3)第二章 FPGA简介 (4)2.1FPGA概述 (4)2.2FPGA基本结构 (4)2.3FPGA系统设计流程 (6)2.4FPGA开发编程原理 (8)2.5Q UARTUS II设计平台 (8)2.5.1 软件开发环境及基本流程 (8)2.5.2 具体设计流程 (10)第三章数字钟总体设计方案 (13)3.1数字钟的构成 (13)3.2数字钟的工作原理 (13)3.3数字钟硬件电路设计 (13)第四章单元电路设计 (16)4.1分频模块电路设计 (16)4.2校时控制模块电路设计 (17)4.2.1 按键消抖 (17)4.2.2 按键控制模块 (18)4.3计数模块 (21)4.4译码显示模块 (27)4.5译码显示强制转换模块 (29)4.6整点报时模块 (29)结果与展望 (31)结果 (31)展望 (31)致谢 (32)主要参考文献 (33)第一章绪论现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。
前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronic design automatic, EDA)技术。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级这三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器;而FPGA是特殊的ASIC芯片,与其它的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
基于FPGA的多功能数字钟的设计与实现
环 境 ,Ahera是 世 界 上 最 大 可 编 程 逻 辑 器 件 的 供 应 商 之 一 。 Max plus II界 面友好 ,使用便 捷 ,被 誉为 业界 最 易用 易学 的 EDA软件 。在 Ma x +plusⅡ上 可 以完成 设计 输入 、元 件适 配 、 时序仿真 和功 能仿 真、编程 下载整 个流程 ,它提 供 了一 种与结 构无关 的设计环境 ,使设计 者能方便 地进行 设计输 入 、快速处 理和器件 编程 。
码模块组成 。扫描模块 的输入端 分别是小 时 、分、秒 的个位 和 十位 ,在高频率 时钟 信号的驱动 下 ,分别送 出信号作 为显示模 块 的输 出。图中 CLK为 1Hz的时钟 信 号。CLKDSP为 200Hz 以 上 的 时 钟 信 号 。因 为 篇 幅 限 制 只 介 绍 秒 计 时 模 块 、信 号 扫 描 模 块和报时信号产生模块 的 VHDL源程 序及仿真 时序 图。
文章编号 :1671—1041(2008)06—0103—02
基 于 FPGA 的 多功 能 数 字 钟 的 设 计 与 实现
张 强 ,万 敏 ,刘可薇
(西南 石油大 学 ,成都 610500)
摘要 :简 要介绍 FPGA器件及 其相应设计软 件 MAX—PLUS lI。并 以在 北 京 理 工达 盛科 技 公 司 EDA—IV型 EDA实 验 系统 中 实 现 数 字 钟 为 例 介 绍 其 设计 过 程 及 方 法 。
参 考 文
f 2 『Yaw.Juen Wang.”An Analytical Study on Steady.state Perform— ance of an Induction Motor Connected to Unbalanced Three.phase Voltage” IEEE power Engineering society winter meeting 2000, 1,23—27 Jan .2000 Page(S):159 — 164 vo1.1
基于XilinxFPGA的数字钟设计
基于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的多功能时钟的设计学院:电控学院班级:微电子1001班姓名:xxx学号:xxxxxxxxxx日期:2014年3月21日第一章绪论现代社会的标志之一就是信息产品的广泛使用,而且是产品的性能越来越强,复杂程度越来越高,更新步伐越来越快。
支撑信息电子产品高速发展的基础就是微电子制造工艺水平的提高和电子产品设计开发技术的发展。
前者以微细加工技术为代表,而后者的代表就是电子设计自动化(electronicdesign automatic, EDA)技术。
本设计采用的VHDL是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级这三个不同层次的设计;支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。
ASIC是专用的系统集成电路,是一种带有逻辑处理的加速处理器;而FPGA是特殊的ASIC芯片,与其它的ASIC芯片相比,它具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检测等优点。
在控制系统中,键盘是常用的人机交换接口,当所设置的功能键或数字键按下的时候,系统应该完成该键所对应的功能。
因此,按键信息输入是与软件结构密切相关的过程。
根据键盘结构的不同,采用不同的编码方法,但无论有无编码以及采用什么样的编码,最后都要转换成为相应的键值,以实现按键功能程序的转移。
[1]钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些都是以钟表数字化为基础的。
因此研究数字钟以及扩大其应用有着非常现实的意义。
1.1 选题背景本节将从FPGA嵌入式应用开发技术与数字钟技术发展的客观实际出发,通过对该技术发展状况的了解及课题本身的需要,指出研究基于FPGA的芯片系统与设计——数字钟的设计与实现的必要性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于FPGA的多功能数字钟的设计摘要数字钟是采用数字电路实现对时、分、秒数字显示的计时装置,是人们日常生活中不可少的必需品。
本文介绍了应用FPGA芯片设计多功能数字钟的一种方案,并讨讨论了有关使用FPGA芯片和VHDL语言实现数字钟设计的技术问题。
关键词数字钟、分频器、译码器、计数器、校时电路、报时电路。
Design ofAbstractKeywords目录0.引言 (4)1.设计要求说明 (4)1.1设计要求 (4)1.2完成情况说明 (4)2.多功能数字钟的基本原理及其在FPGA中的设计与实现 (4)2.1计时电路 (5)2.2异步清零电路 (5)2.3校时、校分功能电路 (5)2.4报时电路 (6)2.5分频电路 (7)2.6闹钟及音乐闹铃电路 (9)2.7秒表计时电路 (15)2.8译码显示电路 (15)2.9逻辑总图 (16)3.设计感想 (17)参考文献 (17)0.引言数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。
钟表的数字化给人们生产生活带来了极大的方便而且大大地扩展了钟表原先的报时功能。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
1.设计要求说明1.1设计要求1)设计一个具有校时、校分、清零,保持和整点报时功能的数字钟。
2)多数字钟采用层次化的方法进行设计,要求设计层次清晰、合理;构成整个设计的功能模块既可采用原理图方法实现,也可采用文本输入法实现。
3)数字钟的具体设计要求具有如下功能:①数字钟的最大计时显示23小时59分59秒;②在数字钟正常工作时可以进行快速校时和校分,即拨动开关K1可对小时进行校正,拨动开关K2可对分钟进行校正;③在数字钟正常工作情况下,可以对其进行不断电复位,即拨动开关K3可以使时、分、秒回零;④整点报时是要求数字钟在每小时整点来到前进行鸣叫,鸣叫频率是在59分53秒、55秒、57秒时为500Hz,59分59秒时为1KHz;⑤哟啊去所有开关具有去抖动功能。
4)对设计电路进行功能仿真。
5)将仿真通过的逻辑电路下载到EDA实验系统,对其进行验证。
1.2完成情况说明:对于实验要求的基本功能我们设计的电路都能准确实现。
另外,我们还附加了显示星期、秒表、闹钟时间来时播放音乐等功能。
2.多功能数字钟的基本原理及其在FPGA中的设计与实现通过分析多功能数字钟的设计要求和所要实现的功能,应用层次化方法设计出数字钟应由计时模块、分频脉冲模块、译码显示模块、校时校分和清零模块、报时模块等几个模块组成,其原理框图如下图1所示:图1 数字钟的原理框图2.1计时电路通过分析数字钟的功能,知道数字钟计时周期是24小时,因此必须设置模24的小时计数器,两个模为60的计数器实现分和秒的计数,三个计数器之间构成进为关系,即秒计数器为分计数器提供计数脉冲信号,分计数器为时计数器提供计数脉冲信号。
另外,如果想要数字钟还可以显示星期的话,还应添加一个模7的星期计数器,由时计数器提供计数脉冲信号。
从全局设计考虑计时器应具有使能端和异步清零端。
为实现计时功能,我们可以选用74160通过反馈清零法来构成模7、模24和模60计数器。
分别用2片74160做成1个模7计数器、1个模24计数器和2个模60计数器。
这4个计时器使用相同的1hz脉冲,将他们的进位端都连好,分计数器的个位的ENT 接59秒,时计数器的个位的ENT接59分59秒,星期计时器的ENT接23小时59分59秒。
由于是反馈清零法,所以将秒计数器、分计数器的状态60,时计数器的状态24,星期计数器的状态7分别接给各自的清零端,这样就可以实现计数功能了。
2.2异步清零电路为实现异步清零功能,可以将异步清零开关KK3分别和各个计数器的清零信号的取反相或非后再接给清零端。
这样,当KK3关闭(低电平)时,计数器正常计数;当开关KK3开启(高电平)时,计数器全部异步清零。
2.3校时、校分功能电路数字钟的校时和校分功能原理相同,通过开关KK1、KK2控制工作状态。
当KK1打到低电平、KK2打到低电平时,各计数器的ENT端接的都是正常计数信号,ENP端都是高电平,各个计数器均正常计数;当KK1打到高电平、KK2打到低电平时,分个计数器的ENP端接的是KK2的非(高电平),进位信号正常送入分十位计数器的ENT端,分计数器快速校分,而由于秒计数器和时计数器的个位的ENP 端接的是KK1的非,所以秒计数器和时计数器被保持;当KK1打到低电平、KK2打到高电平时,正常进位信号被阻塞,分计数器可以不接受秒计数器的进位信号控制,校时信号便被送入CP 端,时计数器可以进行快速校时。
以上3部分功能可放在同一模块中实现,电路图如2所示。
图2 计时、清零、校分校时电路仿真结果如下图3所示:图3 计时、清零、校分校时电路的仿真结果2.4报时电路数字钟的报时功能由两部分组成,一部分的作用是选择报时的时间,一部分的作用是选择报时的频率。
根据设计要求,数字钟在59分53秒、55秒、57秒的报时鸣叫频率为500Hz ,59分59秒的报时鸣叫频率为1KHz 。
用与非门控制蜂鸣器信号,电路计时到59分53秒、59分55、秒59分57秒时打开与门,把500Hz 信号送入蜂鸣器,到59分59秒时打开与门,把1KHz 信号送入蜂鸣器。
经卡诺图化简后,得二与门的输出表达式为: 4330302011595f s f s f s Y •••'''=这部分电路的电路图如下图4所示:图4 报时电路这部分功能仿真结果如图5所示:图5 报时电路仿真结果2.5分频电路数字钟计时的标准信号应该是频率相当稳定的1HZ秒脉冲,所以要设置标准时间源。
由于FPGA芯片上有输出频率是48MHz的高精确度、高频稳度的晶体振荡器,所以我们只需做一些特定模的计数器进行分频就可以得到我们所需要的精确频率。
分析电路中的功能,一共需做3种计数器来分频,分别模48、模1000和模2计数器。
它们均可由74161构成,运用反馈置数法可以很容易的做成这3种计数器。
模48的计数器如下图6所示:图6 48分频器电路其仿真结果如图7所示:图7 48分频器仿真结果模1000的计数器如下图8所示:图8 1000分频器电路器仿真结果如下图9所示:图9 1000分频器仿真结果模2的计数器如下图10所示:图10 2分频电路其仿真结果如图11所示:图11 2分频仿真结果2.6闹钟及音乐闹铃电路通过分析闹钟应具有的功能,可以清楚闹钟应分成这样几个部分来做。
一是设定闹钟时间(小时、分钟)电路,可以还用类似于校时、校分的方法,用控制计数开始计数和暂停来实现设定时间;二是比较电路当正常计时的数字钟的时间和设定的闹钟时间相同时,输出一高电平,使其与发声频率相与后送给蜂鸣器来发出声响;三是显示切换电路,这个电路保证在设定闹钟时间时,虽然数码管显示的是闹钟设定的时间,但数字钟还在正常计时,只是没有显示出来。
通过以上分析发现,闹钟时间设定模块可以直接利用前面设计好的计时&校时校分模块jishi.bdf,只要在原来基础上加3个开关去控制就可以了。
其中,KK4的作用是切换显示开关,将它与1hz脉冲相与后再接给闹钟计数器的时钟,KK4打开时,设定闹钟时间的计数器才使能;KK5是设定分钟计数器的开关;KK6是设定小时计数器的开关。
比较模块则可以用4片集成的数据比较器7485(时2片、分2片)来实现比较功能,将4片7485的输出AEBO(相等时输出1)通过4与门相与后再输出,只有当4个AEBO同时出1时才代表闹钟时间和时钟时间重合。
至于显示切换电路则可以用6片2选1数据选择器74157来构成一个2路选1路的数据选择器,用切换开关KK4来判断2路选1路的数据选择器的选择输出正常计时的时间给数码管显示,还是输出闹钟设定时间给数码管显示。
这3部分的电路如下图12所示。
图12 闹钟功能电路在上面闹钟的基础上,我们还增加了播放音乐的功能,即当到达设定的闹钟时刻时,蜂鸣器会播放出优雅的《梁祝》曲子。
这部分功能需要通过VHDL硬件语言来编写程序。
要实现播放音乐功能需要包含控制、曲谱等在内5个子模块。
程序源码如下:1)模块1-- File Name: music.vhdLIBRARY ieee;USE ieee.std_logic_1164.all;LIBRARY altera_mf;USE altera_mf.altera_mf_components.all;ENTITY music ISPORT(address : IN STD_LOGIC_VECTOR (7 DOWNTO 0);clock : IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END music;ARCHITECTURE SYN OF music ISSIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0);COMPONENT altsyncramGENERIC (intended_device_family : STRING;width_a : NATURAL;widthad_a : NATURAL;numwords_a : NATURAL;operation_mode : STRING;outdata_reg_a : STRING;address_aclr_a : STRING;outdata_aclr_a : STRING;width_byteena_a : NATURAL;init_file : STRING;lpm_hint : STRING;lpm_type : STRING);PORT (clock0 : IN STD_LOGIC ;address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);q_a : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) );END COMPONENT;BEGINq <= sub_wire0(3 DOWNTO 0);altsyncram_component : altsyncramGENERIC MAP (intended_device_family => "Cyclone",width_a => 4,widthad_a => 8,numwords_a => 256,operation_mode => "ROM",outdata_reg_a => "CLOCK0",address_aclr_a => "NONE",outdata_aclr_a => "NONE",width_byteena_a => 1,init_file => "speaker.mif",lpm_hint => "ENABLE_RUNTIME_MOD=NO",lpm_type => "altsyncram")PORT MAP (clock0 => clock,address_a => address,q_a => sub_wire0);END SYN;2)模块2-- File Name: notetabs.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity notetabs isport(clk:in std_logic;toneindex:out std_logic_vector(3 downto 0));end;architecture one of notetabs iscomponent musicport(address:in std_logic_vector(7 downto 0);clock:in std_logic;q:out std_logic_vector(3 downto 0));end component;signal counter:std_logic_vector(7 downto 0);begincnt8:process(clk)beginif counter=138 then counter<="00000000";elsif (clk'event and clk='1')then counter<=counter+1;end if;end process;u1:music port map(address=>counter,q=>toneindex,clock=>clk); end;3)模块3-- File Name: tonetaba.vhdlibrary ieee;use ieee.std_logic_1164.all;entity tonetaba isport(index:in std_logic_vector(3 downto 0);tone:out std_logic_vector(10 downto 0));end;architecture one of tonetaba isbeginsearch:process(index)begincase index iswhen "0000"=>tone<="11111111111";when "0001"=>tone<="01100000101";when "0010"=>tone<="01110010000";when "0011"=>tone<="10000001100";when "0101"=>tone<="10010101101";when "0110"=>tone<="10100001010";when "0111"=>tone<="10101011100";when "1000"=>tone<="10110000010";when "1001"=>tone<="10111001000";when "1010"=>tone<="11000000110";when "1100"=>tone<="11001010110";when "1101"=>tone<="11010000100";when "1111"=>tone<="11011000000";when others=>null;end case;end process;end;4)模块4-- File Name: speaker.vhdlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speaker isport(clk:in std_logic;tone:in std_logic_vector(10 downto 0);spks:out std_logic);end entity speaker;architecture one of speaker issignal preclk,fullspks:std_logic;begindivideclk:process(clk)variable count4:std_logic_vector(3 downto 0);beginpreclk<='0';if count4>11 then preclk<='1';count4:="0000";elsif clk'event and clk='1' then count4:=count4+1;end if;end process divideclk;genspks:process(preclk,tone)variable count11:std_logic_vector(10 downto 0);beginif preclk'event and preclk='1' thenif count11=16#7ff# then count11:=tone;fullspks<='1';else count11:=count11+1;fullspks<='0';end if;end if;end process;delayspks:process(fullspks)variable count2:std_logic;beginif fullspks'event and fullspks='1' then count2:=not count2;if count2='1' then spks<='1';else spks<='0';end if;end if;end process;end;5)模块5-- File Name: songer.vhdlibrary ieee;use ieee.std_logic_1164.all;entity songer isport(clk12MHZ:in std_logic;clk8HZ:in std_logic;spkout:out std_logic);end;architecture one of songer iscomponent notetabsport(clk:in std_logic;toneindex:out std_logic_vector(3 downto 0));end component;component tonetabaport(index:in std_logic_vector(3 downto 0);tone:out std_logic_vector(10 downto 0));end component;component speakerport(clk:in std_logic;tone:in std_logic_vector(10 downto 0);spks:out std_logic);end component;signal tone:std_logic_vector(10 downto 0);signal toneindex:std_logic_vector(3 downto 0);beginu1:notetabs port map(clk=>clk8HZ,toneindex=>toneindex);u2:tonetaba port map(index=>toneindex,tone=>tone);u3:speaker port map(clk=>clk12MHZ,tone=>tone,spks=>spkout);end;将上面5个程序输入好后分别编译,然后再将模块5songer.vhd生成芯片,再将这块芯片添加到闹钟电路里,就可以播放梁祝音乐闹铃了。