1、实验二波形发生器实验DE270版实验二、多波形发生器实验DE2-70版一.实验内容:本实验要求设计一个波形发生器,生成正弦波,三角波,经过ASK调制的正弦波和经过BPSK调制的正弦波,通过开关可以选择波形,改变输出频率.各开关的控制功能见下表:表1 波形选择控制输入端口SW1SW2波形wave_selc00三角波01正弦波10ASK调制的正弦波11BPSK调制的正弦波表2频率选择控制输入端口SW3SW4频率fre01每周期采样128点00每周期采样64点10每周期采样32点11每周期采样16点二.实验原理用查找表的方法实验信号发生器.查找表法由相位累加器和存储器构成,如下图所示.相位累加器的功
2、能是产生正弦波和三角波的相位值.每隔一个时钟周期,累加器的相位值自动增加一定数值,并将当前的相位值作为查找表的输入值进行查表.通过改变每次增加的相位值可以控制输出信号的频率.例如,每个时钟周期累加器的相位值增加90度,则四个时钟周期产生一个完整的正弦波.输出信号的周期为时钟周期的1/4.查找表用RAM来构造.例如,如果把相位值作为RAM的地址,只要在该地址中存储相应的正余弦幅度值,就可以通过相位值寻址RAM,输出正弦函数.任意波形发生器原理图 三 实验设计3.1程序构架程序的总体构架如图3-1所示,程序的顶层模块为ask_bpsk.bdf.其中有四个模块wave_sine, wave_askm
3、od,wave_bpsk和wave_tri,分别生成正弦波,ASK正弦波,BPSK正弦波和三角波.通过一个多路选择器选择需要输出的波形,由输入信号wave_selc来控制.顶层模块的输入输出接口如下:input clk;input rst_n;input wave_selc;input fre;output wave;output clk_out;程序中的四个模块发生器的结构非常类似,在此以正弦波为例介绍设计思路.3.2 wave_sine模块 sin_wave产生频率可调的正弦波,输入输出接口如下:input clk;input clr;input fre;output wave_si;本实
4、验要生成的正弦波形图,.在实验原理中已经指出,本实验采用查找表法生成所需的波形,查询表中存储了正弦波的相位和幅度之间的对应关系,查询表存储在FPGA的内部存储器中,使用Quartus II的Mega Winzard来制定需要的ROM.mif文件的大小为每个周期的正弦波有128个采样点,原则上要在ROM中存储这128个采样点的幅度值,在生成ROM前,先用Matlab计算正弦波的幅度值:x = round(sin(linspace(0,pi,49)+1)*5200);for i=1:1:49 y=x(i);endy=5200 5457 5714 5969 6222 6473 6721 6965 7
5、205 7440 7669 7892 8109 8319 8521 8714 8900 9076 9243 9399 9546 9682 9807 9920 10022 10113 10191 10257 10311 10352 10381 10396 10400 10390 10368 10333 10285 10226 10153 10069 9973 9865 9746 9615 9474 9322 9160 8989 8808 8619 8421 8215 8001 7781 7555 7323 7086 6844 6598 6348 6096 5842 5586 5329 5071
6、4814 4558 4304 4052 3802 3556 3314 3077 2845 2619 2399 2185 1979 1781 1592 1411 1240 1078 926 785 654 535 427 331 247 174 115 67 32 10 0 4 19 48 89 143 209 287 378 480 593 718 854 1001 1157 1324 1500 1686 1879 2081 2291 2508 2731 2960 3195 3435 3679 3927 4178 4431 4686 4943 5200 在Quartus II中新建一个.mif
7、文件,用于存储正弦函数的幅度值,这些值将初始到内部存储器中.在Quartus II中新建.mif文件的过程为:依次执行File-New OtherFiles- Memory Initialization File 命令.将上述数据复制到.mif文件的表格中,保存上述.mif文件为data_sine.mif.用Quartus II中的Mega Winzard定制一个单端口的RAM,具体流程如下:(1) 单击Tools菜单栏的Megawizard Plug-in Wizard选项,新建一个 “megafunction variation”,如图:(2) 选择ROM:1-PORT,设置器件类型为Cy
8、clone II,输出文件类型为Verilog HDL输入文件名 “sin_rom”,单击 下一步 按钮.(3) 定义存储深度为128个字(word),存储器的深度为14bit.使用M4K存储器,单击下一步按钮,(4) 将新建的data_sine.mif文件导入至ROM中(5) 然后单击finish按钮完成1-PORT ROM的定制.(6) 新建Verilog文件,命名为wave_sine.v 将提供的wave_sine.v内的程序复制进来,并保存。 (7) 在文件树中的wave_sine.v上右键Creat Symbol Files For Current File 3.3 wave_tri
9、模块Wave_tri模块是产生三角波的模块,波形产生的原理和wave_sine模块相同,都是用读取rom内值的方式完成。(1) 新建mif文件,这个mif文件中我们将存储三角波波形的数据。Mif文件word size为14,num为128(2) 在mif文件中右键Custom Fill Cells.Starting address:0 Ending address: 31Custom values选择Incrementing/decrementing;Starting value:5200 Increment by 128.点击OK。这样配置就是说从地址0到地址31,每个地址中的数据以128为
10、等差递增。(3) 由于我们要配置成三角波,所以还需要配置递减的数据,再次在mif文件上右键custom fill cells.(4) 最后,32个的地址配置为:保存后我们便生成好了三角波的trang.mif文件。(5) ToolsMegaWizard Plug-in Manager新建megafuncion variation。相关配置ROM:1-PORT,CycloneIIVerilog文件名trang (6) Next后,配置为14bits 128words Memory block type选择M4K,(7) Next,Next后载入三角波的mif文件,注意上面的mif文件要保存在工程文
11、件夹中,“./”表示相对路径。Finish,Finish(8) 新建Verilog File,保存为wave_tri.v,内容在提供的wave_tri.v中,保存。并在目录树中文件上右键Creat Symbol File For Current File。3.4 wave_askmod模块这个模块是显示出经ask调制的波形。“幅移键控”又称为“振幅键控”,记为ASK。也有称为“开关键控”(通断键控)的,所以又记作OOK信号。ASK是一种相对简单的调制方式。幅移键控(ASK)相当于模拟信号中的调幅,只不过与载频信号相乘的是二进制数码而已。幅移就是把频率、相位作为常量,而把振幅作为变量,信息比特是
12、通过载波的幅度来传递的。二进制振幅键控(2ASK), 由于调制信号只有0或1两个电平,相乘的结果相当于将载频或者关断,或者接通,它的实际意义是当调制的数字信号为“1”时,传输载波;当调制的数字信号为“0”时,不传输载波。其中s(t)为基带矩形脉冲。一般载波信号用余弦信号,而调制信号是把数字序列转换成单极性的基带矩形脉冲序列,而这个通断键控的作用就是把这个输出与载波相乘,就可以把频谱搬移到载波频率附近。新建verilog文件Wave_askmod.v,或者也可以按照实验一中添加文件的方法,把所提供的wave_askmod.v文件添加到工程中。方法如下:(1) 先将提供的wave_askmod.v
13、到工程目录中(2) 在文件树如图位置右键add Files. 注意!这里把文件复制到工程目录中是为了省去绝对路径的麻烦。使用相对路径可以使工程整体复制到其他目录或其他机器时仍能正常编译。选中后点击add这样就可以把已有的文件添加到系统的工程中了。(3) wave_askmod.v上右键Creat symbol file for current file.3.5 Wave_bpsk模块BPSK - Binary Phase Shift Keying(二相相移键控)是利用偏离相位的复数波浪组合来表现信息键控移相方式的一种。是把模拟信号转换成数据值的转换方式之一。BPSK使用了基准的正弦波和相位反转
14、的波浪,使一方为0,另一方为1,从而可以同时传送接受2值(1比特)的信息。由于最单纯的键控移相方式虽抗噪音较强但传送效率差,所以常常使用利用4个相位的QPSK和利用8个相位的8PSK。这里建立模块的步骤和上面的相同,大家参考3.4节,添加进wave_bpsk模块,并生成相应的symbol模块3.6构建顶层文件(1) 新建Design FilesBlock Diagram/Schematic File,保存命名为ask_bpsk.bdf(2) 添加进上述各模块,并添加相应的input,output管脚。编译后,在Assignment Editor中分配Pin管脚(请把下图放大对照)。最终模块结构
15、如图: (3) 其中的lpm_mux0是多路数据选择器,它的生成办法如下:1. 在ask_bpsk.bdf文件的空白处双击,弹出模块添加对话框。找到/libraries下面的megafunction/gates/lpm_mux 2. 点击OK后,会出现相关的配置界面,next3. 设置input个数为4,数据宽度为14bit 4. 在finish,finish就ok了。这样我们就定制好了一个所需要的多路数据选择器;再次在bdf文件中双击打开添加文件模块,可以在Projects中找到新生成的lpm_mux0模块,如图:(4) 设置ask_bpsk.bdf为顶层模块,如图(5) 综合编译。3.7
16、观察输出波形(1) 新建Signal TapII文件,保存。 (2) 在setup页中设置时钟,和采样深度: (3) 在上图左侧圆圈处,双击,添加欲观测的管脚,这里我们添加如下所示的管脚: (4) 保存后,完整编译(5) 下载到板子中,Autorun Analysis 运行可观察到signaltapII采集到的波形。如果显示的格式不是波形,请在输出波形的管脚上右键,如下图所示设置显示波形四、总结在这个实验中,我们设计一个多波形多频率的波形发生器。这里波形的产生还是通过读取ROM中波形数值的方式产生,通过switch开关控制读取rom数据间隔,从而实现频率的变化。我们用四个模块分别产生三角波,正弦波,ASK调制的正弦波,BPSK调制的正弦波,顶层模块通过多路数据选择器选择输出的波形。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1