您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 8位十进制显示数字频率计(带周期)设计报告
EDA期末考试设计报告设计题目:8位十进制显示数字频率计(带周期测量)学校:梧州学院系别:电子信息工程系班别:09电本2班姓名:陈迪学号:200900604215组员:刘芸云王缉俭指导老师:黄玉健一、设计内容:8位十进制显示数字频率计(带周期测量)。二、设计目的与要求:1、设计电路实现测量1~99999999Hz方波信号的频率以及其周期,并以十进制的方式显示。2、要求其数值用七段LED数码管或液晶屏显示。3、在实验系统上硬件测试,验证此设计的功能。4、画出实体图,设计原理图,要求用Protel设计出具体的电路原理图。三、设计原理:8位十进制显示数字频率计(带周期测量)是由8位十进制频率计、8位十进制周期测量器和带锁存功能的64选32数据选择器构成。频率计基准信号采用8Hz的方波信号,而周期测量采用基准信号为50MHz的方波信号。其中,频率计和周期测量由相同的32位数据锁存器和8位十进制计数器及不同的测频控制电路构成。为使电路设计更加简单快捷,且方便阅读与理解,本电路使采用模块化的设计思想,先由VHDL源程序对各个模块进行独立编写、测试,然后封装,再用原理图方式进行连接、整合与波形和硬件仿真。例如将用CLOCK5、CLOCK2输入标准频率,CLOCK0输入被测频,用数码管显示频率和周期。Protel设计原理图:11223344DDCCBBAADig0Dig0Dig0Dig0Dig0Dig0Dig0Dig064选32数据选择器测频控制(频率)8位十进制计数器32位数据锁存器A32位数据锁存器B测频控制(周期)8位十进制计数器FCLKFINSENPCLK选通信号锁存信号8Hz标准信号50MHz标准信号测试信号32位数据32位数据32位数据32位数据32位数据锁存信号锁存信号清零信号清零信号使能信号使能信号选通灯锁存灯7段数码管显示8位十进制频率计(带测周期)09电本2本陈迪刘芸云王缉俭1、频率测量的基本原理:根据频率的定义,若某一信号在T时间内重复变化N次,则可知该信号的频率为:f=N/T对此可采用数字逻辑电路中的门电路来实现,如图:在与门端加入被测信号,另一端加宽度为T1的控制信号(称闸门信号),输出端仅能在T1时间内有波形的出现,然后送入计数器计数,得N*T2=T1所以f=N/T1。进一步分析可知,多周期测量可以减小误差。因此,电路设计时我们采用基准信号的8个周期为一个T1。如图CNT-EN信号在T1时间结束的同时输出一个作用于计数器锁存信号load,在下一个T1来临前输出一个清零信号RST使得计数器复位,为下一次测量做好准备。电路的基准信号为8Hz,由方程可知f=N/(8*(1/8))=N,从而计数器的数值就是被测信号的频率。2、测量周期的基本原理:如图所示为计数器测量信号周期的原理框图。它是由上图的标准信号和输入信号位置对调而构成的。可以看出,被测信号经过放大后,形成闸门信号,周期为T2。标准频率的周期为T1,在闸门时间内,标准频率通过闸门形计数脉冲,送至计数器计数,进过译码显示为N。所以T2=N*T1=N/f1。同理,多周期测量也可减小误差,但是由于被测信号为测频控制信号,当被测信号频率较低时,测量需要较长时间,因此我们的电路只采用被测信号的2倍周期进行测量。为使能测量更高的频率,我们采用了50MHz的信号为计数信号。电路同样设置了锁存和清零的输出信号,同时为防止高频率时锁存和清零过快,电路在闸门时间结束后设置了较长的过渡时间。由方式T=N/(2*50M)=N/100000000,所以数码管显示的最高位位权为0.1依次类推为0.01一直到小数点后8位。当信号小于1Hz和大于100MHz时都超出量程。3、8位十进制计数器的构成:用VHDL语言设计带进位的1位十进制计数器,然后封装如图,再用8个1位计数器和与门连接成8位的十进制计数器。四、利用VHDL语言来实现各个结构模块:1.带进位的1位10进制计数器COUNTER.VHD带进位的一位十进制计数器LIBRARYIEEE;--带进位的一位十进制计数器USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;--允许用户对操作符重新定义ENTITYCOUNTERISPORT(CLK,RST,EN:INSTD_LOGIC;--clk时钟频率,rst清零,en使能端DOUT:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--4位输出到7段数码管COUT:OUTSTD_LOGIC--进位信号);ENDCOUNTER;ARCHITECTUREoneOFCOUNTERISBEGINPROCESS(CLK,RST,EN)--时钟,清零,使能为敏感信号VARIABLEQ:STD_LOGIC_VECTOR(3DOWNTO0);--定义变量Q为4位BEGINIFRST='1'THENQ:=(OTHERS='0');--如果rst为高电平,变量Q清零ELSIFCLK'EVENTANDCLK='1'THEN--否则,若clk为上升沿,即上升沿触发IFEN='1'THENIFQ9THENQ:=Q+1;--使能端高电平有效,当Q小于9时,自加1ELSEQ:=(OTHERS='0');--否则清零ENDIF;ENDIF;ENDIF;IFQ=1001THENCOUT='1';--当Q为9时输出进位信号1ELSECOUT='0';ENDIF;--否则输出0DOUT=Q;--把变量信号输出ENDPROCESS;ENDone;2.32位锁存器REG32B.VHDLIBRARYIEEE;--32位锁存器USEIEEE.STD_LOGIC_1164.ALL;ENTITYREG32BISPORT(LK:INSTD_LOGIC;--锁存信号DIN:INSTD_LOGIC_VECTOR(31DOWNTO0);--计数信号输入DOUT:OUTSTD_LOGIC_VECTOR(31DOWNTO0));--计数信号输出并锁存ENDREG32B;ARCHITECTUREoneOFREG32BISBEGINPROCESS(LK,DIN)BEGINIFLK'EVENTANDLK='1'THENDOUT=DIN;--上沿边触发锁存ENDIF;ENDPROCESS;ENDone;3.基准频率为8HZ的测频控制电路FTCTRL.VHDLIBRARYIEEE;--频率为8HZ的测频控制电路,用于频率计USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFTCTRLISPORT(CLKK:INSTD_LOGIC;--8HzCNT_EN:OUTSTD_LOGIC;--计数器时钟使能RST_CNT:OUTSTD_LOGIC;--计数器清零Load:OUTSTD_LOGIC);--输出锁存信号ENDFTCTRL;ARCHITECTUREoneOFFTCTRLISSIGNALM:STD_LOGIC;SIGNALC:STD_LOGIC_VECTOR(3DOWNTO0);--计数信号BEGINK1:PROCESS(CLKK,C)--16分频BEGINIFRISING_EDGE(CLKK)THENIF(C=1111)THENC=0000;ELSEC=C+1;ENDIF;--计数为15是清零IF(C=0001)THENM=NOTM;ELSIF(C=1001)THENM=NOTM;--由1开始跳变,变到9时跳变ENDIF;ENDIF;ENDPROCESS;CNT_EN=M;--输出16分频后的波形Load=NOTM;--输出锁存信号F2:PROCESS(C,M)--产生计数器清零信号BEGINIF(C=1101)ANDM='0'THENRST_CNT='1';ELSERST_CNT='0';ENDIF;--计数为13时为1,否则为0ENDPROCESS;ENDone;4.基准频率为50MHZ的测频控制电路FTCTRL2.VHDLIBRARYIEEE;--频率为50MHZ的测频控制电路,USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFTCTRL2ISPORT(CLKK2:INSTD_LOGIC;--50MHzCNT_EN2:OUTSTD_LOGIC;--计数器时钟使能RST_CNT2:OUTSTD_LOGIC;--计数器清零Load2:OUTSTD_LOGIC);--输出锁存信号ENDFTCTRL2;ARCHITECTUREoneOFFTCTRL2ISSIGNALM:STD_LOGIC;SIGNALC:STD_LOGIC_VECTOR(3DOWNTO0);--计数信号BEGINK1:PROCESS(CLKK2,C)--分频BEGINIFRISING_EDGE(CLKK2)THENIF(C=1111)THENC=0000;ELSEC=C+1;ENDIF;--清零IF(C=0001)THENM=NOTM;ELSIF(C=0011)THENM=NOTM;--由1开始跳变?ENDIF;ENDIF;ENDPROCESS;CNT_EN2=M;--输出分频后的波形Load2=NOTM;--锁存信号F2:PROCESS(C,M,CLKK2)--产生计数器清零信号BEGINIFC=1010AND(M='0')ANDCLKK2='0'THENRST_CNT2='1';ELSERST_CNT2='0';ENDIF;--计数为0时为1,否则为0ENDPROCESS;ENDone;5.带锁存的2选1数据选择器MUX2.VHDlibraryieee;useieee.std_logic_1164.all;entitymux2is--64位输入的2选1数据选择器port(L1,L2:OUTSTD_LOGIC;--L1锁存指示灯,L2信号选通灯S,EN:instd_logic;--选择,锁存AIN,BIN:INSTD_LOGIC_VECTOR(31DOWNTO0);--输入通道ADOUT3:outSTD_LOGIC_VECTOR(31DOWNTO0)--数据输出);endentitymux2;architectureoneofmux2isSIGNALM:STD_LOGIC_VECTOR(31DOWNTO0);--寄存beginprocess(AIN,BIN,S,EN)beginIFEN='0'THEN--非0锁存ifS='1'thenM=AIN;elseM=BIN;--选通endif;ENDIF;endprocess;DOUT3=M;L1=EN;L2=S;endarchitectureone;五、利用原理图来完成各个模块的链接与功能的实现:1.8位十进制计数器功能的实现:先编译COUNTER.VHD生成原理图文件,如下图:,再用元件库中的与门与其链接,然后加上输入输出端口,从而完成电路。具体链接如下:电路完成编译后,继续生产如下原理图文件,为下一阶段工作做好准备。2.8位频率计功能的实现:先编译REG32B.VHD和FTCTRL.VHD,分别生成原理图文件,如下图:和。再与上面的8位十进制计数器原理图文件与端口进行链接,完成计数器功能电路。具体链接如下:同时,电路完成编译后,继续生产如下原理图文件,为下一阶段工作做好准备。3.周期测量功能的实现:先编译FTCTRL2.VHD生成原理图文件,如下图:,再用已经编译生成的计数器和锁存器原理图链接,完成周期测量功能电路。具体链接如下。电路完成编译后,也生产如下原理图文件,为下一阶段工作做好准备。3.顶层文件用原理图表示实现测频测周功能,设计如下:编译数据选择器MUX2.VHD生成原理图文件,如图:然后与已经生成的测频和测周的原理图文件进行连接,生成带有锁存和选通功能,可显示频率和周期的频率计。设计如下:六.编译仿真、下载:1、波形仿真:设计好程序后便保存进
本文标题:8位十进制显示数字频率计(带周期)设计报告
链接地址:https://www.777doc.com/doc-3442237 .html