小时计时器FPGA_第1页
小时计时器FPGA_第2页
小时计时器FPGA_第3页
小时计时器FPGA_第4页
小时计时器FPGA_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计任务书学生姓名: 罗序森 专业班级: 通信gj1101_ 指导教师: 胡辑伟 工作单位:_信息工程学院_题 目: 通信工程应用技术课设FPGA 一、 设计任务与要求设计一个具有系统时间设置和带闹钟功能的24小时计时器中的应用。电子钟要求如下:()计时功能:4位LED数字时钟对当前时间的小时和分钟进行显示,显示的最长时间为23小时59分。()设置并显示新的闹钟时间:用户先按“set”键,再用数字键“0”“9”输入时间,然后按“alarm”键确认。在正常计时显示状态下,用户直接按下“alarm”键,则已设置的闹钟时间显示在显示屏上。()设置新的计时器时间:用户先按“set”键,再用数字键“

2、0”“9”输入新的时间,然后按“time”键确认。在输入过程中;输入的数字在显示屏上从右到左依次显示。例如,用户要设置新的时间 12:00,则按顺序输入“l”,“2”,“0”,“0”键,与之对应,显示屏上依次显示的信息为:“1”,“12”;“120”,“1200”。如果用户在输入任意几个数字后较长时间内,例如5秒,没有按任何键,则计时器恢复到正常的计时显示状态。()闹钟功能:如果当前时间与设置的闹钟时间相同,则扬声器发出蜂鸣声;三时间安排:序号阶段内容所需时间1查阅相关资料,了解基本原理2天2编写程序,实现功能要求3天3撰写报告1天4答辩1天合计7天指导教师签名: 年 月 日系主任(或责任教师

3、)签名: 年 月 日目录摘 要IAbstractII1 绪言1 1.1 课题的研究背景及意义1 1.2 闹钟系统的12 FPGA简介22.1 FPGA简述22.2 FPGA工作原理22.3 FPGA的基本结构22.4 FPGA系统设计流程43主要模块设计53.1 分频模块53.1.1 分频模块源代码53.1.2 分频模块仿真63.2 按键模块73.2.1 按键模块源代码83.2.2 按键模块仿真103.3 时间模块103.3.1 时间模块源代码103.3.2 时间模块仿真133.4 显示模块143.4.1 显示模块源代码143.4.1 显示模块仿真173.5 闹钟模块183.5.1 闹钟模块源

4、代码183.5.2 闹钟模块仿真183.6 顶层模块193.6.1 顶层模块源代码193.6.2 顶层模块仿真214 小结与体会22参考文献23摘 要本设计在对闹钟系统的原理及其功能进行分析的基础上,采用自顶向下的设计方法,以现场可编程门阵列(FPGA)作为硬件基础,对闹钟系统进行电路设计。本文的研究目的也是利用EDA技术来实现带闹钟功能的24小时计时器。分别介绍发展历史、发展动态、设计思路、系统原理、系统功能分析、系统结构、各个模块分析与设计以及主要工作过程,并且经实际电路测试与仿真从而实现了一种基于FPGA的精确可靠的数字闹钟系统。关键字:VHDL, QuartusII, FPGA, 闹钟

5、AbstractThe design is based on the analysis of the alarm system and its functions, using top-down design approach to field programmable gate array (FPGA) as a hardware foundation, on the alarm system circuit design. Purpose of this paper makes use of EDA techniques to achieve the alarm clock functio

6、n with the 24-hour timer. The paper introduces the research background, the development history, the development tendency, the research mentality, the system principle the system function analysis, the system structure, each module analysis principle, the system function analysis, the system structu

7、re, each module analysis and the design as well as the prime task process separately. And by the actual circuit testing and simulation in order to achieve an accurate and reliable based on the number of FPGA alarm system.Key words: VHDL, QuartusII, FPGA, alarm clock1绪言1.1课题的研究背景及意义当今社会是数字化的社会,是数字集成电

8、路广泛应用的社会。数字集成电路本身在不断地进行更新换代。它由早期的电子管、晶体管、小中规模集成电路,发展到超大规模集成电路(VLSIC,几万门以上)以及许多具有特定功能的专用集成电路。但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(ASIC)芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD),其中应用最广泛的当属现场可编程门阵列(FPGA)和复杂可编程逻辑器件(CPLD)。在许多仪器仪表中都用到闹钟定时,目前通常是采

