VHDL课程设计.doc

上传人:土8路 文档编号:10131203 上传时间:2021-04-22 格式:DOC 页数:25 大小:1,015.50KB
返回 下载 相关 举报
VHDL课程设计.doc_第1页
第1页 / 共25页
VHDL课程设计.doc_第2页
第2页 / 共25页
VHDL课程设计.doc_第3页
第3页 / 共25页
VHDL课程设计.doc_第4页
第4页 / 共25页
VHDL课程设计.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《VHDL课程设计.doc》由会员分享,可在线阅读,更多相关《VHDL课程设计.doc(25页珍藏版)》请在三一文库上搜索。

1、目 录1 引言11.1 EDA介绍11.2 任务说明12 系统设计22.1系统概述22.2 系统原理22.3 系统封装图33 程序设计43.1系统结构示意图43.2 分频程序43.2.1 分频程序原理43.2.2 分频程序仿真53.3 位选程序63.3.1 位选程序原理63.3.2 位选程序仿真73.4 时钟程序83.4.1 时钟程序原理83.4.2 时钟程序仿真93.5 计数程序93.5.1 计数程序原理93.5.2 计数程序仿真113.6 BCD码转换113.6.1 BCD码转换原理113.6.2 BCD码程序仿真133.7顶层文件143.7.1 顶层文件介绍及仿真143.7.2硬件调试1

2、54 总结17参考文献18附录191 引言1.1 EDA介绍EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。1.2 任务说明简易数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,

3、方波或其它周期性变化的信号。如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率等。其具有高速、精确、可靠、抗干扰性强和现场可编程等优点。因此,数字频率计是一种应用很广泛的仪器 。本次EDA课程设计题目为简易数字频率计设计,实现对于1HZ-10MHZ的方波信号进行测量。该频率计包括4个不同的档位,具有记忆功能和总体的复位功能。需要利用VHDL(硬件描述语言)通过Quartus II编程软件进行程序的编写和调试、仿真。并将程序下载到硬件上进行实际观测。2 系统设计2.1系统概述本设计基于可编程逻辑器件FPGA,使用VHDL进行设计、综合、仿真以及实现。通过编程,根据

4、选择的档位对输入的方波信号进行频率的测量,并且显示在四位七段数码管上,当数值溢出时进行报警指示。2.2 系统原理本设计共分成五个子模块程序:分频(fpq)程序、位选(wxq)程序、时钟(szq)程序、计数(jsq)程序、BCD转换(bcd)程序。通过五个模块相互配合实现简易数字频率计的功能。各模块间的连接关系如下所示:图1 系统原理图系统原理为:待测的方波信号首先通过分频模块,进行10/100/1000分频,产生10倍/100倍/1000倍及原待测信号共四路方波信号。然后将四路信号送入位选功能模块,通过四个输入开关对该四路方波的选择。位选模块所选择的方波信号送入计数模块后,与输入的系统基准时钟

5、clk配合,计数得到输入方波的信号频率,最后送入bcd转换模块,将四位十进制数据转化成四组4位BCD码。本设计具有记忆功能,在测量过程中不刷新数据,等数据测量过程结束后才显示测量的频率值,并保存到下一次测量结束,此频率计有整体异步复位功能。2.3 系统封装图图2 系统封装图系统封装图如图2所示,其中shuru为待测试的方波输入端,clk为系统时钟频率输入端,rst为复位端,ginp为频率计乘1档端,sinp为频率计乘10档,sinp为频率计乘100档,binp为频率计乘1000档。gout,sout,bout,qout分别为四路档位对应的标志位,通过四个LED灯点亮实现,cc为超量程警告位,通

6、过一个LED灯闪烁实现。gw,sw,bw,qw分别输出四位BCD码,并通过数码管显示,分别表示千位,百位,十位,个位。当系统工作时,四个数码管所显示数据乘以档位即使所测量的方波的频率。3 程序设计3.1系统结构示意图图3 系统结构示意图3.2 分频程序3.2.1 分频程序原理该部分程序中使用process,其中敏感信号列表中为shuru,即待测方波信号。系统备有1档,10档,100档,1000档,即需对待测方波进行10倍,100倍,1000倍的分频,通过定义三个变量,以待测方波为时钟进行计数,则需要程序中计数器计分别计数到5,50,500时对四路输出信号进行逻辑非运算。分频程序代码:libra

7、ry ieee;use ieee.std_logic_1164.all;entity fpq isport(shuru:in std_logic; ao,bo,co,do:buffer std_logic);end fpq;architecture bhv of fpq isbeginao=shuru;process(shuru)variable nu,nu1,nu2:integer range 0 to 1000:=0;beginif(shuru event and shuru =1)then nu:=nu+1;nu1:=nu1+1;nu2:=nu2+1;if(nu=5)then bo=no

