数字频率计实验报告.docx
《数字频率计实验报告.docx》由会员分享,可在线阅读,更多相关《数字频率计实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
数字频率计实验报告
2011年电子技术实验
实验报告
频
率
计
一、概述
数字频率计是使用领域非常广泛的测量仪器,在计算机、通讯设备、音频视频等科研生产领域不可缺少。
通过十进制数字显示被测信号频率,具有测量迅速,精度高,显示直观等诸多优点。
本实验中,我们使用VHDL开发FPGA的一般流程,采用频率计开发的基本原理和相应的测量方案,在FPGA实验开发板进行数字频率计的设计和实现。
数字频率计是数字电路中的一个典型应用,随着复杂可编程逻辑器件(CPLD)的广泛应用,以EDA工具作为开发手段,运用VHDL语言,将使整个系统大大简化,提高整体的性能和可靠性。
本次的频率计设计主要是顶层设计,通过各个模块综合使用,学习常用的数字系统设计方法。
采用VDHL编程设计实现的数字频率计,除被测信号的整形部分、键输入部分以外,其余全部在一片FPGA芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。
在不更改硬件电路的基础上,对系统进行各种改进还可以进一步提高系统的性能。
该数字频率计具有高速、精确、可靠、抗干扰性强和现场可编程等优点。
本实验,我采用硬件描述语言VHDL,在软件开发平台ISE上完成,该设计的频率计能准确的测量频率在10Hz到100MHz之间的信号。
使用ModelSim仿真软件对VHDL程序做了仿真,并完成了综合布局布线,最终下载到FPGA上。
VHDL主要用于描述数字系统的结构、行为、功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式,描述风格以及句法十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称为设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(又称为可视部分,即端口)和内部(又称为不可视部分),即设计实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其它的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
应用VHDL进行工程设计的优点是多方面的,具体如下:
1、与其它的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了它成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
就目前流行的EDA工具和VHDL综合器而言,将基于抽象的行为描述风格的VHDL程序综合成为具体的FPGA和CPLD等目标器件的网表文件已不成问题,只是在综合与优化效率上略有差异。
2、VHDL最初是作为一种仿真标准格式出现的,因此VHDL既是一种硬件电路描述和设计语言,也是一种标准的网表格式,还是一种仿真语言。
其丰富的仿真语句和库函数,使得在任何大系统的设计早期(即尚未完成),就能用于查
验设计系统的功能可行性,随时可对设计进行仿真模拟。
即在远离门级的高层次上进行模拟,使设计者对整个工程设计的结构和功能的可行性做出决策。
3、VHDL语句的行为描述能力和程序结构决定了它具有支持大规模设计的分解和已有设计的再利用功能,符合市场所需求的,大规模系统高效、高速的完成必须由多人甚至多个开发组共同并行工作才能实现的特点。
VHDL中设计实体的概念、程序包的概念、设计库的概念为设计的分解和并行工作提供了有力的支持。
4、对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动地把VHDL描述设计转变成为门级网表。
这种方式突破了门级电路设计的瓶颈,极大地减少了电路设计的时间和可能发生的错误,降低了开发成本。
应用EDA工具的逻辑优化功能,可以自动地把一个综合后的设计变成一个更高效、更高速的电路系统。
反过来,设计者还可以容易地从综合和优化后的电路获得设计信息,返回去更新修改VHDL设计描述,使之更为完善。
5、VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。
正因为VHDL硬件描述与具体的工艺技术和硬件结构无关,VHDL设计程序的硬件实现目标器件有广阔的选择范围,其中包括各系列的CPLD、FPGA及各种门阵列实现目标。
6、由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需要改变端口类属参量或函数,就能轻易地改变设计的规模和结构。
现场可编程门阵列(FPGA)器件是八十年代中期出现的新产品,它的应用大大地方便了IC的设计,因而随着数字技术日益广泛的应用,以FPGA为代表的ASIC器件得到了迅速的普及和发展,器件集成度和速度都在高速增长。
传统的电路设计过程是:
先画原理图、把原理图绘制成印制电路板图、再制版、安装、调试。
有了FPGA,我们只需要在计算机上绘出原理图,再运行相应的软件,就可把所设计的逻辑电路在FPGA中实现。
所有步骤均可自动完成。
电子设计工程师自己设计专用集成电路成为了一件很容易的事情。
FPGA作为专用集成电路(ASIC)概念上的一个新型范畴和门类,以其高度灵活的用户现场编程方式,现场定义高容量数字单片系统的能力,能够重复定义、反复改写的新颖功能,为复杂数字系统设计、研制以及产品开发提供了有效的技术手段。
电子应用设计工程师应用FPGA技术不仅可避免通常ASIC单片系统设计周期长,前期投资风险大的弱点,而且克服了过去板级通用数字电路应用设计的落后,繁琐和不可靠性。
目前FPGA的两个重要发展与突破是,大多数厂商在其高端器件上都提供了
片上的处理器(如CPU、DSP)等硬核(HardCore)或固化核(FixedCore)。
比如Xilinx的VirtexIIPro芯片可以提供PowerPC,而Altera的Stratix、Excalibur等系列芯片可以提供Nios、DSP和Arm等模块。
在FPGA上集成微处理器,使SOPC设计更加便利与强大。
另一个发展是在不同器件商推出的高端芯片上大都集成了高速串行收发器,一般能够达到3Gb/s以上的数据处理能力,在Xilinx、Altera、Lattice都有相应的器件型号提供该功能。
这些新功能使FPGA的数据吞吐能力大幅度增强。
对于目标器件为FPGA和CPLD的HDL设计,其工程设计的基本流程如图2-1所示。
现具体说明如下。
图2-1EDA设计流程
1、文本编辑
用任何文本编辑器都可以进行,通常VHDL文件保存为vhd文件,Verilog文件保存为v文件。
2、使用编译工具编译源文件
HDL的编译器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的编译器。
3、逻辑综合
将源文件调入逻辑综合软件进行综合。
综合的目的是在于将设计的源文件由语言转换为实际的电路。
但是此时还没有在芯片中形成真正的电路。
这一步的最终目的是生成门电路级的网表(Netlist)。
4、布局、布线
将第3步生成的网表文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到CPLD/FPGA内。
这一步的目的是生成用于下载(编程Programming)的编程文件。
在这一步,将用到第3步生成的网表,并根据CPLD/FPGA厂商的器件容量,结构等进行布局、布线。
这就好像在设计PCB时的布局布线一样。
先将各个设计中的门根据网表的内容和器件的结构放在器件的特定部位。
然后,在根据网表中提供的各门的连接,把各个门的输入输出连接起来。
最后,生成一个供编程的文件。
这一步同时还会加一些时序信息(Timing)到你的设计项目中去,以便于你做后仿真。
5、后仿真
利用在布局布线中获得的精确参数,用仿真软件验证电路的时序。
(也叫布局布线仿真或时序仿真)。
这一步主要是为了确定你的设计在经过布局布线之后,是不是还满足你的设计要求。
6、编程,下载
如果前几步都没有发生错误,并且符合设计要求,这一步就可以将由适配器等产生的配置或下载文件通过编程器或下载电缆下载到目标芯片中。
7、硬件测试
硬件测试的目的是为了在更真实的环境中检验HDL设计的运行情况,特别是对于HDL程序设计上不是十分规范,语义上含有一定歧义的程序。
本次试验我们采用XILINXEDA教学实验开发板(XILINXEDAEXPERIMENTALBOARD)
设计综述:
本学生EDA实验开发板为本校电子工程学院电子实验中心为完善学生EDA实验种类,提高学生在可编程逻辑方面的实践能力而研发的FPGA实验板。
本实验板在设计研发的过程中,充分吸收了实验中心几位资深教师长期在一线课堂积累的经验,相对于众多世面上销售的较高成本,繁多功能的开发板而言,本设计则是更有针对性的在FPGA外围功能上侧重基础方面应用。
完整的功能使得本开发板既能够很好的满足教师实验课程的内容,低廉的价格又能够成为学生学习可编程逻辑起步以及基础应用最合适自学平台。
功能特点:
实验板主要功能特色:
●实验板核心FPGA芯片选用XILINX公司当前低端主流芯片XC3S200A,该系列在之前的3E系列上更加强了用户I\O的电平兼容能力以及支持热拔插。
非常适合用于实验连接,可以有效的防止在学生试验中由于错误连接导致的芯片损坏。
选用的FTG256的BGA封装不仅能够在最低成本的前提下保证信号传输的稳定性,同时也能完全兼容同系列更多逻辑门的XC3S400A(40万门)芯片的替换,为之后实验板高级实验扩展提供了准备。
●电源设计选用了两级级联的方式,以扩展更广的输入电压范围(7.5~15V)兼容以及更安全的系统供电方式。
●配置方式选用最常规的JTAG接口+主动配置模式,最大程度简化设计风险以及调试难度,便于初学者入门学习。
●实验板外围功能包括:
8个按钮开关、2个8位拨动开关、8位共阳数码管、16X16LED点阵、8个LED显示、一个蜂鸣器、温度传感器、AD电压转器、RS232接口转换器以及外置48MHz有源晶振。
同时,为了软核在SOPC嵌入式方面的扩展,板上还增加设计了NORFLASH存储器。
●为了便于外接逻辑分析仪以及扩展使用,实验板上增设了33个外扩I\O口,以满足扩展功能需要。
●实验板外围配套了一个128X64的点阵液晶显示器,通过实验板的预留接口连接。
以完善实验板综合功能。
●系统设置了复位按钮开关以及悬挂开关,可以实现系统不断电情况下的软复位以及睡眠状态。
二、设计要求
设计一个数字频率计,其指标要求如下:
1、被测输入信号:
方波
2、测试频率范围为:
10Hz~100MHz
3、量程分为三档:
第一档:
闸门时间为1S时,最大读数为999.999KHz
第二档:
闸门时间为0.1S时,最大读数为9999.99KHz
第三档:
闸门时间为0.01S时,最大读数为99999.9KHz。
4、显示工作方式:
a、用六位BCD七段数码管显示读数。
b、采用记忆显示方法
c、实现对高位无意义零的消隐。
三、系统工作原理
在电子技术领域内,频率是一个最基本的参数,频率与其它许多电参量的测量方案、测量结果都有十分密切的关系。
因此,频率的测量就显得更为重要.而且,目前在电子测量中,频率的测量精确度是最高的。
所谓“频率”,就是周期性信号在单位时间(1秒)内变化的次数。
若在一定的时间间隔T内计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:
f=N/T公式1
其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率f。
时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等于1s。
闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通,被测脉冲信号通过闸门送到计数译码显示电路。
秒信号结束时闸门关闭,计数器停止计数。
由于计数器计得的脉冲数N是在1秒时间内的累计数,所以被测频率f=NHz。
比如,时标信号的重复周期为1S,则加到闸门的门控信号作用时间T即闸门时间亦准确地等于1s,即闸门开通时间为1s,这时若计得10000个数,则按式一,被测频率xf=10.000Hz,若计数器上单位显示为“kHz”,则显示10.000kHz,即小数点定位在第三位。
不难设想,若闸门时间改为T=0.1s,则计数值为1000,这个数乘以10就等于1s的计数值,即100010100000xf=?
=Hz。
实际上,当改变闸门时间T时,显示器上的小数点也随着往右移一位(自动定位),即显示10.000kHz。
下面我们来分析计数器测频的测量误差。
从公式一可知,上述测频方法的测量误差,一方面决定于闸门时间T准不准,另一方面决定于计数器计得的数准不准。
根据误差合成方法,从公式可得:
公式二公式二中第一项NN?
是数字化仪器所特有的误差,而第二项TT?
是闸门时间的相对误差,这项误差决定于石英振荡器所提供的标准频率的准确度。
现分述如下。
±1误差
在测频时,主门的开启时刻与计数脉冲之间的时间关系是不相关的,所以它们在时间轴上的相对位置是随机的。
这样,在相同的主门开启时间内,计数器所计得的数却不一定相同,当主门开启时间T接近甚至等于被测信号周期xT的整数倍N倍时,此项误差为最大,下图画出的就是这种情况。
xxfNTfNT?
?
?
=-
若主门开启时刻为0T,而第1个计数脉冲出现在xT,图4-2(a)中示出了xT>0T>0的情况(0TTTx-=?
),这时计数器计得N个数(图中N=6);现在再来看图4-2(b)情况,即T?
趋近于0,这就有两种可能的计数结果:
若第1个计数脉冲和第7个计数脉冲都能通过主门,则可计得N+1=7个数;也可能这两个脉冲都没有能进入主门,则只能计得N-1=5个数。
由此可知,最大的计数误差为1±=?
N个数。
所以考虑到公式一),可写成x
TfNNN11±=±=?
公式三式中T为闸门时间,xf为被测频率。
从公式三可知,不管计数值N多少,其最大误差总是±1个计数单位,故称“±1个字误差”,简称“±1误差”。
而且xf一定时,增大闸门时间T,可减小±1误差对测频误差的影响。
当T选定后,xf越低,则由±1误差产生的测频误差越大。
闸门时间T准不准,主要决定于由石英振荡器提供的标准频率的准确度,若石英振荡器的频率为cf,分频系数为k,则
c
cfkkTT=
=而2
ccffkT?
-
=?
所以c
cffTT?
-=?
(4-4)可见,闸门时间的准确度在数值上等于标准频率的准确度,式中负号表示由cf?
引起的闸门时间的误差为T?
-。
通常,对标准频率准确度
c
cff?
的要求是根据所要求的测频准确度提出来的,
例如,当测量方案的最小计数单位为1Hz,而xf=610Hz,在T=1s时的测量准确度为6101-?
±(只考虑1±误差),为了使标准频率误差不对测量结果表明产生影响,石英振荡器的输出频率准确度
c
cff?
应优于7101-?
即比1±误差引起的测频误差小一个量级。
综上所述,可得如下结论:
1、计数器直接测频的误差主要有两项:
即1±误差和标准频率误差。
一般,总误差可采用分项误差绝对值合成,即
)1(ccxxxffTfff?
+±=?
公式五可把公式五画成下图所示的曲线,即
xxff?
与T,xf以及ccff?
的关系曲线。
误差曲线从图可知,xf一定时,闸门时间T选得越长,测量准确度就越高。
而当T选定后,xf越高,则由于1±误差对测量结果的影响越小,测量准确度就越高。
但是,随着1±误差的减小,标准频率误差ccff?
将对测量结果产生影响,并以
ccff?
(图中以9105-?
为例)为极限,即测量准确度不可能优于9105-?
。
2、测量低频时,由于1±误差产生的测频误差大得惊人,例如,xf为10Hz,T=1s,则由1±误差引起的测频误差可达到10%,所以,测量低频时不宜采用直接测频方法。
四、单元电路的划分
通过对实验要求的分析,我们可以将数字频率计的单元电路划分为一下部分。
1、分频器
分频器的功能是提供标准闸门时间控制信号以精确控制计数器的开闭。
由于闸门时间只有1S,0.1S,0.01S三档,由FPGA提供的标准时间信号源是48MHz,为此,我们采用计数器实现计数循环。
比如需要产生1hz的信号,我们使用循环计数,当数值达到24000000时,clk_1hz的信号取反,对计数回复到1,如此循环。
再如产生10hz的信号,计数数值就需达到2400000,产生100hz的信号,计数数值需达到240000,产生1khz的信号,计数数值达到240000。
这样就可以实现分频器的功能。
分频器模块:
分频器源程序:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityFdivis
Port(clk:
inSTD_LOGIC;
clk1:
outSTD_LOGIC;
clk10:
outSTD_LOGIC;
clk100:
outSTD_LOGIC;
clk1k:
outSTD_LOGIC);endFdiv;
architectureBehavioralofFdivis
signalclk1_temp:
std_logic;
signalclk10_temp:
std_logic;
signalclk100_temp:
std_logic;
signalclk1k_temp:
std_logic;
signalcnt1:
integerrange1to24000000:
=1;signalcnt10:
integerrange1to2400000:
=1;signalcnt100:
integerrange1to240000:
=1;signalcnt1k:
integerrange1to24000:
=1;begin
p1:
process(clk)
begin
ifrising_edge(clk)then
ifcnt1=24000000then
cnt1<=1;
clk1_temp<=notclk1_temp;
else
cnt1<=cnt1+1;
endif;
endif;
clk1<=clk1_temp;
endprocessp1;
p2:
process(clk)
begin
ifrising_edge(clk)then
ifcnt10=2400000then
cnt10<=1;
clk10_temp<=notclk10_temp;
else
cnt10<=cnt10+1;
endif;
endif;
clk10<=clk10_temp;
endprocessp2;
p3:
process(clk)
begin
ifrising_edge(clk)then
ifcnt100=240000then
cnt100<=1;
clk100_temp<=notclk100_temp;
else
cnt100<=cnt100+1;
endif;
endif;
clk100<=clk100_temp;
endprocessp3;
p4:
process(clk)
begin
ifrising_edge(clk)then
ifcnt1k=24000then
cnt1k<=1;
clk1k_temp<=notclk1k_temp;
else
cnt1k<=cnt1k+1;
endif;
endif;
clk1k<=clk1k_temp;
endprocessp4;
endBehavioral;
其时序关系如图所示:
2、闸门选择器
通过拨码开关选择参考信号的输出,拨码开关sele进行参考信号的选择。
当sele输入为“00”时,将1hz的频率输出,当为“01”时,将10hz的频率输出,当为“11”时,将100hz的频率输出。
同时在输出参考频率时,输出小
数点点亮选择信号。
其原理图:
源程序:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityselis
Port(sele:
inSTD_LOGIC_VECTOR(1downto0);
f1:
inSTD_LOGIC;
f10:
inSTD_LOGIC;
f100:
inSTD_LOGIC;
fref:
outSTD_LOGIC;
dp1:
outSTD_LOGIC;
dp2:
outSTD_LOGIC;
dp3:
outSTD_LOGIC
);
endsel;
architectureBehavioralofselis
signalfref_temp:
std_logic;
begin
process(sele,f1,f10,f100)
begin
caseseleis
when"00"=>fref_temp<=f1;dp1<='0';dp2<='1';dp3<='1';
when"01"=>fref_temp<=f10;dp1<='1';dp2<='0';dp3<='1';
when"11"=>fref_temp<=f100;dp1<='1';dp2<='1';dp3<='0';
whenothers=>fref_temp<='0';dp1<='1';dp2<='1';dp3<='1';
endcase;
fref<=fref_temp;
endprocess;
endBehavioral;
3、控制器
控制器模块是整个数字频率计时序的关键,只有有恰当的时序关系,才能得到正确的结果。
输入信号是有闸门选择