9、用专用的数字闹钟芯片,但是这种芯片功能固定,不利于嵌入式应用。而且,在仪器仪表的许多应用场合已经采用了FPGA可编程芯片。这样一来,为我们在使用硬件空间的FPGA器件中在嵌入一个计时闹钟提供了极大的方便,而且不会增加成本,并可以使系统结构更加简单,体积更小,成本更低,具有更好的嵌入式和可移植特性。1.2闹钟系统发展概述六十年代末,七十年代初带闹钟的电子钟表已悄悄在起步,因为客观存在成本低,精度高,显示直观方便(不用上发条)的优点冲击了传统机械表的统治地位。到底90年代初基本垄断了钟表市场。而随着时代的发展,在生产生活中对计时工具的要求也逐渐增高,高效节能理念的深入人心,功耗大开发周期长的传统电

10、子表已经显然不适合时代的要求。20世纪末数字电子技术得到飞速发展,数字电子技术的应用已经渗透到人类生活的各个方面。从计算机到手机,从数字电视到数字电话,从家用电器到军用设备,从自动化到航天技术都广泛的采用了数字电子技术。现代电子设计技术的核心是EDA技术。EDA技术就是领先功能强大的电子计算机,在EDA工具软件平台上,对硬件描述语言HDL(Hardware Description Language)为系统逻辑描述手段完成的设计文件,自动的逻辑编译、化简、分割、综合、优化和仿真直到下载到可编程逻辑器件CPLD/FPGA或专用集成电路ASIC芯片中,实现既定的电子电路设计功能。EDA技术使得电子闹

11、钟设计工作仅限于利用硬件描述语言和EDA软件平台完成对系统硬件功能的实现,极大地提高设计效率,缩短了设计周期,节省设计成本。本设计就是运用EDA技术,根据闹钟要实现的功能:计时功能、闹钟功能、设置新的计时器时间、设置新的闹钟时间、显示所设置的闹钟。采用高层硬件描述语言VHDL进行设计。首先程序文本输入,处理(编译、检查、逻辑优化与综合。适配、分割、布局、布线、生成编程数据文件),然后进行功能仿真和时序仿真,最后下载到FPGA器件中并进行功能测试,进行输入操作、查处输入结果验证设计电路。2 FPGA简介2.1 FPGA简述FPGA(FieldProgrammable Gate Array),即现

12、场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。2.2 FPGA工作原理FPGA采用了逻辑单元阵列LCA(Logic Cell Array)这样一个概念,内部包括可配置逻辑模块CLB(Configurable Logic Block)、输出输入模块IOB(Input Output Block)和内部连线(Interconnect)三个部分。 现场可编程门阵列(FPGA)是可编程器件,与传统逻辑电路和门阵列(如PAL,GAL及CPL

13、D器件)相比,FPGA具有不同的结构。FPGA利用小型查找表(161RAM)来实现组合逻辑,每个查找表连接到一个D触发器的输入端,触发器再来驱动其他逻辑电路或驱动I/O,由此构成了既可实现组合逻辑功能又可实现时序逻辑功能的基本逻辑单元模块,这些模块间利用金属连线互相连接或连接到I/O模块。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,FPGA允许无限次的编程。2.3 FPGA的基本结构FPGA具有掩膜可编程门阵列的通用结构,它由逻辑功能块排成阵列,并由可编程

14、的互连资源连接这些逻辑功能块来实现不同的设计。FPGA一般由3种可编程电路和一个用于存放编程数据的静态存储器SRAM组成。这3种可编程电路是:可编程逻辑模块(CLB-Configurable Logic Block)、输入/输出模块(IOB-I/O Block)和互连资源(IRInterconnect Resource)。可编程逻辑模块CLB是实现逻辑功能的基本单元,它们通常规则的排列成一个阵列,散布于整个芯片;可编程输入/输出模块(IOB)主要完成芯片上的逻辑与外部封装脚的接口,它通常排列在芯片的四周;可编程互连资源包括各种长度的连接线段和一些可编程连接开关,它们将各个CLB之间或CLB、I

15、OB之间以及IOB之间连接起来,构成特定功能的电路。1.CLB是FPGA的主要组成部分。图2是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变量的逻辑函数。