8、t bo; nu:=0;end if;if(nu1=50)then co=not co; nu1:=0;end if;if(nu2=500)then do=not do; nu2:=0;end if;end if;end process;end bhv;该程序封装图如下图所示:图4 分频程序封装图3.2.2 分频程序仿真该部分程序仿真波形如下图5所示:图5 分频程序仿真图分频程序仿真参数设定shuru1为输入的预测方波信号,ao,bo,co,do为四个输出信号,分别为对输入shuru1进行分频后以及本来方波信号,由图中可以看出ao频率与fb1频率相同,bo频率为fb1频率的1/10,co频率为

9、fb1频率的1/100,do频率为fb1频率的1/1000。3.3 位选程序3.3.1 位选程序原理该部分程序包含复位端rst,四个输入信号ai,bi,ci,di分别接分频程序的四路分频后的方波信号,通过四个开关控制端k1,k2,k3,k4分别选择输出信号的选择,例如若k1为高电平,则fb0等于ai的输入信号。位选程序与分频程序公共构成频率计四个档位测量功能。位选程序代码:library ieee;use ieee.std_logic_1164.all;entity wxq isport(ai,bi,ci,di,rst:in std_logic; ginp,sinp,binp,qinp:in

10、std_logic; gout,sout,bout,qout:out std_logic; shuru0:out std_logic);end wxq;architecture bhv of wxq isbegin process(rst, ginp,sinp,binp,qinp, gout,sout,bout,qout)beginif(rst=1)then gout=0;sout=0;bout=0;qout=0;shuru0=0;elsif(ginp=1)then gout=1;sout=0;bout=0;qout=0; shuru0=ai;elsif(sinp=1)then gout=0;

11、sout=1;bout=0;qout=0; shuru0=bi;elsif(binp=1)then gout=0;sout=0;bout=1;qout=0; shuru0=ci;elsif(qinp=1)then gout=0;sout=0;bout=0;qout=1; shuru0=di;end if;end process;end bhv;位选程序封装图如下图所示:图6 位选程序封装图封装图中输入信号ai,bi,ci,di为四路分频后的方波信号,ginp、binp、binp、qinp这四档开关选择输入信号,该程序中复位端rst为高电平时,将ginp、binp、binp、qinp四个开关控制

12、端对应的输出信号gout、sout、bout、qout分别置零,在硬件电路中用四个LED灯的亮灭表示,测量时必须有且仅有一个灯点亮,否则为违规操作,测量数据错误。3.3.2 位选程序仿真该部分程序仿真波形如下图7所示:图7 位选程序仿真图由仿真图中可以看出,输入信号其中qinp为高电平,ginp、binp、binp皆为低电平,则相对应的输出信号qout为高电平,shuru0波形与第4路输入信号di相同。复位信号在前端有一正脉冲,即当为高电平时,所有的输出信号皆为低电平。此后,sinp为高电平而其它3档为低电平时,输出信号sout为高电平,shuru0波形与第2路输入信号bi相同。3.4 时钟程

13、序3.4.1 时钟程序原理该部分程序是为实现得到0.5Hz的系统基准时钟(高低电平各为1秒),用以对待测方波频率的计数测量。由于硬件中系统时钟频率并不能锁定0.5Hz,则需要对输入的时钟频率进行分频,本系统中选择硬件中时钟clk2引脚的8Hz时钟,则需要对其进行16倍的分频。时钟程序代码:library ieee;use ieee.std_logic_1164.all;entity szq isgeneric (v:integer:=8);port(clki:in std_logic; clko:buffer std_logic);end szq;architecture bhv of szq

14、 isbegin process(clki)variable count:integer range 0 to v;beginif(clkievent and clki=1)then count:=count+1; if(count=v)then clko9999 or n=0)then cc=1; q=0; end if; end if; end if; if(clk=0)then q=m; n:=0; cc=0;end if;end process;end bhv;程序封装如下图3-7所示:图10 计数程序封装图封装图中shuru为经过选档后的方波信号,clk为0.5Hz的计数基准时钟信号

15、。输出信号cc为超量程警告,q为计数得到频率数值。计数程序中包含了系统对于测量数据超量程的处理,当计数值超过9999时,cc就会出现高低电平脉冲的持续变换,硬件中锁一LED灯,将显示不断闪烁。此时为超量程,数码管显示值为错误量。3.5.2 计数程序仿真计数程序仿真波形如下图11所示:图11 计数程序仿真图由于仿真所限,此处并未使用0.5Hz时钟信号作为输入时钟信号。图中clk时钟频率为0.2MHz,shuru为频率为100MHz,可以看出,shuru为clk频率的500倍,由于只有当clk为高电平时计数,所以得到计数结果q值为250。同理,若clk频率为0.5Hz,则其高电平持续时间即为1s,

