




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
EDA设计实验基于FPGA的数字计时器的设计中文摘要FPGA(FieldProgrammable 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注:完整电路及程序见相应的设计文件中,本文只给出部分电路及程序。目 录一、设计要求与说明-1 -二、方案论证-1 -三、各模块设计-2 -1、分频器模块-2 -2、计时器模块-3 -3、清零功能-4 -4、校时、校分功能-5 -5、整点报时功能-6 -6、音乐闹铃功能-6 -7、动态显示模块-7 -8、开关消抖的模块设计-8 -9、设计总电路图-9 -四、编译、仿真和下载-9 -五、实验结果-10 -六、结论-10 -七、参考文献-11 -致谢. -12 -一、 设计要求与说明采用层次化的方法进行设计,设计一个具有校时、校分、清零、保持、整点报时和闹铃功能的数字钟,设计层次清晰、合理。1、数字钟最大计时显示23小时59分59秒。2、在数字钟正常工作时可以对数字钟进行校时和校分。3、在数字钟正常工作中可以对数字钟进行不断电复位。4、整点报时是数字钟在每个小时整点到来之前进行鸣叫,鸣叫频率是在59分53秒、55秒、57秒为1kHz,在59秒为2kHz。5、对设计电路进行功能仿真。6、将仿真通过的电路下载到实验箱,完善设计效果。二、 方案论证采用自顶向下分层设计思想的大概设计示意图如下秒计数60进制数字钟分计数时计数动态显示计数扩展功能24进制图2.1 自顶向下分层设计计时器电路的基本结构图如下源时钟校时计时星期动态显示解决冲突音乐分频器3分频器2分频器1清零闹铃报时电路1Hz1000Hz2000Hz蜂鸣器图2.2 数字钟原理图 从图2.1可以看出,源时钟经过三个不同的分频器,产生三个不同频率的时钟,其中1Hz的时钟用于计时,1000Hz和2000Hz的时钟用于提供报时信号。计时器包括小时计数、分计数、秒计数,其中秒计数变化的频率和1Hz时钟信号的频率是一样的。在时钟运行的过程中有几个时间节点是需要特别注意的:59秒、59分59秒,这两个时刻将会产生进位;23时59分59秒,这个时刻时间将会归零,同时星期加一,只要注意这几个时刻的判断并采取相应的措施便可完成正常的计数。采用同步计数的方法可以有效地避免竞争冒险,使计时更加稳定。清零电路:当清零开关有效时,在计数器中用异步清零的方式使所有数据清零。校时电路:用两个开关分别控制校时和校分,当校时开关有效时,1Hz时钟信号将直接作用于小时计数和分钟计数。报时电路:报时电路的关键在于判断四个时刻,在59分53秒、55秒、57秒时向蜂鸣器输出1000Hz的信号;在59分59秒时向蜂鸣器输出2000Hz的信号。闹铃电路:先进行闹铃时间设置,并将时间保存在锁存器中。在开启闹铃之后,不断地判断时间与设定的时间(小时和分)是否相等,当两者相等时,即达到了闹铃时刻,便选通输出时长1分钟的闹铃音乐,闹铃功能便实现了。当闹铃信号与报时信号相冲突时,以闹铃信号优先。动态显示:动态显示的原理是使用数据选择器的时分复用功能。例如动态显示六位数据时,需要一个6选1数据选择器、一个24选4数据选择器,和一个7段显示译码器协调工作。6选1数据选择器的作用是选择点亮的数码管,24选4数据选择器的作用是选择对应数码管应该输出的数据,7段显示译码器的作用是对BCD码进行译码,便于数码管显示。综上所述,完成好上述各子模块的设计,便可以为整个设计奠定基础。三、各模块设计1、分频器模块分频器模块用VHDL语言实现采用“计数-翻转”的方法。在模块中有计数变量,当计数变量计数至某一值n时输出信号翻转一次,如此循环,便可以输出 2(n+1)分频的占空比为50%的方波信号。其VHDL语言描述如下process(clk1)variable div1:integer range 0 to 23999;variable div2:integer range 0 to 11999;variable div3:integer range 0 to 23999999;beginif clk1event and clk1=1 thenif (div1=23999) then -1kHzdiv1:=0;clk_1k_reg=not clk_1k_reg;else div1:=div1+1; end if; if (div2=11999) then -2kHz div2:=0; clk_2k_reg=not clk_2k_reg; else div2:=div2+1; end if; if (div3=23999999) then-1HZ div3:=0; clk_1_reg=not clk_1_reg; else div3:=div3+1; end if; end if;end process;在程序中,div1、div2、div3是计数变量,当它们计数达到对应的值时,便会控制对应的输出信号翻转。由于设计中分频数太大,不适合仿真,因此以8分频为例,进行仿真验证,仿真结果如下图3.1 8分频仿真结果2、计时器模块本设计中计时器模块完全采用VHDL语言描述,计时器的基本原理是利用两个模60计数器、一个模24计数器和一个模7计数器,串连工作,同时采用一个时钟统一控制。其VHDL语言描述如下if (hh2=0010 and hh1=0011 and mm2=0101 and mm1=1001 and ss2=0101 and ss1=1001) then -23小时59分59秒清零 if(day=0111) then ddd=0001; else day=ddd+1; end if; ss1=0000; ss2=0000; mm1=0000; mm2=0000; hh1=0000; hh2=0000; elsif(hh1=1001 and mm2=0101 and mm1=1001 and ss2=0101 and ss1=1001) then -到达X9时59分59秒 ss1=0000; ss2=0000; mm1=0000; mm2=0000; hh1=0000; hh2=hh2+1; elsif(mm2=0101 and mm1=1001 and ss2=0101 and ss1=1001) then-到达59分59秒 ss1=0000; ss2=0000; mm1=0000; mm2=0000; hh1=hh1+1; elsif(mm1=1001 and ss2=0101 and ss1=1001) then-到达X9分59秒 ss1=0000; ss2=0000; mm1=0000; mm2=mm2+1; elsif(ss2=0101 and ss1=1001) then-到达59秒 ss1=0000; ss2=0000; mm1=mm1+1; elsif(ss1=1001) then -到达9秒 ss1=0000; ss2=ss2+1; else ss1=ss1+1; end if;在某一计数器计数达到上限时,在下一个时钟到来时,该计数器清零,同时向高一级计数器进位。计时电路仿真结果如下图3.2 计时仿真电路3、清零功能当清零信号有效时,将时间清零,其VHDL语言描述如下 if(nclear=0) then-清零 ss1=0000;ss2=0000;mm1=0000; mm2=0000; hh1=0000; hh2=0000; end if;其仿真结果如下图3.3 清零电路仿真图 4、校时、校分功能当校时(校分)信号有效时,输入的1Hz时钟信号直接用于时(分)的计数,从而达到快速校时和校分的目的。其VHDL语言描述如下 if(clkevent and clk=1) then if(fen=0) then -校分 ss2=ss2; ss1=ss1; hh2=hh2; hh1=hh1; if(mm2=0101 and mm1=1001 )then-在59分时清零 mm2=0000; mm1=0000; elsif(mm1=1001)then-在X9分时进位 mm1=0000; mm2=mm2+1; else mm1=mm1+1;-分加一 end if; elsif(shi=0)then -校小时 ss2=ss2; ss1=ss1; mm2=mm2; mm1=mm1; if(hh2=0010 and hh1=0011 )then -23时,清零 hh2=0000; hh1=0000; elsif(hh1=1001)then-X9时,进位 hh1=0000; hh2=hh2+1; else hh1=hh1+1;-时加一 end if; end if; end if;以校时功能为例仿真结果如下图3.4 校时功能仿真由图3.4可以看到,当校时开关shi无效时,时间正常计数,当shi有效时,开始校分,这时分和秒均处于保持状态。5、整点报时功能在时间运行时,不断进行时间与59分53秒、55秒、57秒和59秒进行比较,在53秒、55秒、57秒时报时信号输出为1kHz,在59秒时,输出为2kHz。其VHDL语言描述如下if(mm2=0101 and mm1=1001 and ss2=0101 and ss1=0011 ) then baoshi=clk_1k;elsif(mm2=0101 and mm1=1001 and ss2=0101 and ss1=0101 ) then baoshi=clk_1k;elsif(mm2=0101 and mm1=1001 and ss2=0101 and ss1=0111 ) then baoshi=clk_1k;elsif(mm2=0101 and mm1=1001 and ss2=0101 and ss1=1001 ) then baoshi=clk_2k;else baoshi= 0;end if;仿真结果图如下图3.5 整点报时仿真结果6、音乐闹铃功能闹铃功能实现方法与报时相似,也是通过判断时间来实现。应该注意的是此时的时间不是确定的时间,而是事先由人为设置的存储在锁存器里的时间,在此不再赘述。音乐模块的实现方法如下音高频率对照表1234567低音131147165175196221248中音262294330350393441496高音525589661700786882990 产生音乐的模块电路图如下图3.6 音乐模块电路图模块paia的作用是控制每个音的长短,并且根据音高的不同对应送初值给fana,共产生45个音符。模块fana的作用是根据paia送来的初值倒计时,每次计到0就使信号q翻转,由于初值不同,就产生不同的音高。fana的VHDL语言描述如下 library ieee; use ieee.std_logic_1164.all; entity fana is port(a:in integer range 0 to 10204; clk:in std_logic; q:out std_logic); end fana; architecture bhv of fana is begin process(clk) variable b,d:std_logic; variable c:integer range 0 to 10204; beginif clkevent and clk=1 then if b=0 then c:=a; b:=1; else if c=0 then b:=0; d:=not d;elsec:=c-1;end if;end if; end if; q=d;end process;end bhv;7、动态显示模块以四位共阳数码管为例动态显示的原理图如下图3.7 动态显示原理图动态显示的原理:各数码管所对应的码段是连接在一起的,而将阳极作为选择端。当一个数码管的阳极置1 时,为选中状态,此时应该向数码管输入该数码管应该显示的字符的8位码。由于其他数码管处于未选中状态,不予显示。以此类推,各个数码管按扫描次序依次显示,当扫描速度很快时,由于人眼视觉暂留效应,看起来四个数码管同时显示。在实验中的6位数码管动态显示模块由 24选4、模6计数器、3线-6线译码器、4线-7线显示译码器组成其中:24选4的作用是选择需要显示的数字;模6计数器的作用是产生从000101循环的3位码;3线-6线译码器的作用是将000101的3位码译码成111110011111的6位码,通过这6位码来选中所要进行显示的数码管(数码管为共阳数码管,但是由于已经在电路中加入了非门,因此是低电平选中);4线-7线显示译码器的作用是将含有数值信息的4位BCD码译码成适应7段数码管显示的7位码。动态显示模块的电路图如下图3.8 动态显示电路图8、开关消颤的模块设计由于在拨动开关时存在机械抖动,在某些情况下会导致输出错误的控制信号,使输出出错,因此对开关消颤是必要的。一种比较有效的消颤方法是计数法,其模块示意图如下ScanaSMOOTHb 图3.9 开关消颤电路图其基本功能是为消除按键抖动,使其产生一个有效信号。此处a为按键产生的带有颤抖的信号,Scan为扫描信号,b为消颤之后的信号。设计原理是当按下a后,在Scan的控制下开始计数,当计数至7时,认为按键有效,输出按键信号。其关键VHDL语言描述如下 if (scanevent and scan=1) then if (a=1) then count=count+1; b=count(2) and count(1) and count(0); else count=”000”; end if; end if;9、设计总电路图图3.10 设计总电路图四、编译、仿真和下载编译:编译包括两种类型,一种是点击工具栏上的,这是只综合并输出网表的编译;另一种是点击工具栏上的,这是包括了编译、网表输出、综合和配置器件的完全编译。在编译通过之后才能将程序下载至试验箱。仿真:选择“File-New-Other Files-Vector Waveform File”新建一个波形文件,然后插入输入输出节点,在配置完成后保存,点击“Processing”下的“Simulation tool”,选择刚刚新建的波形文件按“Start”进行波形仿真,按“Open”打开文件可以看到波形仿真结果。下载:在全编译之前需要进行管脚配置,在“Assignments-Pins”下进行管脚配置。再在“Assignment-Setting-Device&Pin”对话框中将未使用的管脚设置成高阻输入,这样上电后FPGA的所有未使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纪委监委舆情管理办法
- 企业安全知识培训讲师课件
- 2025年深入贯彻中央八项规定精神学习教育应知应会试题及答案
- 出租屋灭火安全培训课件
- 企业安全工作培训会课件
- 出海安全培训课件
- 无人机信号安全管控技术-洞察及研究
- 2025国家能源集团内蒙古上海庙发电有限公司煤炭买卖合同
- 企业安全培训资料模板课件
- 出口退税课件介绍
- 胶质细胞瘤课件
- 校外培训消防安全知识课件
- 2025年高级执法资格考试真题及答案
- 2025浙教版(2024)八年级上册科学教学计划(三篇)
- 儿童抽动障碍的诊断与评估(2025年)解读课件
- 发热护理课件
- 2025年行政许可法知识竞赛题库及答案
- 库房管理基础知识培训课件
- 1.2《我们都是社会的一员》教学设计 2025-2026学年统编版道德与法治八年级上册
- 2024年劳动争议调解仲裁法知识竞赛题库与答案
- 劳动与技术小学开学第一课
评论
0/150
提交评论