16、CLBCLBCLBCLBCLBBCLBCLBCLBCLBCLBCLBCLBCLBBCLBCLBCLB可编程开关矩输入输出模块互连资源图1 CLB基本结构CLB中有许多不同规格的数据选择器(四选一、二选一等),通过对CLB内部数据选择器的编程,逻辑函数发生器G、F和H的输出可以连接到CLB输出端X或Y,并用来选择触发器的激励输入信号、时钟有效边沿、时钟使能信号以及输出信号。这些数据选择器的地址控制信号均由编程信息提供,从而实现所需的电路结构。CLB中的逻辑函数发生器F和G均为查找表结构,其工作原理类似于ROM。F和G的输入等效于ROM的地址码,通过查找ROM中的地址表可以得到相应的组合逻辑函数输

17、出。另一方面,逻辑函数发生器F和G还可以作为器件内高速RAM或小的可读写存储器使用,它由信号变换电路控制。2.输入/输出模块IOB。IOB提供了器件引脚和内部逻辑阵列之间的连接。它主要由输入触发器、输入缓冲器和输出触发/锁存器、输出缓冲器组成。每个IOB控制一个引脚,它们可被配置为输入、输出或双向I/O功能。当IOB控制的引脚被定义为输入时,通过该引脚的输入信号先送入输入缓冲器。缓冲器的输出分成两路:一路可以直接送到MUX,另一路经延时几纳秒(或者不延时)送到输入通路D触发器,再送到数据选择器。通过编程给数据选择器不同的控制信息,确定送至CLB阵列的I1和I2是来自输入缓冲器,还是来自触发器。

18、当IOB控制的引脚被定义为输出时,CLB阵列的输出信号OUT也可以有两条传输途径:一条是直接经MUX送至输出缓冲器,另一条是先存入输出通路D触发器,再送至输出缓冲器。IOB输出端配有两只MOS管,它们的栅极均可编程,使MOS管导通或截止,分别经上拉电阻接通Vcc、地线或者不接通,用以改善输出波形和负载能力。3. 可编程互连资源IR。可编程互连资源IR可以将FPGA内部的CLB和CLB之间、CLB和IOB之间连接起来,构成各种具有复杂功能的系统。IR主要由许多金属线段构成,这些金属线段带有可编程开关,通过自动布线实现各种电路的连接。2.4 FPGA系统设计流程一般说来,一个比较大的完整的项目应该

19、采用层次化的描述方法:分为几个较大的模块,定义好各功能模块之间的接口,然后各个模块再细分去具体实现,这就是TOP DOWN(自顶向下)的设计方法。目前这种高层次的设计方法已被广泛采用。高层次设计只是定义系统的行为特征,可以不涉及实现工艺,因此还可以在厂家综合库的支持下,利用综合优化工具将高层次描述转换成针对某种工艺优化的网络表,工艺转换变得轻而易举。CPLD/FPGA系统的工作流程如图2所示。图2 FPGA设计流程3主要模块设计3.1分频模块分频的关键在于设置不同进位规则的计数器。模块开始定义了count1、count2、count3、count4位宽不同的寄存器,分别用于四种输出信号的计数。

20、以1s信号输出为例,在always引导的过程语句中设置了negedge clk条件,即当时钟下降沿到来时执行always块中的语句,即count1计数器加1,然后通过if语句判断count1是否到达24d12582912,即是否达到0.5s。若达到则清零计数器并将sec_1取反。通过上述过程便实现了将24Mz信号分频成1Hz秒信号的目的。另外三种信号的产生机制与秒信号一样,只是改变了计数器的范围。3.1.1分频模块源代码分频模块源代码如下:module fenpin (clk,rst_n,en_1s,en_1ms); /产生1s,1ms的分频input clk; /FPGA晶振50Mhzinp

21、ut rst_n;output en_1s;output en_1ms;reg31:0 jishu_1s;reg15:0 jishu_1ms;parameter cnt_1s =49999999; parameter cnt_1ms =49999; always(posedge clk or negedge rst_n) begin if(!rst_n) jishu_1s=32b0;else if(jishu_1scnt_1s) jishu_1s=jishu_1s+1b1;else jishu_1s=32b0; endalways(posedge clk or negedge rst_n) b

