文档介绍:FPGA课程设计报告
题目:DDS信号发生器设计
时间:
一、设计题目:
直接数字频率合成(DDS,Direct Digital Synthesis)是一种把一系列数字形式的信号通过DAC转换成模拟形式的信号的合成技术。目前使用最广泛的一种DDS方式是利用高速存储器作查找表,然后通过高速DAC输出已经用数字形式存入的正弦波。
二、设计规范:
1、本设计实现的功能:
用一个8×128的ROM完成对所要显示正弦波形数据的存储,即生成正弦波的波形数据查找表,通过VerilogHDL编写DDS直接数字频率合成代码,在Quartus II与modelsim工具软件的环境中进行设计和仿真,要求能根据相位累加产生的地址并按照不同的频率控制信号(freq)读取ROM波形查找表中的数值做为输出,并正确显示波形。同时还可通过改变相移变量(pha)控制程序从不同的位置开始读取ROM波形查找表中的数据。
2、输入输出端口
input wire clk; //时钟
input wire rst;//复位信号(低电平有效)
input wire [6 : 0] freq;//频率控制信号
input wire [6 : 0] pha;//相移变量信号
input wire key; //使能开关信号(高电平有效)
output wire [7 : 0] data; //ROM查找表数据
三、总体设计方案:
:
本次设计总体实现的是一个能产生正弦波形的DDS信号发生器,该DDS信号发生器的程序代码模块主要有以下内容:
(1)ROM地址产生:
当时钟的上升沿到来时,如果复位信号有效,则把地址变量addr清零;否则当使能开关信号key有效时,则将频率控制字写到内部寄存器里,再将频率控制字和上一时刻的地址变量进行相加,将加的结果作为地址输出。另外,还可通过频率控制信号freq控制读取频率,通过相移变量信号pha控制初始读取位置。
(2)ROM查找表:
当时钟的上升沿到来时,如果复位信号有效,则把输出置为零;否则根据ROM地址产生模块产生的地址读取ROM中存储的数值。
另外需通过C语言生成ROM正弦波查找表数据,C语言程序代码如下:
(代码见电子版报告)
#include ""
#include ""
#include ""
main()
{
int i;
float j;
int y;
FILE *fp;
if((fp = fopen("", "wa")) == NULL)
exit(1);
for(i = 0; i < 128; i++)
{
y = 128 * sin(j) + 128;
fprintf(fp, "%d:%d;\n", i, y);
j += 2 * / 128;
}
fclose(fp);
printf("Hello, world\n");
getch();
}
:
ROM查找表
D/A转换
ROM地址产生模块
rst
addr
key
clk
data
输出
cl