DDS移相信号发生器设计一、实验目的1.会用VHDL语言编写加法器、寄存器、以及本实验的主程序;2.能够用Quartus II软件生成PLL20和SIN_ROM元件;3.熟练掌握本次实验的波形仿真、引脚锁定、编程下载;4.透彻的理解本次实验的VHDL的含义以及其需要实现的功能,做好硬件测试工作;5.熟练地掌握实验室里示波器的使用。
二、实验原理FWORD是8位频率控制字,控制输出信号的频率;PWORD是8位相移控制字,控制输出信号的相移量;ADDER32B和ADDER10B分别为32位和10位加法器;SIN_ROM是存放正弦波数据的ROM,10位数据线,10位地址线,其中的数据文件是LUT10X10.mif,REG32B和REG10B 分别是32位和10位寄存器;POUT和FOUT分别为10位输出,可以分别与两个高速D/A相接,它们分别输出参考信号和可移相正弦信号。
三、实验内容1.完成10位输出数据宽度的移相信号发生器设计,要求使用锁相环,设计正弦波形数据MIF文件,给出仿真波形,最后进行硬件测试。
2.修改设计,增加幅度控制电路。
3.将此信号发生器改成具有扫频功能的波形发生器,扫速可数控,点频扫频可控。
四、实验步骤1.创建本次实验所在的文件夹在桌面创建一个文件夹,取名为DDS。
2.创建工程File->New Project Wizard(具体的参数设置如下图所示)3.使用VHDL语言编写代码先创建编写VHDL语言的文本,编写好代码之后保存,保存的名称即实体名。
File->New编写好的代码如下:主代码(DDS):library ieee;useieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity DDS isport(CLK2: IN STD_LOGIC;CLK_DA: OUT 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 ISCOMPONENT PLL20PORT(inclk0 : in STD_LOGIC :='0';c0 : OUT STD_LOGIC);END COMPONENT;COMPONENT 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);clock : IN STD_LOGIC;q : OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END COMPONENT;SIGNAL CLK : STD_LOGIC;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);SIGNAL DOUT : STD_LOGIC_VECTOR(9 DOWNTO 0);SIGNAL DIN : STD_LOGIC_VECTOR(31 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";CLK_DA <= CLK;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,clock=>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,clock=>CLK); u7:PLL20 PORT MAP(inclk0=>CLK2,c0=>CLK);END;其中的例化语句中调用的各类器件代码如下:ADDER32B:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER32B ISPORT(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;ARCHITECTURE bhv OF ADDER32B ISBEGINS <= A + B;END;ADDER10B:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER10B ISPORT(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;ARCHITECTURE bhv OF ADDER10B ISBEGINS <= A + B;END;REG32B:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B ISPORT(LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END;ARCHITECTURE bhv OF REG32B ISSIGNAL Q1 : STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINPROCESS(LOAD,Q1)BEGINIF LOAD'EVENT AND LOAD ='1'THEN Q1 <= DIN;END IF;END PROCESS;DOUT <= Q1;END;REG10B:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG10B ISPORT(LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(9 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(9 DOWNTO 0));END;ARCHITECTURE bhv OF REG10B ISSIGNAL Q1 : STD_LOGIC_VECTOR(9 DOWNTO 0);BEGINPROCESS(LOAD,Q1)BEGINIF LOAD'EVENT AND LOAD ='1'THEN Q1 <= DIN;END IF;END PROCESS;DOUT <= Q1;END;其中的SIN_ROM和PLL20则是通过Quartus II软件定制得来的,其定制方法如下:SIN_ROM的定制:PLL20的定制:4.创建波形文件并仿真1)创建波形文件:File->New2)添加节点:3)选择节点,设置各节点的输入信号,设置好后的图形如下:4)仿真,仿真后的结果如下:5.引脚锁定,仿真成功后进行引脚锁定:Assignments->Pin planner,设置好引脚后如下图:然后在次全编译主程序:Processing->Start Compilation(快捷键:Ctrl+L) 6.进行硬件下载:Tools->Programmer,按照下图的参数进行设置,然后下载即可五、实验总结1.实验结果:通过观察示波器上的波形,可以得到我们预期的试验结果。