22、egin if(!rst_n) jishu_1ms=16b0;else if(jishu_1mscnt_1ms) jishu_1ms=jishu_1ms+1b1;else jishu_1ms=16b0; end assign en_1s=(jishu_1s=cnt_1s)? 1b1 : 1b0; /1sassign en_1ms=(jishu_1ms=cnt_1ms)? 1b1 : 1b0; /1msendmodule 3.1.2 分频模块仿真分频模块的RTL视图如图4所示,可以看出输出端en_1ms与en_1s与输入端clk和rst_n的逻辑关系。图4 分频模块的RTL视图1ms时钟信号的输

23、出,如图5所示,相邻脉冲之间相隔1ms。图5 1ms时钟信号的仿真1s时钟信号的输出,如图6所示,相邻脉冲之间相隔1s。图6 1s时钟信号的仿真3.2 按键模块本设计的按键模块主要作用是校时作用,可以调整时间与闹钟时间,同时作为时间模式与闹钟模式的切换。本模块用于当有按键按下时,采用软件消抖的办法去除按键抖动。模块的实现方法是先判断是否有按键按下,如有按键按下则延时一段时间,待抖动过去之后再读行线状态,如果仍有低电平行线,则确定有按键按下,然后产生一个有按键按下的信号。该模块有一个时钟输入端口,输入时钟信号是分频出来的50MHZ的时钟;有一个输入端口与行线相连,用于输入行线状态;一个输出端口,

24、用于输出有按键按下的信号。3.2.1 按键模块源代码按键模块的部分源代码如下(以一个按键为例):module /按键控制部分anjian(clk,rst_n,key1,key2,key1_low,key2_low,key3,key3_low);input clk;input rst_n;input key1; / 分加input key2; / 分减input key3; / 界面选择output key1_low; /按键按下消抖后的标志位output key2_low;output key3_low;reg reg0_key; /key1消抖reg reg1_key;reg reg2_ke

25、y; /key2消抖reg reg3_key;reg reg4_key; /key3消抖reg reg5_key;always (posedge clk or negedge rst_n) begin if(!rst_n) begin reg0_key = 1b1; reg1_key = 1b1; end else begin reg0_key = key1; reg1_key = reg0_key; /根据非阻塞赋值的原理,reg1_key 存储的值是reg0_key 上一个时钟的值 end end /脉冲边沿检测法,当寄存器 key1 由 1 变为 0 时,key1_an 的值变为高,维持

26、一个时钟周期 wire key1_an; assign key1_an = reg1_key & ( reg0_key); always (posedge clk or negedge rst_n) begin if(!rst_n) begin reg2_key = 1b1; reg3_key = 1b1; end else begin reg2_key = key2; reg3_key = reg2_key; end endreg19:0 cnt_key1; /计数寄存器 always (posedge clk or negedge rst_n) begin if (!rst_n) cnt_

27、key1 = 20d0; /异步复位 else if(key1_an) cnt_key1 =20d0; /led1_an=1,按键确认按下,cnt_key1从0开始计数 else cnt_key1 = cnt_key1 + 1b1; end /以下为消抖程序 reg reg_low; reg reg1_low; always (posedge clk or negedge rst_n) begin if (!rst_n) begin reg_low = 1b1; end else if(cnt_key1 = 20hfffff) /时钟50mhz的话大约计时是20ms begin reg_low

28、 = key1; /led_an=1,按键确认按下,cnt_key从0开始计数,这时候还有消抖动,计数20ms后抖动滤除了此时再锁存一下key1的值 end /这时key1的值就稳定了 end always (posedge clk or negedge rst_n) begin if (!rst_n) reg1_low = 1b1; else reg1_low = reg_low; end assign key1_low = reg1_low & ( reg_low); /当寄存器 reg_low 由 1 变为 0 时,key_low 的值变为高,维持一个时钟周期/以一个按键为例,省略其余两

29、个按键endmodule3.2.2 按键模块仿真 按键模块的RTL视图如图7所示,可以看出输出端Key1_low、Key2_low、Key3_low与输入端Key1和Key2、 Key3、clk、rst_n的逻辑关系。图7 按键模块的RTL视图3.3 时间模块时间模块的作用是:利用分频模块产生的精确的秒时钟信号,给时钟秒位计时,设置好时分秒的进位;利用按键模块的控制,给时钟校时,给闹钟设置时间。3.3.1 时间模块源代码按键模块的部分源代码如下:/时、分、秒module shijian(clk,rst_n,en_1s,key1_low,key2_low,key3_low,shi,fen,mia

30、o,nao_shi,nao_fen,nao_miao,moshi);input clk;input rst_n;input en_1s;input key1_low;input key2_low;input key3_low;output5:0 shi;output5:0 fen;output5:0 miao;output5:0 nao_shi;output5:0 nao_fen;output5:0 nao_miao;output reg1:0 moshi ;/0时显示时间 1时显示闹钟reg 5:0 shi;reg 5:0 fen;reg 5:0 miao;reg 5:0 nao_shi;r

