




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、东 莞 理 工 学 院本 科 毕 业 设 计 毕业设计题目:基于FPGA综合性计时系统设计学生姓名:廖武祥 学 号:20104130111系 别:电子工程学院专业班级:电子信息工程1班 指导教师姓名及职称:胡胜 副教授起止时间:2014年3月 2014年6月 摘 要本设计利用FPGA(FieldProgrammable Gate Array)实现数字时钟的计时系统,计时包括(年、月、日、时、分、秒、星期),用数码管显示,具有校对和自动计时功能。本次设计主要是用VHDL语言进行编程,利用Quartus II 9.0sp2 Web Edition进行编程仿真,仿真芯片用的是alter的cyclon
2、e II系列EP2C5Q208C8N。之所以选用quartus II作为整个设计的环境,是因为其中可以用图形输入的编程方式,相对于语言输入更加简明,方便检查出现的问题。关键词 FPGA 计时系统 数码管 VHDL Quartus II 图形输入AbstractThis design using FPGA (field programmable Gate Array) to achieve timing system of digital clock, timing (year, month, day, including, hours,minutes and seconds, weeks),
3、with digital display, and automatic timing function with proofreading.This design is mainly using VHDL programming language, programming simulation using the Quartus II 9.0sp2 Web Edition, the simulation chip is used in cyclone II series EP2C5Q208C8N alter. The reason I chose Quartus II as a design
4、environment, because it can use the graphical input way of programming, with respect to language input more concise, convenient examination problems.Keywords:FPGA,timing system of digital tube,VHDL,Quartus II ,raphics input目录1.引言52.结果与讨论52.1程序总结构图52.2计时系统主要的原理分析72.3硬件部分92.3.1应用到的芯片92.3.2计数器92.3.3显示器
5、112.3.4控制器112.3.5 Quartus的注意事项112.4软件部分112.4.1 COUNT7计数器122.4.2显示模块122.4.3按键消抖模块142.4.4分频器152.4.5控制模块162.4.6日计数器173.总结19注释20参考文献20致谢21附录一22附录二25451引言 随着电子产品不断的缩小化,集成电路得到了快速的发展,技术含量也越来越高。现代社会追求的就是简单、方便,所以微小化越来越受广大消费者的喜爱,特别是那些高科技的电子产品,比如手机、电子手表等等,最近推出的谷歌眼镜更是小型化设计中的一个台阶。时钟作为现代快节奏的社会生活中不可缺少的一部分,被设计成了各种形
6、式,有电子日历牌、电子手表、手机时钟,是生活中既常用又重要的组成部分。这也是这次设计之所以选时钟设计这个课题。这设计主要是面对现在市场上非常火的万年历的方向,现在外面商场卖的万年挂历大多数只能实现基本的时钟计时,有些用单片机控制的,计时长了会有一定的误差,所以本设计主要针对这个问题选用了FPGA芯片控制,相比之下FPGA的逻辑门阵列比单片机更精确。2结果与讨论 2.1 程序总结构图:图1 程序总结构图1上图包括了控制模块、按键消抖模块、和控制模块,分频器FJYFP是将50MHZ分频成200HZ给按键消抖提供所需要的时钟频率,FJYFP200是两百分频,把200HZ的频率分频成1HZ给秒数器计时
7、。使用原理图输入的方法,新建原理图后右键载入相应的程序框图,再把数据总线,和基本的连线连接起来即可得到上面的程序图。图2 程序总结构图2这部分主要是显示和计数器的程序模块,载入方式和前面基本一样,以上的每一部分的仿真都会在后面详细讲到,由上两个图可以清晰地了解到本次设计的详细思路。2.2 计时系统的主要原理分析此课题用的是VHDL语言进行编程仿真的,计时主要是通过计数器叠加,然后溢出值进入到下一个计数器继续进行计数的循环过程实现的。比如,首先进行计数的是秒,用的是60位的计数器,当1HZ的时钟来了之后,计数器加1,满60后溢出1作为分钟的时钟,依次类推到时、日、月、年等。秒计时启动计时计到60
8、分加1时加1计到60日加1计到24计到上限月加1年加1计到上限YYNNYYYNN图3 程序实现流程图在FPGA的核心板中只配置50MHZ的晶振,所以想产生1HZ的时钟,需要一个分频器,分频器的程序在软件部分由介绍,本次设计主要用了三个分频器,一个是按键消抖用的200HZ分频,一个是时钟用的1HZ的分频,还有一个是数码管显示需要100HZ的分频。显示是用数码管动态显示,因为考虑到节约芯片的引脚,保持芯片的稳定性,本次设计还在外围电路加入了38译码器和显示译码器,38译码器选择位输出低电平,CD4511显示译码器输出的是5V电压,刚好可以提供电源给数码管,方面后面外围电路的设计,确实给我PROTE
9、L的电路设计的检查节约了不少时间,不用三极管的原因是三极管不能提供稳定的5V电压,保证数码管正常显示,可以有更长的寿命,调节电路用按键调节,输入低跳变有效。启动检测按键分析按键时间设置KEY1YN图4 控制流程图2.3 硬件部分2.3.1 应用到的芯片 :FPGA芯片用的是cyclone II EP2C5Q208C8N:图5 EP2C5Q208C8N数码管显示:本次设计采用的是共阴极数码管,数码管是由LED等组合形成,位选信号COM为低电平的时候只要在字选端输入相应的低电平,则对应的二极管就会被点亮,从而形成0、1、2、3等的字样。发光二极管的额定电流需要在50MA左右,在电路设计时要相应加上
10、100欧的电阻控制流过的电流。图6 数码管原理图2.3.2 计数器:要实现年、月、日、时、分、秒、星期的计时,分别需要以下几个计数器:100位计数器(count100)、12位计数器(count12)、32位计数器(count32)、24位计数器(count24)、60位计数器(count60)和7位计数器(count7)2.3.3 显示器:本课题主要使用了数码管显示,而且为了年月日等时间看起来更美观,本设计模仿了市场上现有的时钟壁画,全部采用一位数码管显示,方便直观观察时间。2.3.4 控制器:主要用了轻触开关来更改时间,常态时接高电平,按下时接地。2.3.5 Quartus的注意事项:Qu
11、artus软件进行JTAG/AS仿真的时候最好把FPGA芯片的所有引脚状态改成输入三态,可以节约电源同时可以保证芯片的温度从而达到稳定控制。设置方法如下:图7 quarter仿真的注意事项2.4 软件部分 2.4.1. COUNT7计数器如上硬件部分所述,一共用到种计数器,分别包括了年、月、日、时等(100位、12位、32位、24位等),其中COUNT7如下:图8 CONT7计数器是这次设计的基本组成部分,但几个计数器的原理都基本一样,LD是预置数使能端,低电平有效,当LD为0时,DATA的值送给NUM。正常运作时CLK来一个上升沿,NUM输出加1。仿真实现如下图所示: 图9 7位计数器的仿真
12、波形由仿真波形可以看出,当LD为0时,检测到上升沿时NUM输出的数值等于DATA的数值5,当LD变成高电平的时候检测时钟脉冲,当有时钟脉冲过来时NUM相应递增,因为上面的是7位计数器,所以当计数从5计到7的时候,计数器重新变成1。2.4.2. 显示模块4显示模块是这次设计中的一个重点,刚开始时笔者想过直接控制FPGA输出位选和字选进行控制,但后来仿真时发现有时候会出现误差,有些显示出现了错误。后来我查了一下资料和问了导师之后发现,如果总是用FPGA中同一个BANK的I/O口的话会导致芯片引脚的电流过大,还会对芯片造成一定的伤害,所以决定在外围电路增加一个38译码器和CD4511显示译码器来节约
13、芯片端口资源,顺利地解决了显示问题。显示程序模块如下:图10 XSKZQCLK_SCAN是扫面时钟,SEC5.0、MIN5.0、HOUR4.0、DAY4.0、MON3.0、YEAR6.0、WEEK2.0分别是时间计数器发送过来的数值,当时钟脉冲来了上升沿的时候,对应的数值分别送给BCD进行显示。SELOUT是显示数码管的位选信号,外接38译码器控制数码管的动态显示,BCD是输出的数值,外接CD4511显示译码器接到数码管的8段字信号输入端。图11 XSKZQ仿真波形由仿真图可以看出:SELOUT为0时,秒(SEC)输出到BCD中,依次类推。当SELOUT计到7时,完成依次动态输出,SELOUT
14、重新变成0。比如:预设SEC、MIN、HOUR、DAY、MON、YEAR、WEEK的值分别为8、7、6、5、4、3、2,当SELOUT为0时,BCD输出为8,即00001000等于SEC的值,当SELOUT为1时输出为7等于MIN的值,则程序可以实现。2.4.3. 按键消抖模块图12 消抖程序消抖模块主要是用状态机去除毛刺,其原理和延时去毛刺的原理基本上一样,因为毛刺持续的时间比较短,一般只会存在5至10毫秒,所以如果想消去毛刺的话,只需要检测一个信号(低电平)可以持续5个毫秒的就可以认为是有按键按下去了。一共用了3个输入按键,分别是:时间设置选项、时间加1、时间减1,CLK的输入时钟是200
15、HZ(由分频器分频50MHZ得来)。程序的仿真波形如下图所示:图13 消抖程序仿真波形输出在仿真波形中,当CIN低电平时间持续2个时钟周期则表示有按键输入,否则将被认为是毛刺去掉。当CIN持续两个周期后,DOUT输出为0。2.4.4. 分频器图14 分频器设计的原理主要是计数分频,主要是用了两种分频器,一种是50MHZ变成200HZ的分频器,用于扫描按键输入的时钟脉冲,另外一种是将200HZ分频为1HZ用于时间信号的脉冲。如200HZ的脉冲经过200次计数后溢出的时钟就是1HZ。 程序仿真波形如下图:图15 分频器仿真电路因为50MHZ的仿真太大,刚开始仿真的时候等待的时间很长,而且毛刺很多,
16、不容易观察实验的结果,所以软件仿真的时候将分频器改成了1000分频方便观察现象,波形中NEWCLK变成1的时候,CLK计数刚好满1000次,说明程序运行成功。2.4.5. 控制程序图16 控制器控制程序是本设计的核心程序,主要实现时间的设置,KEY1是调节时间的总控制,KEY2、KEY3主要负责指定数值的增与减。当KEY1输入低跳变时,时钟暂停,开始调节时钟的秒,再输入多一次时开始调节时间的分钟数值,RES是退出调节的按键,无论进行到哪一步,只要RES输入低电平,调节控制将跳出。SEC_EN、MIN_EN、HOUR_EN、DAY_EN、MON_EN、YEAR_EN、WEEK_EN是使能端,相应
17、位为高电平时调节相应的目标。SEC5.0、MIN5.0、HOUR4.0、DAY4.0、MON3.0、YEAR6.0、WEEK2.0分别是秒、分、时、日、月、年、周的预置数,当调节按键KEY1按下时,这些置数将会送给对应的计数器进行显示。如当SEC_EN为低电平时选择调节秒的数值。程序模块仿真如下图:图17 控制器的仿真波形以上波形实现的功能:时间设置按键(KEY1)第一次按下时对秒(SEC)进行设置,SEC_EN有效,KEY2按键输入一个低跳变时,SEC加1,并且SEC的数值0、1、2、3等将会送到计数器的预置数端,这时计数器的LD有效即可将预置数直接送到数码管去显示。当KEY1再一次按下时对
18、分(MIN)进行设置,MIN_EN有效,即连接MIN计数器的LD有效,预置数直接送给MIN计数器,无乱计数器里面的值现在是多少,结果都会变成预置数的值,KEY2按键输入一个低跳变时,MIN加1。RES是退出设置,按下之后,计时器进入正常计时。 2.4.6. 日计时器日计时器是这次的一个难点,因为每个月有可能是28天、29天、30天、31天,所以需要反馈年和月的数值进行判断。图18 日计数器LD是置数端、NIAN6.0和YUE3.0是当前的年和月,DATA4.0是预置数,MAX_DAYS4.0是最大天数的输出端,连接到控制器的输入端,用于调节时间。以下是仿真波形图:图19 日计数器仿真波形从以上
19、波形可以看出,每当来一个上升沿NUM就增加1,当数值达到最高MAX_DAYS时,NUM清零,CO溢出高电平,LD为低电平时DATA中的数送到NUM中显示。总结经过这一次的设计,本人觉得收获重大,刚开始做的时候什么都不懂,到处查找资料,问老师、求同学,一直很担心自己做不出来。但经过了几个月的慢慢摸索,我渐渐地了解了FPGA芯片的工作原理,懂得了quartus软件的使用。虽然之前上EDA的时候很专心听讲,本来以为选了这个课题对于自己来说应该不算太难,保准可以做得出来,但后来真正到自己用开发板编程的时候才发现,理论和实践在一定程度上可以说是关联不大的,之前在实验室做实验都是一大班的同学,大家吵吵闹闹
20、在复制、粘贴,然后按老师给的引脚烧录进试验箱上,看到有结果了以为就完成了。但真正自己烧录时才会发现,原来自己连芯片每一个引脚有什么用都不知道,更不要说看结果了。在这整一个设计的过程中,我真正的感受到了电子男的魅力,吃饭、跑步都想着程序已经是最正常的事情了。通过学习,我了解到了quartus软件的强大,特别是它具有图像输入功能,可以直接明了地输入编程模块,这是我这次设计能做出来的关键,大大节省了我编写大程序的时间,而且我可以将大程序分成一小块一小块的模块来编写,可以方便检查错误。还有一个是在看郭天祥的十天学懂FPGA的视频才发现我之前在学习板上遇到的问题到底怎么解决。刚开始写入程序到FPGA芯片
21、时,我没有对它的引脚进行默认值设置,所以在实验板上那数码管和蜂鸣器才会全部置有效电平,这个设计正是硬件部分中提到的注意事项。参考文献:1 潘松,黄继业.EDA技术实用教程VHDL版(第四版),20102 谭会生,瞿遂春.EDA技术综合应用实例与分析,2004:110-1293 郭天祥.新概念51单片机C语言教程编著,2009:56-694 郭天祥. CPLD 系统设计及VHDL 语言的视频教程.20105 清华大学电子学教研组.数字电子技术基础(第五版). 2006年5月第5版.174-1896 清源科技.Protel 99 SE电路原理图与PCB设计及仿真.2007年1月:250-3007
22、Evgeni Stavinov(叶夫根尼 斯塔维诺夫.FPGA高手设计实战真经100则.8 EDA先锋工作室,王诚,蔡海宁,吴继华.Altera FPGA/CPLD设计(基础篇)(第二版)致 谢 在这次毕业论文的撰写过程中,得到了许多人的帮助。首先我要感谢我的指导老师在毕业设计上给予我们的指导、耐心地给我讲解不懂的问题,提供给我的支持和帮助,而且毕业论文还给我指正了很多不足的地方,这是我能顺利完成这次报告的主要原因。此外,我也要感谢身边的那些好同学们,他们帮助我解决了很多我不太明白的难题,也耐心地为我讲解问题,刚开始我懂得并不多,经常会打扰到其他同学帮助我,特别感谢林同学,不但借我开发板还教会
23、我怎么用软件编程。同时也感谢电子信息工程学院为我提供良好环境,让我可以更好的完成自己的毕业设计。最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学。附录一总电路原理图:显示模块原理图:按键模块原理图:PCB板原件(印制版):去掉覆铜后的PCB板:成品实物图:附录二-COUNT7计数器一共用到6种计数器,分别包括了年、月、日、时等(100位、12位、32位、24位等),其中COUNT7的计数器程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CONT7 IS PORT(LD
24、: IN STD_LOGIC; -置位信号(低电平有效) CLK: IN STD_LOGIC;-时钟脉冲 DATA: IN STD_LOGIC_VECTOR(2 DOWNTO 0); -预置数 NUM: BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0); -计数结果END ENTITY CONT7; ARCHITECTURE BHV OF CONT7 IS BEGINPROCESS(CLK,LD) IS BEGIN IF(LD=0) THEN -置数端有效时输入预置数 NUM=DATA; ELSIF CLKEVENT AND CLK=1 THEN IF NUM=111 T
25、HEN -计数器清零 NUM=001; ELSE NUM=NUM+1;-否则累加 END IF; END IF; END PROCESS; END ARCHITECTURE BHV;-COUNT 12 计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CONT12 IS PORT(LD: IN STD_LOGIC; -置位信号(低电平有效) CLK: IN STD_LOGIC;-时钟脉冲 DATA: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -预置数 NU
26、M: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); -计数结果 CO: OUT STD_LOGIC); -进位信号END ENTITY CONT12; ARCHITECTURE ART OF CONT12 IS BEGIN PROCESS(CLK,LD) IS BEGIN IF(LD=0) THEN NUM=DATA; ELSIF CLKEVENT AND CLK=1 THEN IF NUM=1100 THEN -12 NUM=0001;CO=1; ELSE NUM=NUM+1;CO=0; END IF; END IF; END PROCESS;END ARCHIT
27、ECTURE ART;-COUNT 24计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CONT24 IS PORT(LD: IN STD_LOGIC; -置位信号(低电平有效) CLK: IN STD_LOGIC;-时钟脉冲 DATA: IN STD_LOGIC_VECTOR(4 DOWNTO 0); -预置数 NUM: BUFFER STD_LOGIC_VECTOR(4 DOWNTO 0); -计数结果 CO: OUT STD_LOGIC); -进位信号END ENTITY
28、 CONT24; ARCHITECTURE ART OF CONT24 IS BEGIN PROCESS(CLK,LD) IS BEGIN IF(LD=0) THEN NUM=DATA; ELSIF CLKEVENT AND CLK=1 THEN IF NUM=10111 THEN -23 NUM=00000;CO=1; ELSE NUM=NUM+1;CO IS_RUNNIAN:=1;-0 -如当前年为00,则输出闰年确认信号 WHEN 0000100 = IS_RUNNIAN:=1;-4 WHEN 0001000 = IS_RUNNIAN:=1;-8 WHEN 0001100 = IS_RU
29、NNIAN:=1;-12 WHEN 0010000 = IS_RUNNIAN:=1;-16 WHEN 0010100 = IS_RUNNIAN:=1;-20 WHEN 0011000 = IS_RUNNIAN:=1;-24 WHEN 0011100 = IS_RUNNIAN:=1;-28 WHEN 0100000 = IS_RUNNIAN:=1;-32 WHEN 0100100 = IS_RUNNIAN:=1;-36 WHEN 0101000 = IS_RUNNIAN:=1;-40 WHEN 0101100 = IS_RUNNIAN:=1;-44 WHEN 0110000 = IS_RUNNI
30、AN:=1;-48 WHEN 0110100 = IS_RUNNIAN:=1;-52 WHEN 0111000 = IS_RUNNIAN:=1;-56 WHEN 0111100 = IS_RUNNIAN:=1;-60 WHEN 1000000 = IS_RUNNIAN:=1;-64 WHEN 1000100 = IS_RUNNIAN:=1;-68 WHEN 1001000 = IS_RUNNIAN:=1;-72 WHEN 1001100 = IS_RUNNIAN:=1;-76 WHEN 1010000 = IS_RUNNIAN:=1;-80 WHEN 1010100 = IS_RUNNIAN:
31、=1;-84 WHEN 1011000 = IS_RUNNIAN:=1;-88 WHEN 1011100 = IS_RUNNIAN:=1;-92 WHEN 1100000 = IS_RUNNIAN:=1;-96 WHEN OTHERS = IS_RUNNIAN:=0; END CASE; CASE YUE ISWHEN 0001 = TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS TOTAL_DAYS -2 IF (IS_R
32、UNNIAN=1) THEN TOTAL_DAYS=11101; -如是闰年2月则总天数为29 ELSE TOTAL_DAYSNULL; END CASE; IF(LD=0) THEN NUM=DATA; ELSIF CLKEVENT AND CLK=1 THEN MAX_DAYS=TOTAL_DAYS; IF NUM=TOTAL_DAYS THEN-99 NUM=00001;CO=1; ELSE NUM=NUM+1;CO=0; END IF; END IF; END PROCESS;END ARCHITECTURE ART;-CONT 60 计数器LIBRARY IEEE;USE IEEE.
33、STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CONT60 IS PORT(LD:IN STD_LOGIC; CLK:IN STD_LOGIC; DATA:IN STD_LOGIC_VECTOR(5 DOWNTO 0); NUM:BUFFER STD_LOGIC_VECTOR(5 DOWNTO 0); CO:OUT STD_LOGIC);END ENTITY CONT60;ARCHITECTURE ART OF CONT60 IS BEGIN PROCESS(CLK,LD)IS BEGIN IF(LD=0)THEN NUM=
34、DATA; ELSIF CLKEVENT AND CLK=1THEN IF NUM=111011THEN NUM=000000;CO=1; ELSE NUM=NUM+1;CO=0; END IF; END IF; END PROCESS;END ARCHITECTURE ART;-CONT 100计数器-CNOT100.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CONT100 IS PORT(LD: IN STD_LOGIC; -置位信号(低电平有效) CLK: IN S
35、TD_LOGIC;-时钟脉冲 DATA: IN STD_LOGIC_VECTOR(6 DOWNTO 0); -预置数 NUM: BUFFER STD_LOGIC_VECTOR(6 DOWNTO 0); -计数结果 CO: OUT STD_LOGIC); -进位信号END ENTITY CONT100; ARCHITECTURE ART OF CONT100 IS BEGIN PROCESS(CLK,LD) IS BEGIN IF(LD=0) THEN NUM=DATA; ELSIF CLKEVENT AND CLK=1 THEN IF NUM=1100011 THEN -99 NUM=0000
36、000;CO=1; ELSE NUM=NUM+1;CO=0; END IF; END IF; END PROCESS;END ARCHITECTURE ART;-DISPLAY_XS.VHD 数码管显示LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY DISPLAY_XS IS PORT(CLK_SCAN:IN STD_LOGIC; -扫描时钟 SEC,MIN:IN STD_LOGIC_VECTOR(5 DOWNTO 0);-当
37、前秒、分 HOUR: IN STD_LOGIC_VECTOR(4 DOWNTO 0); -当前时 DAY: IN STD_LOGIC_VECTOR(4 DOWNTO 0); -当前日 MON: IN STD_LOGIC_VECTOR(3 DOWNTO 0); -当前月 YEAR: IN STD_LOGIC_VECTOR(6 DOWNTO 0); -当前年 WEEK: IN STD_LOGIC_VECTOR(2 DOWNTO 0); -当前星期 SELOUT: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); -扫描信号 38OUT: OUT STD_LOGIC_VECTOR(
38、8 DOWNTO 0); -七段显示码输出END ENTITY DISPLAY_XS;ARCHITECTURE BHV OF DISPLAY_XS IS SIGNAL TEMP_HC: INTEGER RANGE 0 TO 99;-定义TEMP_HC SIGNAL COUNT: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN PROCESS(CLK_SCAN) IS BEGIN IF CLK_SCANEVENT AND CLK_SCAN=1 THEN -对各个输出信号进行扫描 IF COUNT=0 THEN -完成扫描COUNT=000;-分别对年、月、日等进行扫描输出
39、 ELSE COUNT=COUNT+1;-顺序扫描 END IF; END IF; END PROCESS; SELOUT TEMP_HC TEMP_HC TEMP_HC TEMP_HC TEMP_HC TEMP_HC TEMP_HCNULL;END CASE; CASE TEMP_HC IS WHEN 0 =BCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCDBCD=00000000; END CASE; END PROCESS; END ARCHITECTURE ART;-QUDOULIBRARY IEEE;USE
40、IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY QUDOU ISPORT(CLK,CIN,RESET:IN STD_LOGIC;DOUT: OUT STD_LOGIC);END QUDOU;ARCHITECTURE BHV OF QUDOU ISTYPE STATE IS (S0,S1,S2);-定义状态机SIGNAL NEXT_STATE:STATE;BEGINPROCESS(CLK,CIN)BEGINIF(RESET=1)THEN-复位按键按下时启动NEX
41、T_STATE=S0;DOUT DOUT=1; IF(CIN=0) THEN-检测到按键按下 NEXT_STATE=S1; ELSE NEXT_STATE DOUT=1; IF(CIN=0)THEN NEXT_STATE=S2; ELSE NEXT_STATE -等待按键松开 DOUT=0; IF(CIN=0)THEN NEXT_STATE=S2; ELSE NEXT_STATE DOUT=1; NEXT_STATE=S0;-FJYFP 分频器(50MHZ变成200HZ)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FJYFP ISPORT(C
42、LK:IN STD_LOGIC; NEWCLK:OUT STD_LOGIC);END ENTITY FJYFP;ARCHITECTURE ART OF FJYFP IS SIGNAL CNTER:INTEGER RANGE 0 TO 10#50000000#;-50MHZ BEGINPROCESS(CLK)ISBEGIN IF CLKEVENT AND CLK=1THENIF CNTER=10#250000# THEN-判断 CNTER=0; ELSE CNTER=CNTER+1; END IF; END IF;END PROCESS;PROCESS(CLK,CNTER)ISBEGINIF CLKEVENT AND CLK=1THENIF CNTER=10#250000# THENNEWCLK=1;-输出200HZELSENEWCLK=0;END IF;END IF;END PROCESS;END ARCHITECTURE ART;-FJYFP 分频器(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络游戏虚拟货币发行与游戏角色扮演服务合同
- 东南亚仓储库存盘点与仓储设备租赁合同
- 儿童综合保障计划退保服务协议
- 游戏美术资源制作设计师劳务合同
- 互联网金融服务反欺诈补充合同
- 数字出版物区域独家代理权转让合同
- 工业自动化软件许可及市场推广合作协议
- 太阳能电池技术升级补充协议
- 跨国公司员工离职保密协议及全球竞业限制条款
- 保险业务审核补充合同
- 国家职业技术技能标准 4-07-02-05 商务数据分析师S 2024年版
- 10、工地试验室培训
- 慢性阻塞性肺疾病的发病机制与药物治疗方法
- 无人机竞赛理论考试全部题库练习试卷附答案
- 标准论文格式 机电一体化
- 血糖监测操作流程及考核标准(100分)
- 重大疾病保险介绍动态PPT
- 工程钻机和潜孔钻机技术参数
- 初中体育课堂学生体质发展及体能锻炼有效措施优秀获奖科研论文
- 2023江苏马鞍山港华燃气限公司招聘14人高频考点题库(共500题含答案解析)模拟练习试卷
- JJF 1973-2022 移动生物检测实验舱性能参数校准规范
评论
0/150
提交评论