《eda课程设计数字频率计》由会员分享,可在线阅读,更多相关《eda课程设计数字频率计(17页珍藏版)》请在金锄头文库上搜索。
1、课程设计说明书1 绪论EDA技术是以大规模可编程逻辑器件为设计载体,以硬件语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件设计的电子系统到硬件系统的设计,最终形成集成电子系统或专用集成芯片的一门新技术。其设计的灵活性使得EDA技术得以快速发展和广泛应用。本文以Quartus软件为设计平台,采用VHDL语言实现数字频率计的整体设计。1.1 EDA简介EDA是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机
2、辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL(Hardware Description language)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的VHDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述
3、与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。 适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合器中已指定的目标器件系列。 硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电
4、路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL。1.2 基于EDA工具的FPGA/CPLD开发流程 1.文本/原理图编辑与修改。首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本(ABEL-HDL程序)或图形方式(原理图或状态图)表达出来2.编译。完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。 3.综合。这是将软件设计与硬件的可实现性挂钩,是将软件转化为
5、硬件电路的关键步骤。综合后HDL综合器可生成ENIF、XNF或VHDL等格式的网表文件,他们从门级开始描述了最基本的门电路结构。 4.行为仿真和功能仿真。利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。(该步骤可以略去) 5.适配。利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。该操作完成后,EDA软件将产生针对此项设计的适配报告和JED下载文件等多项结果。适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。 6.功能仿真和时序仿真。该不妨真实接近真实器件运
6、行的方针,仿真过程已将器件的硬件特性考虑进去了,因此仿真精度要高的多。(该步骤也可略去) 7.下载。如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片FPGA或CPLD中。 8.硬件仿真与测试。2 数字频率计的设计分析2.1 数字频率计的工作原理数码管显示 计数器锁存器译码驱动电路预测信号测频控制信号发生器图2-1 数字频率计原理框图众所周知,频率信号易于传输,抗干扰性强,可以获得较好的测量精度。因此,频率检测是电子测量领域最基本的测量之一。频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒
7、内待测信号的脉冲个数,即闸门时间为1s。闸门时间可以根据需要取值,大于或小于1s都可以。闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。一般取1s作为闸门时间。数字频率计的关键组成部分包括测频控制信号发生器、计数器、锁存器、译码驱动电路和显示电路,其原理框图如图2-1所示。2.2 设计分析2.2.1 测频控制信号发生器测频控制信号发生器产生测量频率的控制时序,是设计频率计的关键。这里控制信号CLK取为1Hz,2分频后就是一个脉宽为1s的使能信号EN,用来作为计数闸门信号。测频控制信号发生器封装图如图
8、2-2所示。图2-2 测频控制信号发生器封装图测频控制信号发生器程序源代码如下:library ieee;use ieee.std_logic_1164.all;Entity shineng isPort(clk,rst:in std_logic;En:buffer std_logic);End shineng;Architecture bhv of shineng isbeginprocess(clk,rst)beginif rst=1 thenen=0;elsif clkevent and clk=1 thenen=not en;end if;end process;End bhv;图2-
9、3 测频控制信号发生器测频控制信号发生器仿真图如图2-3所示。以上为测频控制信号发生器仿真图,仿真图中clk为基准信号,rst为复位端。复位端有效时,en输出为零。en为使能端,当clk为1hz输入信号时,输出en为0.5hz的信号即1s高电平信号。2.2.2 计数器计数器以使能信号EN作为时钟,当EN为高电平时开始计数;在EN的下降沿,产生一个锁存信号,用来锁存数据,锁存数据后,还要在下次EN上升沿到来之前产生清零信号,为下次计数做准备,清零信号是EN为低电平时有效。在清零信号到来时,异步清零;EN为高电平时再次开始计数。本文设计的计数器计数最大值是9999999。由于计数器和锁存器共同由测
10、频器控制模块控制因此可以将计数器和锁存器看成一个环节,因此计数器和锁存器的仿真图如图2-5所示。2.2.3 锁存器当锁存信号即EN下降沿到来时,将计数器的计数值锁存,这样可由外部的七段译码器译码并在数码管上显示。设置锁存器的好处是使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存器的位数应跟计数器完全一样,均是28位。计数器模块和锁存器模块封装图如图2-4所示。图2-4 计数器模块和锁存器模块封装图计数器模块和锁存器模块程序源代码如下所示。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;e
11、ntity count isport(rst,en,input:in std_logic;number1,number2,number3,number4,number5,number6,number7:out std_logic_vector(3 downto 0);ov:buffer std_logic);end count;architecture bhv of count isbeginprocess(input,rst,en)variable temp1,temp2,temp3,temp4,temp5,temp6,temp7:std_logic_vector(3 downto 0);b
12、eginif rst=1 then temp1:=0000;temp2:=0000;temp3:=0000;temp4:=0000;temp5:=0000;temp6:=0000;temp7:=0000;ov=0;elsif en=1 thenif inputevent and input=1 thentemp1:=temp1+1;if temp1=1010 thentemp1:=0000;temp2:=temp2+1;if temp2=1010 thentemp2:=0000;temp3:=temp3+1;if temp3=1010 thentemp3:=0000;temp4:=temp4+
13、1;if temp4=1010 thentemp4:=0000;temp5:=temp5+1;if temp5=1010 thentemp5:=0000;temp6:=temp6+1;if temp6=1010 thentemp6:=0000;temp7:=temp7+1;if temp7=1010 thentemp7:=0000;ov=1;end if;end if;end if;end if;end if;end if;end if;end if;else temp1:=0000;temp2:=0000;temp3:=0000;temp4:=0000;temp5:=0000;temp6:=
14、0000;temp7:=0000;ov=0;end if;number1=temp1;number2=temp2;number3=temp3;number4=temp4;number5=temp5;number6=temp6;number7=temp7;end process;end bhv;图2-5 计数器模块和锁存器模块仿真图以上为计数器模块和锁存器模块仿真图。仿真图中rst为复位端,当复位端有效时,计数值清零。Input为输入待测信号,en为使能端,当en=1且input上升沿时开始计数,en=0时清零计数值,进程结束前锁存数据。2.2.4 译码驱动和数码管显示电路本次课程设计采用实验箱
15、模式5,模式5自带译码驱动电路,译码输出接数码管显示,即每一个数码管的输入分别接到译码驱动电路的输出。本次课程设计采用4个共阴极数码管来显示待测频率的数值,其显示范围从09999999。数码管显示电路封装图如图2-6所示。图2-6 数码管显示电路封装图以下是数码管显示的程序源代码: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show isport(en,rst:in std_logic;number1,number2,number3,number4,number5,number6,number7:std_logic_vector(3 downto 0);show