移相信号发生器设计实验 一、数字移相正弦信号发生器设计1. 实验目的:学习直接数字综合器DDS及基于此模块的数字信号发生器的设计和实现。
2. 实验原理:图1是此电路模型图,其中“FWORD”是8位频率控制字,控制输出正弦信号的相移量;其“PWORD”是8位相移控制字,控制输出正弦信号的相移量;ADDER32B和ADDER10B分别为32位和10位加法器;SIN_ROM 是存放正弦波数据的ROM,10位数据线,10位地址线,其中的数据文件是LUT10X10.mif,可由MATLAB直接生成;REG32B和REG10B分别是32位和10位寄存器;POUT和FOUT分别为10位输出,可以分别与两个高速D/A相接,他们分别输出参考信号和可移相正弦波信号。
图2是完整结构图。
图1 基于DDS的数字移相信号发生器电路模型图 3. 首先利用VHDL完成10位输出数据宽度的移相信号发生器的设计,其中包括设计正弦波形数据MIF文件(数据深度1024、数据类型是10进制数);给出仿真波形。
最后进行硬件测试,对于GW48系统,选择模式1:CLK接clock0,接1.5MHz;用键4、3控制相位字PWORD输入,键2、1控制频率字FWORD输入。
观察他们的李萨如图形。
然后修改设计,增加幅度控制电路(可以用一乘法器控制输出幅度);最后可利用MATLAB设计和硬件实现。
二、设计步骤例1是移相信号发生器的顶层设计,工程文件名可取DDS_VHDL.vhd【例1】正弦信号发生器顶层设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DDS_VHDL IS -- 顶层设计PORT ( CLK : IN STD_LOGIC;FWORD : IN STD_LOGIC_VECTOR(7 DOWNTO 0);PWORD : IN STD_LOGIC_VECTOR(7 DOWNTO 0);FOUT : OUT STD_LOGIC_VECTOR(9 DOWNTO 0);POUT : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) );END;ARCHITECTURE one OF DDS_VHDL ISCOMPONENT REG32BPORT ( LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );END COMPONENT;COMPONENT REG10BPORT ( LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(9 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) );END COMPONENT;COMPONENT ADDER32BPORT ( A : IN STD_LOGIC_VECTOR(31 DOWNTO 0);B : IN STD_LOGIC_VECTOR(31 DOWNTO 0);S : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );END COMPONENT;COMPONENT ADDER10BPORT ( A : IN STD_LOGIC_VECTOR(9 DOWNTO 0);B : IN STD_LOGIC_VECTOR(9 DOWNTO 0);S : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) );END COMPONENT;COMPONENT SIN_ROMPORT ( address : IN STD_LOGIC_VECTOR(9 DOWNTO 0);inclock: IN STD_LOGIC ;q : OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END COMPONENT;SIGNAL F32B : STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL D32B : STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL DIN32B : STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL P10B : STD_LOGIC_VECTOR( 9 DOWNTO 0);SIGNAL LIN10B : STD_LOGIC_VECTOR( 9 DOWNTO 0);SIGNAL SIN10B : STD_LOGIC_VECTOR( 9 DOWNTO 0);BEGINF32B(27 DOWNTO 20)<=FWORD ; F32B(31 DOWNTO 28)<="0000";F32B(19 DOWNTO 0)<="00000000000000000000" ;P10B( 9 DOWNTO 2)<=PWORD ; P10B( 1 DOWNTO 0)<="00" ;u1 : ADDER32B PORT MAP( A=>F32B,B=>D32B, S=>DIN32B );u2 : REG32B PORT MAP( DOUT=>D32B,DIN=> DIN32B, LOAD=>CLK );u3 : SIN_ROM PORT MAP( address=>SIN10B, q=>FOUT, inclock=>CLK );u4 : ADDER10B PORT MAP( A=>P10B,B=>D32B(31 DOWNTO 22),S=>LIN10B );u5 : REG10B PORT MAP( DOUT=>SIN10B,DIN=>LIN10B, LOAD=>CLK );u6 : SIN_ROM PORT MAP( address=>D32B(31 DOWNTO 22), q=>POUT, inclock=>CLK );END;1、创建工程和编辑设计文件首先建立工作库目录,以便设计工程项目的存储。
任何一项设计都是一项工程(Project),都必须首先为此工程建立一个放置与此工程相关的所有文件的文件夹。
此文件夹将被EDA软件默认为工作库(Work Library)。
一般,不同的设计项目最好放在不同的文件夹中,而同一工程的所有文件都必须放在同一文件夹中。
注意不要将文件夹设在计算机已有的安装目录中,更不要将工程文件直接放在安装目录中。
在建立了文件夹后就可以将设计文件通过Quartus II的文本编辑器编辑并存盘,步骤如下:(1)新建一个文件夹。
首先可以利用Windows资源管理器,新建一个文件夹。
这里假设本项设计的文件夹取名为SHIFT_PHASE,在E盘中,路径为e : \ shift_phase 。
注意,文件夹名不能用中文,也最好不要用数字。
(2)输入源程序。
打开QuartusII,选择菜单File→New。
在New窗口中的Device,Design Files中选择编译文件的语言类型,这里选择“VHDL File”(如图3所示)。
然后在VHDL文本编译窗中输入例1所示的V H D L示例程序。
(3)文件存盘。
选择File→Save As命令,找到已设立的文件夹e : \ shift_phase ,存盘文件名应该与实体名一致,即DDS_VHDL.vhd(图4)。
当出现图4所示的问句“Do you want to create…”时,若单击“否”按钮,可按以下的方法进入创建工程流程;若单击“是”按钮,则直接进入创建工程流程。
图2 数字式移相信号发生器完整结构图3 选择编辑文件的语言类型图4 编辑输入设计文件,并存盘图5 利用“New Preject Wizard”创建工程DDS_VHDL 2、创建工程在此要利用“New Preject Wizard”工具选项创建此设计工程,即令顶层设计DDS_VHDL.vhd为工程,并设定此工程的一些相关的信息,如工程名、目标器件、综合器、仿真器等。
详细步骤如下:(1)打开建立新工程管理窗。
选择菜单File→New Preject Wizard命令,即弹出“工程设置”对话框(图5)。
单击此对话框最上一栏右侧的“…”按钮,找到文件夹e : \ shift_phase ,选中已存盘的文件dds_vhdl.vhd(一般应该设顶层设计文件为工程),再单击“打开”按钮,即出现如图5所示的设置情况。
其中第一行的e : \ shift_phase 表示工程所在的工作库文件夹;第二行的dds_vhdl表示此项工程的工程名,此工程名可以取任何其他的名,也可直接用顶层文件的实体名作为工程名,在此就是按这种方式取的名。
第三行是顶层文件的实体名,这里即为“dds_vhdl”。
(2)将设计文件加入工程中。
单击下方的Next按钮,在弹出的对话框中单击File栏的按钮,将与工程相关的所有VHDL文件(如果有的话)加入进此工程,即得到如图6所示的情况。
工程文件加入的方法是:单击Add All按钮,将设定的工程目录中的所有VHDL文件加入到工程文件栏中。
注意,在文件夹e : \ shift_phase中已预先COPY进了另4个VHDL 设计文件:10位和32位加法器adder10b.vhd、adder32b.vhd与10位和32位锁存器reg10b.vhd、reg32b.vhd 。
(3)选择仿真器和综合器类型。
单击图6所示的Next按钮,这时弹出的窗口是选择仿真器和综合器类型,如果都选默认的“NONE”,表示都选Quartus II中自带的仿真器和综合器。
在此都选择默认项“NONE”。
(4)选择目标芯片。
单击Next按钮,选择目标芯片。
首先在Family栏选芯片系列,在此选Cyclone系列,并在此栏下单击Y e s按钮,即选择一确定目标器件。
再次单击Next按钮,选择此系列的具体芯片EP1C3T144C8。
这里EP1C3表示Cyclone系列及此器件的规模;T表示TQFP封装;C8表示速度级别。
便捷的方法是通过图7所示窗口右边的3个“Filters”窗口“过滤”选择。
图6 将所有相关的文件都加入进此工程图图7 选择目标器件EP1C6Q240C8 (5)结束设置。
单击Next按钮后,即弹出“工程设置统计”窗口,上面列出了此项工程相关设置情况。
最后单击Finish按钮,即已设定好此工程,并出现DDS_VHDL.vhd的工程管理窗,或称Compilation Hierarchies窗口,主要显示本工程项目的层次结构和各层次的实体名。