EDA课程设计数字频率计.docx
- 文档编号:24173563
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:18
- 大小:213.81KB
EDA课程设计数字频率计.docx
《EDA课程设计数字频率计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计数字频率计.docx(18页珍藏版)》请在冰豆网上搜索。
EDA课程设计数字频率计
前言
在电子技术高度发展的今天,各种电子产品层出不穷,而频率作为设计的最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程的自动化等优点。
数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器,它的基本功能是测量正弦信号、方波信号、尖脉冲信号以及其它各种单位时间内变化的物理量。
当今国内外厂家生产的数字频率计在功能和性能方面都比较优良,而且还在不断发展中,但其结构比较复杂,价位也比较高,在测量精准度要求比较低的测量场合,使用这些数字频率计就不够经济合算。
我所设计的这款数字频率计能够可靠实现频率显示功能,原理及结构也比较简单本次所做的课程设计就是一个数字频率计,能测量1HZ~9999HZ的矩形波信号,并正确地显示所测信号的频率值。
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。
随着现场可编程门阵列FPGA的广泛应用,以EDA工具作为开发手段,运用VHDL等硬件描述语言语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。
采用FPGA现场可编程门阵列为控制核心,通过硬件描述语言VHDL编程,在Quartus‖仿真平台上编译、仿真、调试,并下载到FPGA芯片上,通过严格的测试后,能够较准确地测量各种常用的波形信号的频率,而且还能对其他多种物理量进行测量。
1.总体设计方案
1.1总体设计方案
数字频率计基本原理是用计数器来计算1S内输入信号周期的个数。
如图1所示是4位十进制数字频率计的系统方框原理图,当系统正常工作时,脉冲发生器提供的1Hz的输入信号,经过测频控制信号发生器进行信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码显示管上可以显示的十进制结果。
图1总体设计方案
2.单元模块设计
2.1十进制计数器设计
2.1.1十进制计数器原件cnt10设计
十进制计数器即可采用Quartus‖的宏元件74160,也可用VHDL语言设计,其源程序如下。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt10_vIS
PORT(CLK,RST,EN:
INSTD_LOGIC;
CQ:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDcnt10_v;
ARCHITECTUREbehavOFcnt10_vIS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLECQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');--计数器异步复位
ELSIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿
IFEN='1'THEN--检测是否允许计数(同步使能)
IFCQI<9THENCQI:
=CQI+1;--允许计数,检测是否小于9
ELSECQI:
=(OTHERS=>'0');--大于9,计数值清零
ENDIF;
ENDIF;
ENDIF;
IFCQI=9THENCOUT<='1';--计数等于9,输出进位信号
ELSECOUT<='0';
ENDIF;
CQ<=CQI;--将计数值向端口输出
ENDPROCESS;
ENDbehav;
在源程序中:
COUT:
计数器进位输出
CQ[3..0]:
计数器的状态输出
CLK:
时钟输入端
RST:
复位控制输入端,当RST=1时,CQ[3..0]=0
EN:
使能控制输入端,当EN=1时,计数器计数;当EN=0
时,计数器保持不工作状态。
图2十进制计数器仿真输出波形
在项目编译仿真成功后将设计的十进制计数器电路设置成可调用的元件cnt10_v.bsf,用于以下四位十进制计数器的顶层设计。
图3十进制计数器元件符号
2.1.2位十进制计数器的顶层设计
顶层电路原理图如图4所示。
文件名4cnt10.bdf。
该顶层设计可以用原理图输入的方法完成。
在QuartusII中,新建一个原理图编辑窗口,从当前的工程目录中调出4片十进制计数器元件cnt_v,并按4所示的4位十进制计数器的顶层原理图完成电路接线。
完成4位十进制计数器的顶层原理图编辑以后,即可进行仿真测试和波形分析,其仿真输出波形如图5所示,当CLR=0,EN=1时其计数值在0~9999之间的变化,COUT为计数进位输入信号,在实际应用中可作为超量程报警信号,因此仿真结果真确无误。
此后,可将以上设计的4位十进制计数器设置成可调用的元件4cnt10.bsf以备高层设计中使用,其元件符号如图6所示。
图4十进制计数器的顶层原理图
图5四位十进制计数器的仿真图
图6元件封装符号图
2.2闸门控制模块EDA设计
根据以上所述,频率计电路工作时先要产生一个计数允许信号(即闸门信号),闸门信号的宽度为单位时间如1s,在闸门信号有效时间内,对被测信号计数,即为信号的频率,该频率计电路的精度取决于闸门信号T,该模块课分为2个子模块,一个是定是信号模块,一个是控制信号发生器模块。
2.2.1定时信号模块Timer
根据设计要求,对于4位十进制计数器来说,当闸门信号的最大采样时间为1s时,其计数值在0~9999之间,则最大频率为9999Hz,此即位频率计电路工作的1档;当闸门信号的最大采样时间为0.1s(100ms)时,其计数值在0~9999之间,把它转化为频率则为最小频率为10Hz,最大频率为9999Hz,此即为频率计电路工作的2档;当闸门信号的最大采样时间为0.01s(10ms)时,其计数值在0~9999之间,把它转换为频率则为最小频率为100Hz,最大频率为999900Hz或999.9KHz,此即为频率计电路工作的3档;当闸门信号的最大采样时间为0.001s(1ms)时,其技术值在0~9999之间,把它转换为频率则为最小频率为1000Hz,最大频率为9999000Hz或9.99MHz,此即为频率计电路工作的4档。
本设计中假设输入的系统基准时钟为1KHz,为产生4种不同的闸门信号T,可由一组3级模10计数器对1KHz信号进行分频,为控制信号发生器提供4种不同的频率信号,通过数据选择器41MUX利用量程选择开关控制闸门信号T的基准时钟,原理如图7所示。
图7中,cnt10_v为已设计好的十进制计数器元件,可直接把该模块作为底层元件使用,41MUX为4选1数据选择器,其4个输入为1KHz信号进行分频后的4中不同的频率信号L4(1s)、L3(100ms)、L2(10ms)、L1(1ms)。
A、B为量程选择开关,其4种不同编码状态00、01、10、11通过4选1数据选择器分别选择输出4种不同的频率信号到Bclk,Blck将作为控制信号发生器模块的控制时钟脉冲。
A、B的4种不同编码状态通过2-4译码器74139M产生4个量程状态显示信号p0(1档)、p1(2档)、p3(3档)、p4(4档)。
图8为其编译仿真后的输出时序波形图,生成的元件符号图如图9所示。
图7定时信号模块原理图
图8仿真输出波形
图9定时信号模块
2.2.2控制信号发生器模块T_con
控制信号发生器原理图如图10,文件名T_con.bdf。
该模块主要根据输入的控制时钟脉冲,产生计数允许信号EN,该信号的高电平是持续时间即计数允许时间输入的控制时钟脉冲周期;产生清零信号CLR,在计数使能前对计数器清零;产生存储信号XEN,在计数后,利用上升沿把最新的频率测量值保存在显示寄存器中。
控制信号发生器用74161构成4分频计数器,用一个与非门,一个或非门和一个异或门实现3种译码状态,以便产生清零信号CLR,使能信号EN和存储信号XEN。
其仿真输出波形图如图11,编译仿真真确无误后,生成元件符号图12所示。
图10信号发生器模块原理图
图11仿真输出波形
图12控制信号发生器模块
2.3译码显示模块
译码显示模块有显示寄存器和译码扫描显示电路组成。
2.3.1显示寄存器设计
显示寄存器是在计数后,利用触发器的上升沿把最新的频率测量值保存起来,这样在计数过程中可不必一直看着数码管显示器,显示器将最终的频率读数定期进行更新,其输出将作为译码扫描显示电路的输入。
16位显示寄存器的VHDL源程序如下。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYreg_16IS
PORT(Load:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(15DOWNTO0);
DOUT:
OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDreg_16;
ARCHITECTUREbehavOFreg_16IS
BEGIN
PROCESS(Load,DIN)
BEGIN
IFLoad'EVENTANDLoad='1'THEN--时钟到来时,锁存输入数据
DOUT<=DIN;
ENDIF;
ENDPROCESS;
ENDbehav;
在源程序中:
Load:
锁存信号,上升沿触发
DIN[15..0]:
寄存器输入
DOUT[15..0]:
寄存器输出
图1316位显示寄存器元件符号
2.3.2译码扫描显示电路
数字逻辑系统中常用的显示器件是数码管,半导体数码管的外形和等效电路如图14所示,其每一个字段都是一个发光二极管。
在FPGA验证设计结果时,两种方法均可采用。
N个LED数码管以静态方式显示时,需用到8×N条引脚端资源是有限的。
因此对于多个LED数码管显示,可以采用扫描方式来实现LED数码管动态显示。
实现方法是将频率计的4个数码管的相应字段并联起来,由于FPGA的输入信号a、b、c、d、e、f、g、h(小数点)直接驱动相应字段,由片选信号S1、S2、S3、S4依次点亮各个LED数码管,循环进行显示,其原理图如图15。
图14数码管的外形和等效电路
图15数码管动态扫描显示原理图
①七段数码显示译码器的VHDL设计
该模块将显示寄存器的4位BCD数字符译成七段码,根据表1,其VHDL源程序如下。
表1共阴极LED数码管显示译码真值
BCD码输入
输出电平
输出字形
BCD码输出
输出电平
输出字形
DCBA
gfedcba
0101
1101101
5
0000
0111111
0
0110
1111101
6
0001
0000110
1
0111
0000111
7
0010
1011011
2
1000
1111111
8
0011
1001111
3
1001
1101111
9
0100
1100110
4
七段数码显示译码器的VHDL源程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDECL7SIS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDDECL7S;
ARCHITECTUREoneOFDECL7SIS
BEGIN
PROCESS(A)
BEGIN
CASEAIS
WHEN"0000"=>LED7S<="0111111";--0(LED为共阴级)
WHEN"0001"=>LED7S<="0000110";--1
WHEN"0010"=>LED7S<="1011011";--2
WHEN"0011"=>LED7S<="1001111";--3
WHEN"0100"=>LED7S<="1100110";--4
WHEN"0101"=>LED7S<="1101101";--5
WHEN"0110"=>LED7S<="1111101";--6
WHEN"0111"=>LED7S<="0000111";--7
WHEN"1000"=>LED7S<="1111111";--8
WHEN"1001"=>LED7S<="1101111";--9
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
ENDone;
源程序中:
A[3..0]:
0~9的BCD码
LED7S:
译码后的7段数据信号
图16段数码显示译码器元件符号
②动态扫描显示的VHDL源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYdynamicIS
port(clk,reset:
instd_logic;
din1:
instd_logic_vector(6downto0);--译码后的数据信号1
din2:
instd_logic_vector(6downto0);--译码后的数据信号2
din3:
instd_logic_vector(6downto0);--译码后饿数据信号3
din4:
instd_logic_vector(6downto0);--译码后饿数据信号4
shift:
outstd_logic_vector(3downto0);--位选信号
bus4:
outstd_logic_vector(6downto0));--数据信号
enddynamic;
architectureoneofdynamicis
signalscan_clk:
std_logic_vector(1downto0);
begin
p1:
process(clk,scan_clk,reset)--分频进程
variablescan:
std_logic_vector(17downto0);
begin
ifreset='1'then
scan:
="000000000000000000";
scan_clk<="00";
elsifclk'eventandclk='1'then
scan:
=scan+1;
endif;
scan_clk<=scan(1downto0);
endprocessp1;
p2:
process(scan_clk,din1,din2,din3,din4)--扫描进程
begin
casescan_clkis
when"00"=>bus4<=din1;shift<="0001";
when"01"=>bus4<=din2;shift<="0010";
when"10"=>bus4<=din3;shift<="0100";
when"11"=>bus4<=din4;shift<="1000";
whenothers=>bus4<="0000000";shift<="0000";
endcase;
endprocessp2;
endone;
源程序中:
clk:
扫描时钟
reset:
复位信号,当reset=1时对位选信号复位
shift:
4个数码管的位选信号,高电平有效
bus4:
进位选输出的7段数据信号
din1、din2、din3、din4:
输入的7段数据信号
图17动态扫描显示模块元件符号
2.3.3译码显示模块的顶层电路设计
在QuartusII中,按照图18所示的译码显示模块的原理图完成底层电路设计和仿真,文件名DEC_D.bdf。
图20是编译仿真后的输出时序波形图和生成的元件符号。
分析图19,当FX=1234时,在时钟脉CLK作用下,首先送出最低位测量值4,此时数码管的位选信号CH[3..0]=
(1)H,数码管的译码电平输出为(66)H。
第2个为3,此时数码管的位选信号CH[3..0]=
(2)H,数码管的译码电平输出4(F)H。
第3个为2,此时数码管的位选信号CH[3..0]=(4)H,数码管的译码电平输出为(5B)H。
第4个为1,此时数码管的位选信号CH[3..0]=(8)H,数码管的译码电平输出为(06)H。
图18译码显示模块的原理图
图19仿真输出波形
图20译码显示模块DEC_D
3.软件测试
3.1测试的环境
QuartusII是Altera公司推出各种可编程逻辑器件产品,具有完全集成化的易学、易用的可视化环境,还有具有工业标准EDA工具接口,并且可以运行在多种操作平台上。
使QuartusII提供了丰富的逻辑功能库、模块库以及参数化的兆功能供设计者使用。
它还具有开放核的特点,允许设计人员添加自己的宏功能模块。
充分利用这些逻辑功能模块,可大大减少设计工作量。
QuartusII由设计输入、项目编译、项目检验和器件编程等四部分组成。
设计输入主要有文本编辑器、图形编辑器、符号编辑器、波形编辑器以及第三方EDA工具生成的设计网表文件输入等,输入方式不同,生成的设计文件也不同。
编译设计项目主要是根据要求设计参数和编译策略,如选定其间、锁定引脚等等,然后对项目进行网表提取、逻辑综合、器件适配,产生报告文件,供分析仿真及编程用。
项目检验方法包过功能仿真、模拟仿真和定时分析,编程验证是将仿真后的目标文件编入所选定的Altera可编程逻辑器件中,然后加入实际激励信号进行测试,检查是否达到要求。
3.2调试和器件编程
将各个模块的源文件程序代码输入文本文件,编译运行项目成功后,把各个模块放在一起形成顶层设计文件,对项目进行逻辑综合,然后将项目的设计结果加载到Altera器件中;成功编译以后,进入到模拟仿真时段,设置好完成时间和网络间距,在列出输入输出信号等等,进行波形编辑在模拟器运行成功;启动定时分析工具,对传播延迟、时序电路性能、建立和保持时间等进行分析顺利后,就可以开始器件编程了。
通过利用ByteBlaster电缆与微机并行口相连,接通EL实验箱电源,打开QuartusII编程器窗口,将器件编程文件调出,确保与电路板顺序相同。
设置完成后选择Program按键,对器件链进行编程。
管脚定义如表2示
表2管脚定义表
4.设计总结
经过将近半个月的努力、艰苦奋斗以及在同学和老师的帮助下最终完成了这次课程设计的题目——数字频率计。
在完成课程设计的过程中我遇到了不少的麻烦,通过向学得好的同学及向老师请教,许多问题迎刃而解并加深了对于FPGA的理解与应用。
在这次课程设计中,从了解器件的原理到总体方案的确立到模块化的实现,以及对cortesⅡ软件的使用,经过这一套的流程操作,我发现自己学到了许多东西,同时也发现有很多的知识不懂,自己所懂得的知识在实际中也很难运用起来,所以,自己以后还是应该加强动手能力。
我觉得做课程设计同时也是对课本中知识的巩固和加强,由于课本上的知识多,而且内容有限,所以在这次课程设计的过程中。
我们了解了FPGA的强大功能,并且对其在电路中的使用有了更多地认识。
平时看课本时老是有问题弄不懂,做完课程设计,那些问就迎刃而解了。
这次课程设计不仅使我学到了知识也锻炼了我严谨认真的学习态度,知识和技能都得到了提高,,也让我明白了,不懂就要问,更加重要的是加深了大家之间的友情,同学之间变得更加团结了。
5.参考文献
专著、论文、学位论文、报告
【1】.金西.VHDL与复杂数字系统设计【M】.西安:
西安电子科技大学出版社.2003.6
【2】.杨恒.FPGA/VHDL快速工程实践入门与提高【M】.北京:
北京航空航天大学出版社.2003.4
【3】.刘昌华.数字逻辑EDA设计与实践:
MAX+PlusII与QuartrsII双剑合壁【M】.北京:
国防工业出版社.2002.4
【4】.付家才.EDA原理与应用【M】.天津:
化学工业出版社.2001.8
【5】.蒋尚坤.FPGA原理、设计与应用【M】.天津:
天津大学出版社.1999.5
【6】.邓建国.VerilogHDL硬件描述语言【M】.北京:
国防工业出版社.1998.7
【7】.胡振华.VHDL与FPGA设计【M】.北京:
中国铁道出版社.2003.4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 数字频率计
![提示](https://static.bdocx.com/images/bang_tan.gif)