31、eg 5:0 nao_fen;reg 5:0 nao_miao;always(posedge clk or negedge rst_n)/key3按键选择模式 begin if(!rst_n)begin moshi=1b0;endelse if(key3_low)beginmoshi=moshi+1b1;endendalways(posedge clk or negedge rst_n) begin if(!rst_n) begin shi=6b000001; /1 fen=6b011000; /24 miao=6b0; /0 nao_shi=6b000001; /1 nao_fen=6b01

32、1110; /30 nao_miao=6b010100; /20 endelse if(en_1s) begin miao=miao+1b1; if(miao=60) begin miao=0; fen=fen+1b1; if(fen=60) begin fen=0; shi=shi+1b1; if(shi=24) shi=0; end end endelse if(!moshi&key1_low)/时间模式下 按加键 begin fen=fen+1b1; if(fen=60) begin fen=0; shi=shi+1b1; if(shi=24) shi=0; end endelse if

33、(!moshi&key2_low)/时间模式下 按减键 begin fen=fen-1b1; if(fen=0) begin shi=shi-1b1; fen=59; end endelse if(moshi&key1_low)/时间模式下 按加键 begin nao_fen=nao_fen+1b1; if(nao_fen=60) begin nao_fen=0; nao_shi=nao_shi+1b1; if(shi=24) shi=0; end end else if(moshi&key2_low)/闹钟模式下 按减键 begin nao_fen=nao_fen-1b1; if(nao_f

34、en=0) begin nao_shi=nao_shi-1b1; nao_fen=59; end end else begin shi=shi; fen=fen; miao=miao; nao_shi=nao_shi; nao_fen=nao_fen; nao_miao=nao_miao; endendendmodule3.3.2 时间模块仿真时间模块的RTL视图如图8所示,可以看出输出端shi、fen、miao、nao_shi、nao_fen、mao_miao与输入端Key1_low和Key2_low、Key3_low、en_1s、rst_n的逻辑关系。图8 时间模块的RTL视图仿真了时钟,

35、仿真波形图如图9、图10所示,仿真图满足设计的要求。分计数和时计数模块的设计原理与秒模块的类似。图9 秒时钟仿真波形图10 计时模块仿真3.4 显示模块显示模块的作用是:在8位数码管上显示时间模块输出的时间和闹钟信号,通过按键可以切换显示时间和闹钟。具体原理是采用动态扫描的方法,动态扫描电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且输出数码管的片选信号和位选信号。所谓动态扫描显示方式是在显示某一位LED显示块的数据的时候,让其它位不显示,然后在显示下一位的数据,同时关闭其他显示块。这样做可以使每一个显示块显示与自己相对应的数据。只要保证每一位显示的时间间隔不要太大,利用人眼

36、的视觉暂留的现象,就可以造成各位数据同时显示的假象。一般每一位的显示时间为110ms。3.4.1 显示模块源代码显示模块的部分源代码如下:(以显示秒为例)module xianshi(clk,rst_n,en_1ms,shi,fen,miao,led_bit,dataout,moshi,nao_shi,nao_fen,nao_miao);input clk;input rst_n;input en_1ms;input5:0 shi;input5:0 fen;input5:0 miao;input5:0 nao_shi;input5:0 nao_fen;input5:0 nao_miao;inp

37、ut1:0 moshi;output2:0 led_bit; /位选output7:0 dataout; /段选/数码管显示 09 对应段选输出parameter num0 = 8b11000000, num1 = 8b11111001, num2 = 8b10100100, num3 = 8b10110000, num4 = 8b10011001, num5 = 8b10010010, num6 = 8b10000010, num7 = 8b11111000, num8 = 8b10000000, num9 = 8b10010000;reg3:0 shi1,shi2,fen1,fen2,mi

