赞
踩
module DDS(clk,DA_Data,DA_Data2);//定义端口名字
input clk;//时钟端口输入
output [10:0]DA_Data;//数据输出位,可以在接下来仿真中被调用。因为生成的.mif中输出波形量化值最高为1024为转化为2进制为11位
output [10:0]DA_Data2;
reg [10:0] rom_addr=11'b00000000000;//这里设置的为2FSK中频率低的波形为2048位,初始地址位为0 reg [9:0] rom_addr2=10'b0000000000;//这里设置的为2FSK中频率高的波形为1024位,初始地址位为0 always@(posedge clk)begin//时钟上升沿触发 if(rom_addr==11'b11111111111)//如果地址位达到最高上限将强制归零 rom_addr<=11'b0; else rom_addr<=rom_addr+11'b1;//如果未达上限对地址位加一 end always@(posedge clk)begin if(rom_addr2==10'b1111111111) rom_addr2<=10'b0; else rom_addr2<=rom_addr2+10'b1; end
这里位数和位宽要和.mif文件中描写的对应。
之后会生成一个rom.v文件
打开rom.v找到模块端口
module rom (
address,//地址位输入
clock,//时钟输入位
q);//数据输出位
需要注意的是rom文件里的端口参数要和.mif文件一样和DDS中定义端口数据类型也一样
rom rom (//对rom模块例化
.address(rom_addr),//将端口一一对应即可
.clock(clk),
.q(DA_Data) //数据输出
);
rom2 rom2 (
.address(rom_addr2),
.clock(clk),
.q(DA_Data2)
);
endmodule//结束模块
`timescale 1ms/1ms//延时1m精度1m这个可以按需求设置
module DDS_tb;//定义顶层仿真模块
reg clk;//定义时钟信号
wire [10:0]DA_Data;//波形1.输出位线性11位宽二进制量化数值
wire [10:0]DA_Data2;//波形2
DDS DDS(//例化模块端口
.clk(clk),
.DA_Data(DA_Data),
.DA_Data2(DA_Data2)
);
initial clk=1;//对时钟初始赋值
always #5 clk=~clk;//生成时钟信号
endmodule
选择刚刚编写的tb测试文件add后应用
然后综合编译完成后对程序仿真 Tools>>run simulation
弹出Modelsim后选中wave窗口即可
此时窗口波形并不是熟悉的量化输出的正弦波形,需要对波形进行操作
右击想要生成波形的参数选择Format>>analog (custom)
对区间进行设置
然后再右击选择radix>>unsigned
对两个参数都进行这样的操作即可观察到载波波形。
需要注意的地方:
1.生成rom文件里参数要和.mif对应
2.要设置顶层文件
3.要对最后仿真的参数进行设置才能出波形
以上代码可直接粘贴运行分开是为了步骤注释方便
【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真③(信号调制仿真)
【FPGA】使用Verilog编程通过ModelSim实现2FSK调制解调仿真①( MATLAB生成.mif文件)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。