资源描述
设计实例-直接数字频率合成器的简单设计
DDS(Direct Digital Synthesizer)
任务:
n 使用FPGA器件内部RAM实现DDS(Direct Digital Synthesizer,直接数字频率合成)的简单设计。
n 设DDS的:
1. 频率控制字为32位;
2. 相位累加器的位数为32位;
3. 输出为Address[31..O]。
4. 将FPGA内部RAM作为ROM使用;
5. 地址位数设为12位。
n 为了提高精确度,同时兼顾片上资源,把累加器的输出结果Address[31..0]的高12位Address[31..20]作为ROM的地址输入。因此可知该ROM的存储容量为4096x10位。
n 该DDS实例的顶层设计如图3.45所示,其中:
1. 模块phase_adder为相位累加器模块;
2. 模块SinRom为波形存储器模块;
3. FreqCtrl[31..O]为频率控制字输入;
4. q[9..O]为ROM数据输出。
n DDS实例各子模块设计
1、 创建工程Test_DDS_v1
File->New->New Quartus II Project
2、创建原理图文件
File->New-> Block Diagram / Schmatic File
3.相位累加器模块Phase_adder设计
n 相位累加器是DDS的核心,其性能的好坏决定了整个系统的性能。
n 普通相位累加器由32位加法器与32位累加寄存器级联构成,由它产生波形存储器的离散地址值。同时,它也作为后面波形存储器的地址计数器。
n 本例32位相位累加器的设计采用LPM宏单元库中的LPM_ADD_SUB参数化模块例化实现。
(1)Tools->MegaWizard Plug-In Manager
(2)如图3.46或下图所示,在MegaWizard Plug-In Manager的第2页,选择Arithmetic库中的LPM_ADD_SUB参数化模块,输入输出文件的名字,如phase_adder;选Verilog HDL,点击Next按钮。
(3)在MegaWizard Plug-In Manager的第3页中,设置总线位数,如本例将总线位数设置为32位,选择Addition only,点击Next按钮。
(4)在MegaWizard Plug-In Manager的第6页中,如图3.47或下图所示,设置一个时钟周期的输出延时,即相位累加器结果通过寄存器锁存输出。
其他页保持默认设置,点击Finish按钮完成相位累加器模块的设计。
得到phase_adder模块
2.波形存储器ROM模块的设计
n 设计波形存储器ROM模块之前,应先创建个存储器初始化文件。
n 参考前面的方法,此处为ROM模块建立.mif格式的初始化文件sin.mif。
n ROM模块中波形数据可通过Matlab软件计算产生(也可以用C语言编程产生)。
n 此处以一个周期正弦波函数为例,给出生成波形数据的Matlab实现程序,同时将数据直接写入sin.mif文件。
n 解释:p70 matlab文件!
(1)利用MegaWizard Plug-In Manager向导,在图3.42中选择ROM:1-PORT,输出模块名键入SinROM,如图3.48或下图所示;
(2)在MegaWizard Plug-In Manager向导的第3页指定存储器字数为4096,字宽为10,如图3.49或下图所示;
(3)在第4页将选项’q’output port前面的钩去掉,即输出数据端无寄存器,如图3.50或下图所示。
(4)最后在MegaWizard Plug-In Manager向导的第5页指定存储器初始化文件为Sin.mif,如图3.51或下图所示。
(5)点击Finish按钮,生成ROM宏功能模块。
(6)连线、加引脚、命名等。完成DDS基于图形块的原理图设计。如下图所示。
(7)以Test_DDS.bdf为文件名存盘。完成原理图设计。
展开阅读全文