实验二波形发生器实验DE270版.docx
《实验二波形发生器实验DE270版.docx》由会员分享,可在线阅读,更多相关《实验二波形发生器实验DE270版.docx(21页珍藏版)》请在冰豆网上搜索。
实验二波形发生器实验DE270版
实验二、多波形发生器实验
DE2-70版
一.实验内容:
本实验要求设计一个波形发生器,生成正弦波,三角波,经过ASK调制的正弦波和经过BPSK调制的正弦波,通过开关可以选择波形,改变输出频率.各开关的控制功能见下表:
表1波形选择控制
输入端口
SW1
SW2
波形
wave_selc
0
0
三角波
0
1
正弦波
1
0
ASK调制的正弦波
1
1
BPSK调制的正弦波
表2频率选择控制
输入端口
SW3
SW4
频率
fre
0
1
每周期采样128点
0
0
每周期采样64点
1
0
每周期采样32点
1
1
每周期采样16点
二.实验原理
用查找表的方法实验信号发生器.查找表法由相位累加器和存储器构成,如下图所示.相位累加器的功能是产生正弦波和三角波的相位值.每隔一个时钟周期,累加器的相位值自动增加一定数值,并将当前的相位值作为查找表的输入值进行查表.通过改变每次增加的相位值可以控制输出信号的频率.例如,每个时钟周期累加器的相位值增加90度,则四个时钟周期产生一个完整的正弦波.输出信号的周期为时钟周期的1/4.
查找表用RAM来构造.例如,如果把相位值作为RAM的地址,只要在该地址中存储相应的正余弦幅度值,就可以通过相位值寻址RAM,输出正弦函数.
任意波形发生器原理图
三实验设计
3.1程序构架
程序的总体构架如图3-1所示,程序的顶层模块为ask_bpsk.bdf.其中有四个模块wave_sine,wave_askmod,wave_bpsk和wave_tri,分别生成正弦波,ASK正弦波,BPSK正弦波和三角波.通过一个多路选择器选择需要输出的波形,由输入信号wave_selc来控制.
顶层模块的输入输出接口如下:
inputclk;
inputrst_n;
input[]wave_selc;
input[]fre;
output[]wave;
outputclk_out;
程序中的四个模块发生器的结构非常类似,在此以正弦波为例介绍设计思路.
3.2wave_sine模块
sin_wave产生频率可调的正弦波,输入输出接口如下:
inputclk;
inputclr;
input[]fre;
output[]wave_si;
本实验要生成的正弦波形图,.在实验原理中已经指出,本实验采用查找表法生成所需的波形,查询表中存储了正弦波的相位和幅度之间的对应关系,查询表存储在FPGA的内部存储器中,使用QuartusII的MegaWinzard来制定需要的ROM.mif文件的大小为
每个周期的正弦波有128个采样点,原则上要在ROM中存储这128个采样点的幅度值,在生成ROM前,先用Matlab计算正弦波的幅度值:
x=round((sin(linspace(0,pi,49))+1)*5200);
fori=1:
1:
49
y=x(i);
end
y=
52005457571459696222647367216965
72057440766978928109831985218714
89009076924393999546968298079920
1002210113101911025710311103521038110396
1040010390103681033310285102261015310069
99739865974696159474932291608989
88088619842182158001778175557323
70866844659863486096584255865329
50714814455843044052380235563314
30772845261923992185197917811592
141112401078926785654535427
3312471741156732100
4194889143209287378
4805937188541001115713241500
16861879208122912508273129603195
34353679392741784431468649435200
在QuartusII中新建一个.mif文件,用于存储正弦函数的幅度值,这些值将初始到内部存储器中.在QuartusII中新建.mif文件的过程为:
依次执行[File]->[NewOtherFiles]->[MemoryInitializationFile]命令.将上述数据复制到.mif文件的表格中,保存上述.mif文件为data_sine.mif.
用QuartusII中的MegaWinzard定制一个单端口的RAM,具体流程如下:
(1)单击Tools菜单栏的MegawizardPlug-inWizard选项,新建一个“megafunctionvariation”,如图:
(2)选择ROM:
1-PORT,设置器件类型为CycloneII,输出文件类型为VerilogHDL输入文件名“sin_rom”,单击[下一步]按钮.
(3)定义存储深度为128个字(word),存储器的深度为14bit.使用M4K存储器,单击[下一步]按钮,
(4)将新建的data_sine.mif文件导入至ROM中
(5)然后单击[finish]按钮完成1-PORTROM的定制.
(6)新建——Verilog文件,命名为wave_sine.v将提供的wave_sine.v内的程序复制进来,并保存。
(7)在文件树中的wave_sine.v上右键——>CreatSymbolFilesForCurrentFile
3.3wave_tri模块
Wave_tri模块是产生三角波的模块,波形产生的原理和wave_sine模块相同,都是用读取rom内值的方式完成。
(1)新建——>mif文件,这个mif文件中我们将存储三角波波形的数据。
Mif文件wordsize为14,num为128
(2)在mif文件中右键——>CustomFillCells.
Startingaddress:
0Endingaddress:
31
Customvalues选择Incrementing/decrementing;
Startingvalue:
5200Incrementby128.
点击OK。
这样配置就是说从地址0到地址31,每个地址中的数据以128为等差递增。
(3)由于我们要配置成三角波,所以还需要配置递减的数据,再次在mif文件上右键——>customfillcells.
(4)最后,32个的地址配置为:
保存后我们便生成好了三角波的trang.mif文件。
(5)Tools——>MegaWizardPlug-inManager新建megafuncionvariation。
相关配置
ROM:
1-PORT,
CycloneII
Verilog
文件名trang
(6)Next后,配置为14bits128words
Memoryblocktype选择M4K,
(7)Next,Next后载入三角波的mif文件,注意上面的mif文件要保存在工程文件夹中,“./”表示相对路径。
Finish,Finish
(8)新建——>VerilogFile,保存为wave_tri.v,内容在提供的wave_tri.v中,保存。
并在目录树中文件上右键——>CreatSymbolFileForCurrentFile。
3.4wave_askmod模块
这个模块是显示出经ask调制的波形。
“幅移键控”又称为“振幅键控”,记为ASK。
也有称为“开关键控”(通断键控)的,所以又记作OOK信号。
ASK是一种相对简单的调制方式。
幅移键控(ASK)相当于模拟信号中的调幅,只不过与载频信号相乘的是二进制数码而已。
幅移就是把频率、相位作为常量,而把振幅作为变量,信息比特是通过载波的幅度来传递的。
二进制振幅键控(2ASK),由于调制信号只有0或1两个电平,相乘的结果相当于将载频或者关断,或者接通,它的实际意义是当调制的数字信号为“1”时,传输载波;当调制的数字信号为“0”时,不传输载波。
其中s(t)为基带矩形脉冲。
一般载波信号用余弦信号,而调制信号是把数字序列转换成单极性的基带矩形脉冲序列,而这个通断键控的作用就是把这个输出与载波相乘,就可以把频谱搬移到载波频率附近。
新建verilog文件Wave_askmod.v,或者也可以按照实验一中添加文件的方法,把所提供的wave_askmod.v文件添加到工程中。
方法如下:
(1)先将提供的wave_askmod.v到工程目录中
(2)在文件树如图位置右键——>addFiles..
注意!
这里把文件复制到工程目录中是为了省去绝对路径的麻烦。
使用相对路径可以使工程整体复制到其他目录或其他机器时仍能正常编译。
选中后点击add
这样就可以把已有的文件添加到系统的工程中了。
(3)wave_askmod.v上右键——>Creatsymbolfileforcurrentfile.
3.5Wave_bpsk模块
BPSK-BinaryPhaseShiftKeying(二相相移键控)是利用偏离相位的复数波浪组合来表现信息键控移相方式的一种。
是把模拟信号转换成数据值的转换方式之一。
BPSK使用了基准的正弦波和相位反转的波浪,使一方为0,另一方为1,从而可以同时传送接受2值(1比特)的信息。
由于最单纯的键控移相方式虽抗噪音较强但传送效率差,所以常常使用利用4个相位的QPSK和利用8个相位的8PSK。
这里建立模块的步骤和上面的相同,大家参考3.4节,添加进wave_bpsk模块,并生成相应的symbol模块
3.6构建顶层文件
(1)新建——>DesignFiles——>BlockDiagram/SchematicFile,保存命名为ask_bpsk.bdf
(2)添加进上述各模块,并添加相应的input,output管脚。
编译后,在AssignmentEditor中分配Pin管脚(请把下图放大对照)。
最终模块结构如图:
(3)其中的lpm_mux0是多路数据选择器,它的生成办法如下:
1.在ask_bpsk.bdf文件的空白处双击,弹出模块添加对话框。
找到/libraries下面的megafunction/gates/lpm_mux
2.点击OK后,会出现相关的配置界面,next
3.设置input个数为4,数据宽度为14bit
4.在finish,finish就ok了。
这样我们就定制好了一个所需要的多路数据选择器;再次在bdf文件中双击打开添加文件模块,可以在Projects中找到新生成的lpm_mux0模块,如图:
(4)设置ask_bpsk.bdf为顶层模块,如图
(5)综合编译。
3.7观察输出波形
(1)新建——>SignalTapII文件,保存。
(2)在setup页中设置时钟,和采样深度:
(3)在上图左侧圆圈处,双击,添加欲观测的管脚,这里我们添加如下所示的管脚:
(4)保存后,完整编译
(5)下载到板子中,AutorunAnalysis运行可观察到signaltapII采集到的波形。
如果显示的格式不是波形,请在输出波形的管脚上右键,如下图所示设置显示波形
四、总结
在这个实验中,我们设计一个多波形多频率的波形发生器。
这里波形的产生还是通过读取ROM中波形数值的方式产生,通过switch开关控制读取rom数据间隔,从而实现频率的变化。
我们用四个模块分别产生三角波,正弦波,ASK调制的正弦波,BPSK调制的正弦波,顶层模块通过多路数据选择器选择输出的波形。