16、所得到的计数结果250极为shuru信号相应频率值,即此时输入方波频率为250Hz。此仿真图中并未显示超过量程现象,此功能将在顶层文件中说明。3.6 BCD码转换3.6.1 BCD码转换原理由于计数程序输出结果为0到10000范围内的整型数据,若想通过模式5锁定引脚,并在四个数码管上显示,则需要首先对其进行BCD码的转换。该部分程序中也包括系统复位功能的实现。程序中分别设置三个常量a,b,c其值分别为1000,100,10。首先将输入整形数据qi除以a,即1000,得到所得数据即为千位数值x1,令qi减去x1乘以1000,极为qi中除去千位后剩余的三位数值,同理继续进行算法,则能得到百位,十位

17、,个位的数值,即将输入的整型数据qi转换成BCD码完成。因为使用模式5,硬件中自带译码功能,直接可用于数码显示。用四个数码管分别表示千位,百位,十位,个位,再乘以相应档位,即可得到频率计的测量数值。BCD转换代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;use ieee.std_logic_arith.all;entity bcd isport(qi:in integer range 0 to 10000; rst:in std_logic; gw,sw,bw,qw:buffer std_lo

18、gic_vector(3 downto 0);end bcd;architecture bhv of bcd isbeginprocess(qi)constant a:integer:=1000;constant b:integer:=100;constant c:integer:=10;variable x1,x2,x3,x4,y,z:integer range 0 to 1000;beginif(rst=1)thenx1:=0;x2:=0;x3:=0;x4:=0;else x1:=qi/a;y:=qi-x1*1000;x2:=y/b;z:=y-x2*100;x3:=z/c;x4:=z-x3

19、*10;end if;qw=conv_std_logic_vector(x1,4);bw=conv_std_logic_vector(x2,4);sw=conv_std_logic_vector(x3,4);gwfb,ao=h0,bo=h1,co=h2,do=h3); u2:wx port map(k1=k1,k2=k2,k3=k3,k4=k4,ai=h0,bi=h1,ci=h2,di=h3, rst=rst,fb0=s0,g1=g1,g2=g2,g3=g3,g4=g4); u3:sz port map(clki=clk,clko=s1); u4:js port map(fb=s0,clk=s

20、1,g5=g5,q=p0); u5:bcd port map(qi=p0,rst=rst,d1=d1,d2=d2,d3=d3,d4=d4); end bhv;分频程序u1:library ieee;use ieee.std_logic_1164.all;entity fp isport(fb1:in std_logic; ao,bo,co,do:buffer std_logic);end fp;architecture bhv of fp isbeginao=fb1;process(fb1)variable nu,nu1,nu2:integer range 0 to 1000:=0;begin

21、if(fb1event and fb1=1)then nu:=nu+1;nu1:=nu1+1;nu2:=nu2+1;if(nu=5)then bo=not bo; nu:=0;end if;if(nu1=50)then co=not co; nu1:=0;end if;if(nu2=500)then do=not do; nu2:=0;end if;end if;end process;end bhv;位选程序u2:library ieee;use ieee.std_logic_1164.all;entity wx isport(ai,bi,ci,di,rst:in std_logic; k1

22、,k2,k3,k4:in std_logic; g1,g2,g3,g4:out std_logic; fb0:out std_logic);end wx;architecture bhv of wx isbegin process(rst,k1,k2,k3,k4,ai,bi,ci,di)beginif(rst=1)then g1=0;g2=0;g3=0;g4=0;fb0=0;elsif(k1=1)then g1=1;g2=0;g3=0;g4=0; fb0=ai;elsif(k2=1)then g1=0;g2=1;g3=0;g4=0; fb0=bi;elsif(k3=1)then g1=0;g2

23、=0;g3=1;g4=0; fb0=ci;elsif(k4=1)then g1=0;g2=0;g3=0;g4=1; fb0=di;end if;end process;end bhv;时钟程序u3:library ieee;use ieee.std_logic_1164.all;entity sz isgeneric (v:integer:=8);port(clki:in std_logic; clko:buffer std_logic);end sz;architecture bhv of sz isbegin process(clki)variable count:integer rang

24、e 0 to v;beginif(clkievent and clki=1)then count:=count+1; if(count=v)then clko9999 or n=0)then g5=1; q=0; end if; end if; end if; if(clk=0)then q=m; n:=0; g5=0;end if;end process;end bhv;BCD转换u5:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;use ieee.std_logic_arith.all;enti

25、ty bcd isport(qi:in integer range 0 to 10000; rst:in std_logic; d1,d2,d3,d4:buffer std_logic_vector(3 downto 0);end bcd;architecture bhv of bcd isbeginprocess(qi)constant a:integer:=1000;constant b:integer:=100;constant c:integer:=10;variable x1,x2,x3,x4,y,z:integer range 0 to 1000;beginif(rst=1)thenx1:=0;x2:=0;x3:=0;x4:=0;else x1:=qi/a;y:=qi-x1*1000;x2:=y/b;z:=y-x2*100;x3:=z/c;x4:=z-x3*10;end if;d1=conv_std_logic_vector(x1,4);d2=conv_std_logic_vector(x2,4);d3=conv_std_logic_vector(x3,4);d4=conv_std_logic_vector(x4,4);end process;end bhv;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1