基于EDAVHDL语言的等精度测频.docx
《基于EDAVHDL语言的等精度测频.docx》由会员分享,可在线阅读,更多相关《基于EDAVHDL语言的等精度测频.docx(7页珍藏版)》请在冰豆网上搜索。
基于EDAVHDL语言的等精度测频
基于EDA-VHDL语言的等精度测频
摘要:
EDA是一门应用技术,频率是电子技术领域内的一个基本参数,同时也是一个非常重要的参数。
电子技术领域离不开频率,一旦离开频率电子技术的发展是不可想象的,就像现在的人离不开电一样。
为了得到性能更好的电子系统,科研人员在不断地研究着频率,CPU就是用频率的高低来评价其性能好坏,速度的高低,可见频率在电子系统中是多么重要.稳定的时钟在高性能电子系统中有着举足轻重的作用,直接决定系统性能的优劣。
随着电子技术的发展,测频系统使用时钟的提高,测频技术有了相当大的发展,但不管是何种测频方法,士1个计数误差始终是限制测频精度进一步提高的一个重要因素。
本设计采用等精度频率设计原理和8051软核做微处理器。
通过分析士1个计数误差的来源得出了一种新的测频方法:
检测被测信号,时基信号的相位,当相位同步时开始计数,相位再次同步时停止计数,通过相位同步来消除计数误差,然后再通过运算得到实际频率的大小。
充分利用FPGA和8051软核简化外围电路及降低系统设计的复杂度。
采用VHDL语言,成功的编写出了设计程序,并在QutusII软件环境中,对编写的VHDL程序进行了仿真,得到了很好的效果。
最,给出了较详细的设计方法和完整的程序设计以及调试结果。
关键词:
EDA、FPGA、全同步、数字频率计、VHDL语言、8051
随着数字电路应用越来越广泛,传统的通用数字集成电路芯片已经很难满足系统功能的要求,而且随着系统复杂程度的不断增加,所需通用集成电路的数量呈爆炸性增长,使得电路板的体积迅速膨胀,系统可靠性难以保证。
此外,现代电子产品的生命周期都很短,一个电路可能要在很短的时间内作改进以满足新的功能要求,对于通用集成电路来说则意味着重新设计和重新布线。
而可编程逻辑器件克服了上述缺点,它把通用集成电路通过编程集成到一块尺寸很小的硅片上,成倍缩小了电路的体积,同时由于走线短,减少了干扰,提高了系统的可靠性,又由于VHDL语言和verilog语言易于掌握与使用,设计相当灵活,极大地缩短了产品的开发周期。
本设计在FPCA技术越来越成熟,应用越来越广泛的情况下,使用成熟的FPGA技术来实现目前还不是很成熟的全同步数字频率计。
此设计具有重要的研究价值。
由于社会发展和科技发展的需要,信息传输和处理的要求的提高,对频率的测量精度也提出了更高的要求,需要更高准确度的时频基准和更精密的测量技术。
而频率测量所能达到的精度,主要取决于作为标准频率源的精度以及所使用的测量设备和测量方法。
目前,国内外使用的测频的方法有很多,有直接测频法、内插法、游标法、时间一电压变化法、事周期同步法、颇率倍增法、颇筹倍增注以及相桥比较法等等。
直接测频的方法较简单,但精度不高。
内插法和游标法都是采用模拟的方法,虽然精度提高了,但是电路设计却很复杂‘时间一电压变化法是利用电容的充放电时间进行测量,由于经过A/D转换,速度较慢,且抗干扰能力较弱。
多周期同步法精度较高的一种。
为了进一步的提高精度,通常采用模拟内插法或游标法与多周期同步法结合使用,虽然精度有了进一步的提高,但始终未解决士1个字的计数误差,而且这些方法设备复杂,不利于推广。
频率误差倍增法可以减小计数器的士1个字的误差,提高测量精度。
但用这种方法来提高测量精度是有限的,因为如要得到2x10-13一招的测量精度,就要把被测频率倍频到=1/2Hz=5000MHz,这无论是对倍频技术,还是对目前的计数器都是很难实现的。
频差倍增一多周期法是一种频差倍增法和差拍法相结合的测量方法。
这种方法是将被测信号和参考信号经经频差倍增使被测信号的相位起伏扩大,在通过混频器获得差拍信号,用电子计数器在低频下进行多周期测量,能在较少的倍增次数和同样
的取样时间情况下,得到比测频法更高的系统分辨率和测量精度。
但是仍然存在着时标不稳而引入的误差和一定的触发误差。
以上只是对现存的几种主要的测频方法的概述,很显然从以上的分析中知道:
不同的测频方法在不同的应用条件下是具有一定的优势的,而在本论文中,我主要在多周期同步法的基础上,采用了全同步的测频方法。
主要是消除了士1个字的对时标信号的计数误差,而且在FPGA/CPLD芯片上实现,具有很大的优势.总之,频率(时间测量技术发展非常快.在频标方面,一方面是追求新的更高稳定度和准确度的新型频标,据报道,实验室中做出频率准确度优于1丁3的频标。
一方面是提供便于工业、科研应用的商品化频标,如小艳钟、铆频标、新型高稳定度晶体振荡器等这些工作多在计量研究与工业部门进行。
大量的工作在改进、创造新的测频原理、方法和仪器,以便以更高的精度、速度,自动进行测量和数据处理,并向多功能、小型化、高性价比方向发展。
在提高测频精度方面,值得特别提出的有全同步取样技术和可校准通用电子计数器技术,它们使测频精度提高到一个新的水平。
本文正是介绍了基于FPGA和8051软核单片机,利用EDA技术开发的等精度频率计。
一、FPGA简介FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
目前以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。
这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。
在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。
一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,而且消耗更多的电能。
但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。
厂商也可能会提供便宜的但是编辑能力差的FPGA。
因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。
另外一种方法是用CPLD(复杂可编程逻辑器件备)。
早在1980年代中期,FPGA已经在PLD设备中扎根。
CPLD和FPGA包括了一些相对大数量的可以编辑逻辑单元。
CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。
CPLD和FPGA的主要区别是他们的系统结构。
CPLD是一个有点限制性的结构。
这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。
这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。
而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。
CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。
一个因此有关的重要区别是很多新的FPGA支持完全的或者部分的系统内重新配置。
允许他们的设计随着系统升级或者动态重新配置而改变。
一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。
二、FPGA的工作原理
FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。
FPGA的基本特点主要有:
1)采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。
2)FPGA可做其它全定制或半定制ASIC电路的中试样片。
3)FPGA内部有丰富的触发器和I/O引脚。
4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。
5FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。
可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。
FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。
用户可以根据不同的配置模式,采用不同的编程方式。
加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。
掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。
FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。
当需要修改FPGA功能时,只需换一片EPROM即可。
这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。
因此,FPGA的使用非常灵活。
FPGA有多种配置模式:
并行主模式为一片FPGA加一片EPROM的方式;主从模式可以支持一片PROM编程多片FPGA;串行模式可以采用串行PROM编程FPGA外设模式可以将FPGA作为微处理器的外设,由微处理器对其编程。
如何实现快速的时序收敛、降低功耗和成本、优化时钟管理并降低FPGA与PCB并行设计的复杂性等问题,一直是采用FPGA的系统设计工程师需要考虑的关键问题。
如今,随着FPGA向更高密度、更大容量、更低功耗和集成更多IP的方向发展,系统设计工程师在从这些优异性能获益的同时,不得不面对由于FPGA前所未有的性能和能力水平而带来的新的设计挑战。
例如,领先FPGA厂商Xilinx最近推出的Virtex-5系列采用65nm工艺,可提供高达33万个逻辑单元、1,200个I/O和大量硬IP块。
超大容量和密度使复杂的布线变得更加不可预测,由此带来更严重的时序收敛问题。
此外,针对不同应用而集成的更多数量的逻辑功能、DSP、嵌入式处理和接口模块,也让时钟管理和电压分配问题变得更加困难。
幸运地是,FPGA厂商、EDA工具供应商正在通力合作解决65nmFPGA独特的设计挑战。
不久以前,Synplicity与Xilinx宣布成立超大容量时序收敛联合工作小组,旨在最大程度帮助地系统设计工程师以更快、更高效的方式应用65nmFPGA器件。
设计软件供应商Magma推出的综合工具BlastFPGA能帮助建立优化的布局,加快时序的收敛。
最近FPGA的配置方式已经多元化!
本系统选用EP2C5TP144C8芯片。
三、等精度测频电路及原理说明
1.多周期同步测频的原理方框图
图2-1多周期同步测频的原理方框图
2.多周期同步测频的工作波形图
D
fx
(CP
T
Nx
fO
NO图2-2多周期同步测频的工作波形图
3.等精度测频的基本工作原理
1、工作原理
图2-1给出了多周期同步测频率的原理方框图,图2-2是对应的工作波形图。
其工作过程是:
单片机预置一定宽度(如1s)的闸门脉冲信号,加至D触发器以形成同步闸门信号T;被测信号频率fx分两路加入,一路加至D触发器作为CP时钟,和预置闸门一起作用,在Q端形成同步闸门[见图2-2中T的波形],并分别加到主门1和主门2上,将主门1、2同时打开;这时,被测频率fx通过主门1进入计数器1,对进入的fx周期数进行计数,得计数值Nx;同时,晶振标准频率fo通过主门2进入计数器,得计数值No,其波形如图2-2所示,由图可得:
NxTx=NoTo
因此:
fx=Nx⨯foNo
2、误差分析
由以上工作过程和波形图可以看出,Nx对被测信号Tx的计数是与闸门同步的,故不存在量化(±1)误差。
这样,用该计数器测频,不管频率高低,其精度是相同的。
这时,误差仅发生在计数器2对fo的计数值No上,因为主门2与fo之间并无同步关系,故仍存在量化误差。
不过,通常fo>>fx,故±1误差相对小得多。
多周期同步计数器测频的±1误
∆±1=,N为T时间内晶振震荡的次数。
NN
3、系统整体框图差为:
图2-3等精度测频的系统总体框图
4、框图解释:
1、波形变换器用来将待测正弦波变换成同频率的方波,以便于后面的数字电路的处理,通常使用比较器或是施密特触发器来完成。
2、等精度测频器即是我们设计的核心单元,主要用来数出待测信号以及CLK_50M在一秒的定时内震荡的次数;里面包括两个32位的寄存器,这两个寄存器共用一组地址、读写、片选、数据总线,CPU可以通过这组总线来访问两个寄存器,从而便于CPU读取并计算出待测信号的频率。
3、CPU用来读取“等精度测频”模块中的两个计数值,再利用这两个计数值推算出待测信号的频率,并获取按键指令以及控制显示设备用来显示结果。
4、按键用来接收用户的输入,每按一个键就会产生一个中断,使CPU转而执行相应的中断服务程序,从而完成相应的工作。
5、显示设备可由led或是12864等简单、便宜的显示设备组成,通过CPU的控制把测得的数据(两个计数其中的值或是被测信号的频率)显示出来。
5、采用Verilog或者VHDL实现等精度测频的模块
等精度测频模块是本实验的核心模块,也是我们实验的主要内容,要求同学们用VHDL或是Verilog语言中的至少一种写出其功能,并用仿真工具进行时序仿真,验证模块的正确性。
有条件的可以采用任一款式的单片机访问该等精度的测频模块,直接使用函数发生器产生的方波作为待测信号,从而验证该模块的正确性。
等精度测频模块是由三个更小的子模块组成的,分别是:
异步秒脉冲模块、同步秒脉冲模块、计数器模块。
等精度测频的整体模块的符号图如下所示:
图2-4等精度测频模块
三个模块作用简介:
1、异步秒脉冲模块:
用来产生接近一秒的正电平,系统正是通过计算这一秒内待测信号的振动次数以及CLK_50M的振动次数,再通过这两个次数算出待测信号的频率的。
之所以说是“异步秒脉冲”,这里的“异步”是相对于待测信号的步调的,也就是说,不与待测信号的上升沿或是下降沿同步,那么就是“异步的”。
2、同步秒脉冲模块:
根据异步秒脉冲模块产生的与待测信号同步的接近一秒的正电平,
这里说的“同步”是相对于待测信号的,也就是说新生成的同步秒脉冲的起始时刻为待测信号的某一个上升沿(或下降沿),结束时刻也是待测信号的某一个上升沿(或下降沿)。
3、计数器模块:
用来数出同步秒脉冲的时间内CLK_50M震动的次数,比如说N1,同时也可以数出同步秒脉冲时间内待测信号的振动次数,比如说N2,那么待测信号的频率将会是:
2/N1×50000000。
N该模块的内部有两个计数器,分别是CNTR1_CLK50M和CNTR2_SigX,其中前者对50M的CLK进行计数,后者对待测信号X进行计数,具体程序见后面附录Counters.V中的内容。
一秒结束后计数的最终结果存放在reg_CLK50M_N和reg_SigX_N中。
该模块有4个以CPU打头的信号线:
CPU_CS,CPU_RD,CPU_Addr和CPU_RD_Data,它们正好和任何一款CPU的片选、读、地址和读数据总线连接起来,用来读取reg_CLK50M_N和reg_SigX_N这两个寄存器中的数据。
当CPU读出这两个寄存器中的数据之后就可以统计简单的计算得到待测信号的频率,并显示之。
具体程序见后面附录Counters.V中的内容。
四、等精度测频实验过程等精度测频实验过程1、在电脑上安装QuartusII或MaxplusII,最好是安装QuartusII。
2、读懂本文所附的参考程序,在QuartusII中为每一个模块建立仿真激励文件,分别给三个子模块仿真,再对顶层模块进行仿真。
*3、将Verilog代码改写为VHDL的代码。
*4、有条件的同学可以使用开发板做成模块,再用单片机访问。
实验程序:
五、实验程序:
modulefrequency(CLK_50M,Sig_X_In,CPU_CS,CPU_RD,CPU_Addr,CPU_RD_Data;inputCLK_50M,Sig_X_In;inputCPU_CS,CPU_RD,CPU_Addr;output[31:
0]CPU_RD_Data;regAsyn_Sec_Pulse,Syn_Sec_Pulse;reg[31:
0]cnt,reg_CPU_RD_Data,reg_CLK50M_N,reg_SigX_N,CNTR1_CLK50M,CNTR2_SigX;initialbeginCNTR1_CLK50M=0;CNTR2_SigX=0;reg_CLK50M_N=0;reg_SigX_N=0;reg_CPU_RD_Data=0;endalways@(posedgeCLK_50M//always中赋值。
if(cnt<20////////这里的160是为了仿真的方便,表示CLK_50M每经历160个上升cnt<=cnt+1;///沿就会使reg_Asyn_Sec_Pulse改变电平,如要真正产生1秒的延时,else///////////必须将160改为50000000,即5M。
begincnt<=0;/////////如果计数器值超过160,则重新计数。
Asyn_Sec_Pulse=~Asyn_Sec_Pulse;//每次重新计数都改变输出电平。
endalways@(posedgeSig_X_In
if(Asyn_Sec_Pulse==1Syn_Sec_Pulse<=1;elseSyn_Sec_Pulse<=0;always@(posedgeCLK_50Mif(!
Syn_Sec_PulseCNTR1_CLK50M<=0;elseCNTR1_CLK50M<=CNTR1_CLK50M+1;always@(posedgeSig_X_Inif(!
Syn_Sec_PulseCNTR2_SigX<=0;elseCNTR2_SigX<=CNTR2_SigX+1;always@(negedgeSyn_Sec_Pulsebeginreg_CLK50M_N<=CNTR1_CLK50M;reg_SigX_N<=CNTR2_SigX;end//////////CPUREADProcess////////////////////////always@(posedgeCLK_50Mif((CPU_CS==1&&(CPU_RD==1if(CPU_Addr==0reg_CPU_RD_Data<=reg_CLK50M_N;elsereg_CPU_RD_Data<=reg_SigX_N;elsereg_CPU_RD_Data<=32'hzzzzzzzz;assignCPU_RD_Data=reg_CPU_RD_Data;endmodule六、实验结果分析仿真结果如图2-7所示:
七、结语通过本系统设计,熟悉了基于VHDL语言的EDA设计。
理解了等精度测频的基本原理。
熟悉了一个系统开发的过程。
同时也发现了自己对已学知识点还有很多的不足。