38、ao1,miao2;reg3:0 nao_shi1,nao_shi2,nao_fen1,nao_fen2,nao_miao1,nao_miao2; reg2:0 led_bit; /位选reg7:0 dataout; /段选reg2:0 state; /状态寄存器always(posedge clk or negedge rst_n) if(!rst_n) begin state=3b0; end else if(en_1ms) begin state=state+1b1; shi1=shi/10; shi2=shi%10; fen1=fen/10; fen2=fen%10; miao1=mi

39、ao/10; miao2=miao%10; nao_shi1=nao_shi/10; nao_shi2=nao_shi%10; nao_fen1=nao_fen/10; nao_fen2=nao_fen%10; nao_miao1=nao_miao/10; nao_miao2=nao_miao%10; if(state=3b000) beginled_bit=3b101;if(!moshi)begincase(miao2) 0: dataout=num0; 1: dataout=num1; 2: dataout=num2; 3: dataout=num3; 4: dataout=num4; 5

40、: dataout=num5; 6: dataout=num6; 7: dataout=num7; 8: dataout=num8; 9: dataout=num9; default :dataout=num0; endcase endelse if(moshi)begincase(nao_miao2) 0: dataout=num0; 1: dataout=num1; 2: dataout=num2; 3: dataout=num3; 4: dataout=num4; 5: dataout=num5; 6: dataout=num6; 7: dataout=num7; 8: dataout=

41、num8; 9: dataout=num9; default :dataout=num0; endcase end end else if(state=3b001) beginled_bit=3b100;if(!moshi)begincase(miao1) 0: dataout=num0; 1: dataout=num1; 2: dataout=num2; 3: dataout=num3; 4: dataout=num4; 5: dataout=num5; default :dataout=num0; endcase endif(moshi)begincase(nao_miao1) 0: da

42、taout=num0; 1: dataout=num1; 2: dataout=num2; 3: dataout=num3; 4: dataout=num4; 5: dataout=num5; default :dataout=num0; endcase end endend/以显示秒为例,时与分的省略Endmodule3.4.1 显示模块仿真显示模块的RTL视图如图11所示,可以看出输出端控制数码管的8位段选和3为位选与输入端时间信号和闹钟信号的逻辑关系。图11 显示模块的RTL视图3.5 闹钟模块闹钟模块的作用是:当时间与闹钟时间相同时,闹钟模块根据分频模块得出的en_1ms驱动蜂鸣器发出

43、声响。3.5.1 闹钟模块源代码闹钟模块的源代码如下:module naozhong(clk,en_1ms,beep,shi,fen,miao,nao_shi,nao_fen,nao_miao);input clk,en_1ms;/clk作为时钟信号,en_1ms作为发声信号input5:0 shi; input5:0 fen; input5:0 miao;input5:0 nao_shi; input5:0 nao_fen; input5:0 nao_miao;output reg beep;/作为发声输出信号接扬声器reg bep; initial beginbeep=1;bep=0;en

44、dalways (posedge clk)begin if(nao_shi=shi & nao_fen=fen & nao_miaomiao )bep=1b1;else bep=0;endalways (bep)beginif(bep=1b1)beginbeep=en_1ms;endelse beep=1;endendmodule3.5.2 闹钟模块仿真闹钟模块的RTL视图如图12所示,可以看出当输出端时间信号大于等于闹钟信号时,蜂鸣器开始工作。图12 闹钟模块的RTL视图3.6 顶层模块顶层模块的作用是:例化各模块,建立分频模块、时间模块、按键模块、显示模块、闹钟模块的联系。3.6.1 顶层

45、模块源代码顶层模块的源代码如下:module shuzizhong(clk,rst_n,key1,key2,key3,led_bit,dataout,beep);input clk;input rst_n;input key1;/加input key2;/减input key3;/模式按键output2:0 led_bit;output7:0 dataout;output beep;wire en_1s;wire en_1ms;wire5:0 shi;wire5:0 fen; wire5:0 miao;wire5:0 nao_shi;wire5:0 nao_fen; wire5:0 nao_miao;wire key1_low,key2_low,key3_low;wire1:0 moshi;fenpin fenpin_int(.clk(clk), .rst_n(rst_n), .en_1s(en_1s), .en_1ms(en_1ms) ); anjian anjian_int(.clk(clk), .rst_n(rst_n),.key1(key1),.key2(key2),.key3(key3),.key1_low(key1_low),.key2_low(key2_low),.key3_low(key3_low);shijian shijian_int(.clk

温馨提示

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

评论

0/150

提交评论