实验二 频率计文档格式.docx
- 文档编号:16448248
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:39
- 大小:2.09MB
实验二 频率计文档格式.docx
《实验二 频率计文档格式.docx》由会员分享,可在线阅读,更多相关《实验二 频率计文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
因此利用DDS芯片或FPGA进行设计,可以简化设计流程、提高设计效率。
随着集成电路工艺水平的飞速发展,DDS技术已在工程中得到了广泛应用。
图1是DDS的基本原理图。
在每个fclk到来时,相位累加器将上一时钟周期的累加结果和频率增量Δθ(频率控制字)进行累加,累加结果的高位作为正/余弦查表(LUT)的地址,输出对应地址上的波形数据sin(θ(n))或cos(θ(n)),由外部数模转换器DAC针对所生成的数字信号重构波形,经低通滤波后输出平滑的模拟信号波形。
DDS的输出频率为:
fout=Δθfclk/2Bθ(n)
(1)
频率分辨率为:
Δf=fclk/2Bθ(n)
(2)
传统基于FPGA的DDS设计方法是利用硬件描述语言VHDL或Verilog来设计相位累加器、LUT(数据查表)以及控制逻辑。
此方式程序代码量较大、设计效率偏低且使用较多FPGA资源。
基于Xilinx公司系列FPGAIPCORE的DDS设计方法,直接从CoreGenerator中调用DDSIPCORE即可实现DDS核心功能,无需编写内部代码,设计简单方便。
4.2.FPGAIPCORE
CoreGenerator是Xilinx公司系列FPGA集成开发环境ISE的子设计工具,其将原有重复使用的设计思路或方法模块化、集成化、标准化后进行封装IPCORE,供以后设计直接使用。
CoreGenerator中的所有IPCORE都是Xilinx以及第三方合作伙伴提供并经过验证的,其中有些复杂的IPCORE需要另行付费才能使用,绝大部分简单IP只要有集成开发环境ISE使用授权就可以使用。
为保护知识产权,所有IP都不公开内部代码,只提供外部接口定义和操作技术文档。
4.3.XilinxDDS核
图2是启动ISECoreGenerator调用的DDSIPCORE界面。
在设置选项中DDSClockRate(DDS时钟)、FrequencyResolution(频率分辨率)、输出数据宽度要设定固定值;
OutputFrequency(输出频率)是可编程的,只需设置初始值。
CoreGenerator会根据DDS时钟和频率分辨率自动配置累加器数据宽度和数据表深度。
图3为DDSIPCORE模块外部接口定义。
模块定义了输入端口(DATA)和输出端口(SINE、COSINE)、地址端口(A)、时钟使能端口(CE)、RDY和RFD握手信号(可选)、SCLR(同步清零端,可选)、CHANNEL(输出通道指示,用于多通道DDS)。
图2ISEDDSIPCORE使用界面
图4为单通道DDS时序图。
模块在CE为‘0’(无效)、WE为‘1’时,分别将相位增量(频率控制字)和初始相位(PHASEOFFSET)读入,在CE有效(CE为‘1’)后的一个时钟周期内输出DDS数据,同时RDY有效。
4.3.1频率调节
通过修改DDS的控制字即可实现输出频率的调节,本电路设计的频率输出范围为300~600Hz,DDS时钟fclk为10MHz,由外部有源50MHz晶振提供,经FPGA内部5分频得到,DDS相位累加器宽度B_(n)为28bits。
根据式
(1),可计算出相应的频率控制字范围为8053110~16106110,由DSP将控制字发送给FPGA实现频率的调节。
据式
(2)可知,本设计的频率分辨率为0.04Hz。
4.3.2相位调节
由于本例中IPCORE的密封性,不能实现对直接累加寄存器D2的操作,通常通过改变累加寄存器的状态来实现相位调节的方法不适合本设计。
考虑到DDS时钟fclk也是影响相位的因素,本设计采用“吞时钟”方法来实现对信号相位的调节。
FPGA中实现“吞时钟”调相的原理如图5所示。
用DDS数据输出最高位SINE(7)采用边沿触发方式触发DSP中断INT0,分频时钟Cclk触发DSP中断INT1。
DSP在INT0相邻两次中断时间内,对Cclk进行计数得到一个波形周期内计数值N360,此数值对应相位为360°
。
0~360°
之间的任意相位θ对应的计数值Nθ可以由此得到。
当调整相位时,DSP将Nθ写至FPGA中定义的预置减法计数器,计数器开始计数,当计数器输出Qn~Q0不全为零时,与门A1输出为‘0’,DDS停止运行;
当计数输出Qn~Q0全为零时,计数器停止计数,等待下一次预置值,与门A1输出fclk=Cclk,DDS继续运行,此时波形相位已延迟了θ。
本设计相位分辨率为0.02°
。
4.3.3幅度调节
输出波形的重构与幅度调节是通过双通道DAC芯片TLC7528实现的,原理图如图6所示。
DAC采用直通模式(使能CS信号和写WR信号已经接地),通道A的输出作为通道B的参考电压来控制通道B的输出幅度。
通道A、B根据通道选择信号select分时使用总线DB,其VHDL语言描述为:
DB<
=Sinewhen(select=%1%)else(others=>
Amp),(Amp为通道A输出幅度值)。
通道A的参考电压为+5V,电压调节分辨率为5/255&
0.02V,即通道B波形幅度控制精度为0.02V。
4.4.直接测频方法
常用的直接测频方法主要有测频法和测周期法两种。
测频法就是在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:
fx=Nx/Tw。
测周期法需要有标准信号的频率fs,在待测信号的一个周期Tx内,记录标准频率的周期数Ns,则被测信号的频率为:
fx=fs/Ns。
这两种方法的计数值会产生±
1个字误差,并且测试精度与计数器中记录的数值Nx或Ns有关。
为了保证测试精度,一般对于低频信号采用测周期法;
对于高频信号采用测频法。
本实验采用的是测频法。
首先给出闸门开启信号(预置闸门上升沿),此时计数器并不开始计数,而是等到被测信号的上升沿到来时,计数器才真正开始计数。
然后预置闸门关闭信号(下降沿)到时,计数器并不立即停止计数,而是等到被测信号的上升沿到来时才结束计数,完成一次测量过程。
可以看出,实际闸门时间τ与预置闸门时间τ并不严格相等,但差值不超过被测信号的一个周期
设在一次实际闸门时间τ中计数器对被测信号的计数值为Nx,对标准信号的计数值为Ns。
标准信号的频率为fs,则被测信号的频率为
(1)
由式
(1)可知,若忽略标频fs的误差,则等精度测频可能产生的相对误差为
(2)
其中fxe为被测信号频率的准确值。
在测量中,由于fx计数的起停时间都是由该信号的上升测触发的,在闸门时间τ内对fx的计数Nx无误差(τ=NxTx);
对fs的计数Ns最多相差一个数的误差,即|ΔNs|≤1,其测量频率为
(3)
将式
(1)和(3)代入式
(2),并整理得:
δ=|ΔNs|/Ns≤1/Ns=1/(τ·
fs)
由上式可以看出,测量频率的相对误差与被测信号频率的大小无关,仅与闸门时间和标准信号频率有关,即实现了整个测试频段的等精度测量。
闸门时间越长,标准频率越高,测频的相对误差就越小。
标准频率可由稳定度好、精度高的高频率晶体振荡器产生,在保证测量精度不变的前提下,提高标准信号频率,可使闸门时间缩短,即提高测试速度。
为了减少运算,本实验将闸门时间设置为1s,那么所测频率Fx=Nx,即只要在1s内对所测信号的周期进行计数即可.
4.5实验步骤举例
1)点击WINDOWS桌面上的ISE图标,双击打开。
2)如果第一次使用会出现一个启动说明,可取消。
然后点击左上角的标题栏,点击File->NewProject,输入工程名称freq。
3)选择对应开发板的上FPGA的器件,封装,速度等级。
4)新建好工程后,在Project选项中选择AddSource,添加top.v、freq.v、data_process1.v、data_process2.v、test_wave.v和2个IP核gen_dds.xco及freq_chufaqi_2.xco。
工程主要包括4个模块:
生成测试信号模块test_wave、计算最大值和最小值模块data_process1、波形转化模块data_process2以及频率计计算并译码显示模块freq。
系统管脚定义
inputclk,
inputreset,
inputswitch,
output[6:
0]segdat,
output[3:
0]sl,
outputdp
Test_wave模块:
生成三角波和利用DDS生成正弦波,位数为12bit(可自行设置);
利用系统提供的IP核DDS生成gen_dds.xco,在输入时钟信号clk,复位信号reset与控制选择信号switch的控制下生成正弦波与三角波;
信号输出为12位数据data_out。
Freq模块:
生成闸门信号1s,对输入波形的频率做计数计算,并译码显示。
在输入时钟信号clk,复位信号reset的控制下,对输入信号clk_test进行计数,生成计数信号en,生成闸门信号1s---second,在闸门信号内对输入波形的频率计数进行处理,产生计数结果,并生成输出信号en_out与数码管显示控制信号[3:
0]sl,与数码管7段分段数据控制信号[6:
0]segdat。
inputclk_test,
outputen_out,
output[6:
0]segdat
注意:
置低有效!
Data_process1模块:
计算输入波形的最大值和最小值;
在输入时钟信号clk,复位信号reset,输入使能信号enable的控制下,对输入信号[11:
0]data_in进行计数,在当前闸门周期,产生输入波形的最大值[11:
0]data_max_out和最小值[11:
0]data_min_out作为输出信号供给data_process2模块使用;
inputenable,
input[11:
0]data_in,
outputreg[11:
0]data_max_out,
0]data_min_out
Data_process2模块:
0]data_max,
0]data_min,
outputtest_clk
将输入波形的数据做处理,转化为脉冲波的形式以便计数;
0]data_in根据输入数据[11:
0]data_max和[11:
0]data_min产生输出信号test_clk供给Freq模块使用;
5)利用系统提供的IP核DIVIDER生成gen_dds.xco和freq_chufaqi_2.xco,
6)添加完文件我们可以从原文件窗口看到被添加的文件,如下图所示。
7)进行综合后可得整个工程的电路模块连接图。
4.6实验仿真
为了更快地仿真,将闸门信号设为设为0.01s,输入波形正弦波其频率为1000hz,则输出频率为10hz。
4.6.1Test_wave模块
生成三角波和利用DDS生成正弦波,位数为12bit
Data_process1模块(计算最大值和最小值)
将模块U3的信号添加到波形窗口,然后让仿真时间达到20ms以上,如上图所示,当enable=‘1’时,对输入数据data_in进行比较处理,寻找最大值和最小值;
当enable=‘0’且en=‘1’时,将最大值传递给data_max_out,将最小值传递给data_min_out,可得最大值为4094,最小值为2.
4.6.2data_process2(生成测试脉冲信号test_clk)
最大值data_max=4094,最小值data_min=2,则data_average=data_max+data_min)/2,data_average=2048。
当enable=‘0’时,当data_in>
=data_average,en=‘1’;
否则,en=‘0’。
从而,将输入波形转化为脉冲波(方波)的形式,以便计数。
4.6.3freq模块(计算频率并译码显示)
当second=‘0’时且en=‘1’时,fosc_flash信号开始进行计数+1。
因为闸门信号我们在仿真时设置为0.01s,输入波形的频率为1000hz,所以得到的理论值应该是10hz。
如上图所示,fosc_flash计数到10则停止计数,说明结果是正确的。
然后当second=‘1’时,将fosc_flash信号传递给fosc信号。
接着,通过一个扫描信号count1[11:
10]不断将fosc信号的值传递给disp_dat以做译码,并显示在4位数码管上。
由上图可得,最终译码的结果是正确的。
4.7创建约束
1)添加top.ucf文件到工程中,其部分管脚约束如下所示:
NET"
clk"
LOC=B8;
#MCLK100m/50m/25m
#NET"
LOC=M6;
#UCLK
TNM_NET="
;
//?
?
TIMESPECTS_clk=PERIOD"
20nsHIGH50%;
reset"
LOC=P11;
#SW0
switch"
LOC=L3;
#SW1//?
sl[3]"
LOC=K14;
#AN3
sl[2]"
LOC=M13;
#AN2
sl[1]"
LOC=J12;
#AN1
sl[0]"
LOC=F12;
#AN0
dp"
LOC=N13;
#DP
segdat[0]"
LOC=M12;
#CG
segdat[1]"
LOC=L13;
#CF
segdat[2]"
LOC=P12;
#CE
segdat(3)"
LOC=N11;
#CD
segdat[4]"
LOC=N14;
#CC
segdat[5]"
LOC=H12;
#CB
segdat[6]"
LOC=L14;
#CA
#PlanAheadgeneratedIOconstraints
IOSTANDARD=LVCMOS33;
segdat[3]"
2)点击top.vhd顶层文件,直接双击process窗口里的generateprogrammingfile,生成top.bit下载文件
4.8下载实验及结果
1)通过Adept软件把设计的bit文件下载到目标器件中。
2)下载成功后,将SW0和SW1都拨在LOW的位置,就可以在开发板的数码管上看到显示“1000”。
注意,在下载到板子上之前,将闸门信号改为1s。
五、实验内容与步骤
1.学习及验证实验项目:
按照实验指导书4.5节所示步骤,建立工程项目,生成DDS及除法器核,进行时序仿真,验证所设计功能,然后进行编译,正确生成所需下载.bit类型文件。
下载配置文件到实验板BASYS2上,观察验证实验现象。
2.设计实验项目
✧功能要求:
基本要求
1)使用DigilentBasys开发板可输出2KHZ正弦波信号(仿真),
2)输出正弦波信号的同时,可输出同频方波信号,并用示波器验证。
3)可对该信号进行计数,并在DigilentBasys开发板上显示频率计数结果(精确到Hz)。
发挥部分
1)可通过拨码或按键输入指定所生成输出信号的频率;
2)增加输出波形的路数(各路之间可手动设置同步关系);
3)实现输出信号的DA转换(附加必要外围电路);
4)增加输出波形的种类(如三角波、锯齿波等)。
5)幅度可调;
6)输出信号类型、频率、幅度的手动设置输入控制;
7)可测量外部输入到DigilentBasys开发板允许的电压信号的频率(注意校验信号幅度峰值<
3.3V与注意共地与连接关系!
),并在DigilentBasys开发板上显示频率计数结果。
8)利用DigilentBasys开发板VGA输出接口实现波形发生器与频率计用户界面。
9)增加输入计数信号波形的路数;
10)提高所设计实现的波形发生器与频率计的量程与精度;
11)用户自定义波形的输入与产生
12)其他功能与性能。
✧设计步骤与要求:
1)简要说明所实现系统的基本原理。
2)在XilinxISE13.1软件中,编写输入所设计的源程序文件。
3)对源程序进行编译及仿真分析(注意合理设置,以便能够在验证逻辑的基础上尽快得出仿真结果)。
4)输入管脚约束文件,对设计项目进行编译与逻辑综合,生成下载所需.bit类型文件。
5)在Basys2实验板上下载所生成的.bit文件,观察验证所设计的电路功能。
附录:
生成DDS核流程
(1)点击“project-NewSource”,输入要生成的核的名称gen_dds。
(2)点击“next”,找到DDS核
(3)点击next并点击finish,出现DDSCompiler的参数编辑界面
选择50MHz时钟;
通道数为1(多通道用途;
用法?
)
参数选择选择为系统参数(?
?
SpuriousFreeDynamicRange=70dB(?
)决定输出位宽;
频率分辨率取0.004Hz(?
好像0.4Hz所得结果不行?
)决定相位位宽;
这两个系统参数配合选择确定系统数据位宽!
(如何配合确定?
(4)设置好相应参数,时钟为50m,输出数据的位数为12位,点击next
(5)对相移和offset做设置,并输出正弦波,点击next
(6)可设置生成DDS的类型和输出指示信号,用户可自行设置。
点击next
(7)设置生成波形的频率为1KHz(即0.001MHz),点击next
top.v
moduletop(
inpu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验二 频率计 实验