MATLAB 与 FPGA无线通信、图像处理、数字信号处理系列
- 系统框图
基于FPGA的DDS信号发生器系统框图如下图所示,采取查表法。
(1)对一个完整周期的波形进行采样,将采样点存在ROM中;
(2)依次给出ROM的访问地址,即可输出一个完整的波形;
(3)通过设置不同的频率控制字可以让ROM的访问地址以不同的步进值访问,这样起到改变输出波形的频率的作用;
(4)通过设置不同的相位控制字可以让ROM的访问时的初始地址改变,这样起到改变输出波形初始相位的作用。
- DDS产生固定频率和固定相位的正弦信号
首先产生固定频率和相位的正弦信号,一个周期采样 256 点,数据位宽为 8 位,需要:
(1)在 ROM 中存储波形,ROM 设置参数:单口ROM,数据深度 256,数据位宽 8 位,输出后可以接 8 位的 DAC 数模转换模块;
(2)使用一个计数器产生ROM的地址,计数器输出位宽8位;
(3)使用100 MHz的时钟,时钟周期为 10 ns,每个时钟输出一个正弦波的采样点,一个正弦波周期有 256 个点,需要 256 个时钟周期,即 2560 ns,这样,输出的正弦波的频率为 100 MHz / 256 = 390.625 KHz。
Quartus ii 实现 8 位计数器教程——Verilog实现8位计数器
这样设置后,即可产生一个标准正弦波,其参数为:
(1)幅值由DAC决定,DAC选定后赋值即固定(比如 0 ~ 5V),不可通过FPGA调幅,后级可以通过 VGA(压控放大器)等调幅;
(2)频率为 390.625 KHz,不可调频;
(3)初始相位为0。
- 设计过程
(1)获取sin波形的抽样点
使用Guagle_wave工具,查看->全局参数,设置全局参数如下
设定波形->正弦波,文件->保存,将256个采样点保存为sin.mif文件。mif文件是quartus软件中ROM的存储文件,内容包含存储的数据和该数据在ROM中对应的地址。
(2)ROM存储波形
(3)计数器产生地址
Quartus ii 实现 8 位计数器教程——Verilog实现8位计数器
module count(
clk,
rst_n,
count_out
);
input clk;
input rst_n;
output reg [7:0] count_out;
always @ ( posedge clk or negedge rst_n )
begin
if( !rst_n ) begin
count_out <= 8'b0;
end
else begin
count_out <= count_out + 1'b1;
end
end
endmodule
(4)例化顶层文件
4.仿真结果
使用modelsim仿真分析,编写test bench。
在仿真的时候,无法以BDF原理图模式做顶层文件去调用(开发板实物可以,仿真还是要用verilog去例化),这时候需要新建一个 Verilog 文件,并设置为顶层文件。
MATLAB 与 FPGA无线通信、图像处理、数字信号处理系列
2017年全国大学生电子设计竞赛综合测评题目解析——Multisim仿真
Verilog学习笔记——有符号数的乘法和加法
欢迎关注:FPGA探索者