实验一DDS系统实验报告Word文档格式.docx
《实验一DDS系统实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验一DDS系统实验报告Word文档格式.docx(14页珍藏版)》请在冰点文库上搜索。
来表示为:
(1-4)
且
为整数。
与(1-3)式联立,可得:
(1-5)
显然,信号发生器的输出可描述为:
(1-6)
其中,指前一个周期的相位值clk,同样可以得出:
(1-7)
由上面的推导可以看出,只要对相位的量化值进行简单的累加运算,就可以得到正弦信号的当前相位值,而用于累加的相位增量量化值
决定了信号的输出频率
,并呈现简单的线性关系。
直接数字合成器DDS就是根据上述原理而设计的数字控制频率合成器。
图4-1所示是一个基本的DDS结构,主要由相位累加器、相位调制器、正弦ROM查找表和D/A构成。
途中的相位累加器、相位调制器、正弦ROM查找表是DDS结构中的数字部分,由于具有数控频率合成的功能,又合成为NCO(NumericallyControlledOscillators)。
图4-1基本DDS结构
相位累加器是整个DDS的核心,在这里完成上文原理推导中的相位累计功能。
相位累加器的输入是相位增量
,又由于
与输出频率
是简单的线性关系:
,故相位累加器的输入又可称为频率字输入,事实上,当系统基准时钟
是
时,
就等于
频率输入在图4-1中经过了一组同步寄存器,使得当频率字改变时不会干扰相位累加器的正常工作。
相位调制器接受相位累加器的相位输出,在这里加上一个相位偏移值,主要用于信号的相位调制,如PSK(相移键控)等。
在不使用时可以去掉该部分,或者加一个固定的相位字输入。
相位字输入也需要用同步寄存器保持同步。
需要注意的是,相位字输入的数据宽度M与频率字输入N往往是不相等的,M<
N。
四、实验步骤:
本实验的操作步骤如下:
1.点击桌面上的Matlab图标,进入Matlab主界面,并将工作目录设为Matlab安装目录下的work文件夹,如图1-1所示:
图1-1Matlab启动界面
2.点击菜单栏中的File->
New->
Model,新建一个模型,在Matlab命令窗口中输入simulink命令,调出simulink工具栏,如图1-2所示:
图1-2新建模型
3、执行File->
Save保存文件,将其命名为DDS。
4、在AlteraDSPBuilderBlockset中的IO&
Bus下选择Input模块将其拖至模型文件中或者右击Input模块选择AddtoDDS,并按如图1-3所示,设置参数。
单击模块下面的文本,将其重命名为“PhaseWords”
图1-3Input模块设置
5、重复步骤4,参数设置同样如图3所示。
单击模块下面的文本,将其重命名为“FreqWords”。
6、在AlteraDSPBuilderBlockset中的IO&
Bus下选择Output模块将其拖至模型文件中或者右击该模块并选择AddtoDDS。
设置BusType为SignedInteger,设置[numberofbits].[]为10,其它参数设置保持不变。
7、在AlteraDSPBuilderBlockset中的Arithmetic下选择ParallelAdderSubtractor模块,添加到DDS文件中。
双击模型文件中的ParallelAdderSubtractor模块,打开模块参数对话框。
在Parameters区域中将NumberofInputs改为2,保持其他的参数不变,点击【OK】按钮确认。
单击模块下面的文本,将其重命名为“FreqAdder24bit”。
8、重复步骤7,在模型中添加一个并行加法器,但总线宽度改为10bit,将其重命名为“PhaseAdder10bit”,作为相位累加器。
9、在AlteraDSPBuilderBlockset中的IO&
Bus下选择Altbus模块将其添加到文件中。
打开模块参数对话框,将BusType设置为SignedInteger,numberofBits设置为24,然后单击【OK】按钮确认。
点击模块下文本,将其重命名为“AltBus24bit”。
10、重复步骤9,在模型中再添加一个AltBus模块,但总线宽度改为10bit,将其重命名为“AltBus10bit”作为相查找表前的总线节点。
11、在AlteraDSPBuilderBlockset中的IO&
Bus下选择Busconversion模块将其添加到文件中。
打开模块对话框,将BusType设置为SignedInteger,Input设置为24,output设置为10,InputBitConnectedtoOutputLSB设置为14,然后点击【OK】确认。
单击文本,将其重命名为“HignBittoLUT”。
12、在AlteraDSPBuilderBlockset中的RateChange下选择PLL模块将其添加到文件中。
如图1-4所示设置参数。
图1-4PLL模块参数设置对话框
13、在AlteraDSPBuilderBlockset中的RateChange下选择Clock模块将其添加到文件中。
将SimulinkSampleTime设置为2e-8,其它参数保持不变,然后点击【OK】确认
14、在AlteraDSPBuilderBlockset中的Storage下选择LUT模块将其添加到文件中。
将DataType设置为SignedInteger;
numberofbits设置为10;
LUTAddressWidth设置为10;
MATLABArray查找表中存储数据的内容,设置为511*sin([0:
2*pi/(2^10):
2*pi]),即1024点1024级量化的正弦波形,然后点击【OK】确认。
15、重新添加一个LUT模块:
LUT1。
该模块的AddressWidth设置为1;
numberofbits设置为20,MATLABArray设置为[2^142^16],然后点击【OK】确认。
16、重新添加一个LUT模块:
LUT2。
该模块中AddressWidth设置为1;
numberofbits设置为10,MATLABArray设置为[0500],然后点击【OK】确认。
17、在AlteraDSPBuilderBlockset中的AltLab下选择SignalCompiler模块和TestBench模块将其添加到文件中。
18、在Simulink中的Sinks下选择Scope模块添加到文件中。
19、在Simulink中的Sources下选择Constant模块添加到文件中,Constantvalue设置为0。
重复该步骤再添加Constant1到模型中,Constantvalue设置为0。
位置
名称
参数设置
重命名
AlteraDSPBuilderBlockset->
IO&
Bus
Input
BusType:
SignedInteger
numberofbits:
1
勾选SpecifyClock
Clock:
PLL_clk0
PhaseWords
FreqWords
Output
10
Arithmetic
ParallelAdderSubtractor
Parameters->
NumberofInputs:
2
FreqAdder24bit
Altbus
24
AltBus24bit
AltBus10bit
Busconversion
Input:
output:
10
InputBitConnectedtoOutputLSB:
14
HighBittoLUT
RateChange
PLL
Inputclock:
clock
Outputclocknum:
Periodmultiplier:
3
Perioddivider:
Clock
SimulinkSampleTime:
2e-8
Storage
LUT
DataType:
SignedInteger;
10;
LUTAddressWidth:
MATLABArray:
511*sin([0:
2*pi])
20;
1;
[2^142^16]
LUT1
[0500]
LUT2
AltLab
SignalCompiler
Sinks
Scope
Sources
Constant
Constantvalue:
20、依照图1-5所示连接各个模块。
图1-5DDS模块系统图
21、执行Simulation->
ConfigurationParameters,将solver设为discrete,Type设为Fixed-step,Taskingmodeforperiodicsampletimes设为:
SingleTasking,StopTime设为3e-5。
22、点击菜单栏中的黑色小三角,启动simulation,simulation结束后,双击Scope模块,打开波形观察界面,在波形上点击鼠标右键,选择Autoscale,即可观察simulation后的正弦波形。
改变Constant的值可以看到不同相位和频率的波形产生。
23、点击SignalCompiler模块,打开参数设置页面,将devicefamily设置成CycloneII,点击compile,结束后,关闭该页面。
24、点击TestBenchOn模块,打开模块参数界面,在Advanced选项卡中,点选LauchGUI,并依次点击GenerateHDL,RunSimulink和RunModelsim,启动RTL级仿真。
25、随后显示的界面即为ModelsimRTL级仿真的波形图。
点击wave-default中的unlock
按钮选中tb_dds/dut/output信号,点击鼠标右键,选中Propertyties选项,选择Format的Analog,将Height设为100,Scale设为0.1,点击【OK】确认。
26、在信号上点击鼠标右键,选择ZoomFull,即可看到RTL级仿真波形。
关闭MATLAB.在位置D:
\ProgramFiles\MATLABB71\work\am_dspbuilder,打开文件am.qpf。
27、工具栏中点击Assignmets,选中Device,在器件family中选择CyloneII,选择下拉菜单中的EP2C35F672C6,点击finish。
执行Assignmets->
AssignmentEditor,将Category设为Pin,并按照下图对Pin进行设置并保存。
表1-1引脚分配
NodeName
Location
PIN_P25
Output[3]
PIN_K23
PIN_N26
Output[4]
PIN_H26
aclr
PIN_N25
Output[5]
PIN_H25
PIN_N2
Output[6]
PIN_H24
Output[0]
PIN_K26
Output[7]
PIN_H23
Output[1]
PIN_K25
Output[8]
PIN_J24
Output[2]
PIN_K24
Output[9]
PIN_J23
28、执行Tools->
SignalTapⅡLogicAnalyzer,在Data窗口中的空白处双击,在弹出的对话框中将Fiter设为all&
registers:
postfittings,点击List,将PhaseWords、FreqWords、aclr、Clock、Output添加至右边的窗口中,点击【OK】确认。
29、在右边的对话框中将Clock设为Clock信号;
点选Triggerin,Source设为Clock信号,Pattern设为Risingedge;
Sampledepth设置为1K。
保存该文件,若弹出对话框询问是否将文件添加至工程,选择Yes。
点击菜单栏中的
,重新对工程进行编程。
30、打开实验箱,接入电源,用USBBlaster线将电脑和实验箱连接起来,选择菜单栏中的
图标,
31.点击HardwareSetup,选择USB-0,点击【OK】确认。
选中DDS.sof文件,点击Start,将文件下载到实验板上。
在SignalTapⅡLogicAnalyzer文件(.stp)中的右上角的Hardware的Setup下添加USB-Blaster[USB-0]。
32、将实验箱上的开关SW[0]拨至高电平,SW[1]、SW[2]分别拨至低电平和高电平。
点击
开始运行工程,点击
结束运行。
SignalTap中的data窗口,即可看到硬件实现的波形。
五、实验结果
Simulink仿真波形与RTL级仿真波形以及时序仿真波形和硬件实现结果都应是标准的正弦波形。
Simulink仿真波形:
RTL级仿真波形:
硬件实现结果:
6、实验结果讨论与分析
通过本次实验,我们初步了解了基于DSP
Builder开发数字信号处理实验的流程;
初步了解了数字信号处理与数字电路的结合;
初步学会运用相关模块。
虽然利用如此繁杂的过程得到一个简单的结论有事倍功半之疑,但这是数字信号处理实验的基础,我们通过DSP
Builder了解数字信号处理的基石。
实验过程中,有成功,也有失败。
成功让我们欢喜,给予我们探索的勇气;
失败也不会让我们气馁,激发我们探知的欲望。
此次实验的结果,让我们看到了从理论到仿真再到硬件实现结果的一致性。
也说明了实验的正确性。
总的来说,整个实验还是颇具价值的。