陕西理工学院毕业论文(设计)
(D)在正弦查找表之间插入的数字的乘数和D/A变换器使生产正弦波的调幅成为可能,数字的乘
数字的宽度确定输出步幅。
(E)附加高速的D/A转换器,可提供包括DDS的余弦输出。这使得DDS的设备提供I和Q输出的频率精确匹配,正交相位和幅度。这些额外的D/A转换器也可驱动的控制界面,并作为各种应用控制DAC的使用。
(F)高速比较器功能可以被集成在有利于作为时钟发生器的DDS器件上使用。比较器配置转换成一个方波从DDS的D/A转换正弦波输出。
(G)频率/相位寄存器可以添加允许的频率和相位的话,以预先编程,其内容通过一个控制引脚执行。此配置还支持频移键控(FSK)与预期的“标志”和“空间”频率编程单针输入调制。 合并所有这功能性(并且更多)的DDS设备,并且支持内部的时钟频率直到300MHz。用DDS解决办法的日益增多的普及是由于所有这个性能和功能都有一个合理的价格,并且在比较小的软体里。 下列是可以从完成DDS的解决办法用图1-4 描述的双12 bit/300的MHz中获得的性能的一般的指导方针。(条件假定外部基准钟到10点内部增加的30MHz产生一个300MHz的内部的时钟频率) : -频率协调字长=当输出频率调谐为1uHZ时为48bit。
-相位调谐字长=14bit时提供0.022的相位延迟控制的分辨率。 -REFCLK乘数范围=以在4*到20*的范围的整数增值可编程序 -输出频率带宽(REFCLK比率的3分之1)=100MHz -频率协调比率=拥有8bit的并行负载时为100MHz -输出幅度控制=零输出原大小为8128阶(12位的控制字)
-输出杂散性能=最坏情况50分贝带宽当给予80MHz的宽带杂散输出。 -I/Q输出匹配=0.01度 -对尼奎斯特的输出DC=0.01db
第 31 页 共 36 页
陕西理工学院毕业论文(设计)
附录B 源程序
32位加法器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADDER32B IS
PORT(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 ADDER32B;
ARCHITECTURE behav OF ADDER32B IS
BEGIN S<=A+B; END behav;
32位寄存器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADDER32B IS
PORT(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 ADDER32B;
ARCHITECTURE behav OF ADDER32B IS
BEGIN S<=A+B; END behav;
波形数据存储mif文件 正弦波数据存储文件
WIDTH=10; DEPTH=1024;
ADDRESS_RADIX=DEC; DATA_RADIX=DEC; CONTENT BEGIN
0:511;1:514;2:517;3:520;4:524;……1019:495;1020:498;1021:502;1022:505;1023:508;END; 三角波数据存储文件 WIDTH=10; DEPTH=1024;
ADDRESS_RADIX=DEC; DATA_RADIX=DEC; CONTENT BEGIN
0:0;1:1;2:2;3:3;4:4;……1018:6;1019:5;1020:4;1021:3;1022:2;1023:1;END;
方波数据存储文件
第 32 页 共 36 页
陕西理工学院毕业论文(设计)
WIDTH=10; DEPTH=1024;
ADDRESS_RADIX=DEC; DATA_RADIX=DEC; CONTENT BEGIN
0:1023;1:1023;2:1023;3:1023;4:1023;……1019:0;1020:0;1021:0;1022:0;1023:0;END;
10位加法器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; use ieee.std_logic_unsigned.all; ENTITY ADDER10B IS
PORT(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 ADDER10B;
ARCHITECTURE behav OF ADDER10B IS BEGIN S <= A + B; END behav;
10位寄存器
LIBRARY IEEE;
USE IEEE.STD_LoGIC_1164.ALL; ENTITY REG10B IS
PORT(LOAD:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(9 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(9 DOWNTO 0)); END REG10B;
ARCHITECTURE behav OF REG10B IS BEGIN
PROCESS(LOAD,DIN) BEGIN
IF load'EVENT AND load='1'THEN DOUT<=DIN; END IF; END PROCESS; END behav;
波形数据调用模块
由于有三个波形要输出,所以有三个调用模块,其不同指出只是程序中对应的文件名不同
Library ieee;
Use ieee.std_logic_1164.all; ENtity sin_rom IS
Port (address:in std_logic_vector(9 downto 0); Inclock:in std_logic;
Q:out std_logic_vector(9 downto 0)); End sin_rom;
Architecture syn of sin_rom is
第 33 页 共 36 页
陕西理工学院毕业论文(设计)
Signal sub_wire0:std_logic_vector(9 downto 0); Component lpm_rom Generic(lpm_width : natural; Lpm_widthad : natural; Lpm_address_control : string; Lpm_outdata : string; Lpm_file : string);
Port (address :in std_logic_vector(9 downto 0); Inclock:in std_logic;
Q:out std_logic_vector(9 downto 0)); End component; Begin
Q<=sub_wire0(9 downto 0);
Lpm_rom_component:lpm_rom generic map (lpm_width => 10, lpm_widthad => 10,
lpm_address_control => \ lpm_outdata => \
lpm_file => \
port map(address=>address,inclock=>inclock,q=>sub_wire0); end syn;
4选1选择器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MUX41A IS
PORT(A:IN STD_LOGIC_VECTOR(9 DOWNTO 0); B:IN STD_LOGIC_VECTOR(9 DOWNTO 0); C:IN STD_LOGIC_VECTOR(9 DOWNTO 0); SS:IN STD_LOGIC_VECTOR(1 DOWNTO 0); S:OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END MUX41A;
ARCHITECTURE ONE OF MUX41A IS
SIGNAL SEL: STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN SEL<=SS; PROCESS(SEL) BEGIN CASE SEL IS
WHEN \ WHEN \ WHEN \ WHEN OTHERS=>NULL; END CASE; END PROCESS;
第 34 页 共 36 页
陕西理工学院毕业论文(设计)
END ONE;
顶层模块
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); SC:IN STD_LOGIC_VECTOR(1 DOWNTO 0); FOUT :OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END;
ARCHITECTURE one OF DDS_VHDL IS COMPONENT REG32B
PORT (LOAD:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); END COMPONENT; COMPONENT REG10B PORT(LOAD:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(9 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END COMPONENT; COMPONENT ADDER32B
PORT(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 ADDER10B
PORT(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_ROM
PORT(address :IN STD_LOGIC_VECTOR(9 DOWNTO 0); inclock :IN STD_LOGIC;
q :OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END COMPONENT; COMPONENT S_ROM
PORT(address :IN STD_LOGIC_VECTOR(9 DOWNTO 0); inclock :IN STD_LOGIC;
q :OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END COMPONENT; COMPONENT J_ROM
PORT(address :IN STD_LOGIC_VECTOR(9 DOWNTO 0);
第 35 页 共 36 页
陕西理工学院毕业论文(设计)
inclock :IN STD_LOGIC;
q :OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END COMPONENT; COMPONENT MUX41A
PORT(A:IN STD_LOGIC_VECTOR(9 DOWNTO 0); B:IN STD_LOGIC_VECTOR(9 DOWNTO 0); C:IN STD_LOGIC_VECTOR(9 DOWNTO 0); SS:IN STD_LOGIC_VECTOR(1 DOWNTO 0); S: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); SIGNAL SIND:STD_LOGIC_VECTOR( 9 DOWNTO 0); SIGNAL SD:STD_LOGIC_VECTOR( 9 DOWNTO 0); SIGNAL JD:STD_LOGIC_VECTOR( 9 DOWNTO 0); BEGIN
F32B(27 DOWNTO 20)<=FWORD;F32B(31 DOWNTO 28)<=\ P10B(1 DOWNTO 0)<=\
F32B(19 DOWNTO 0)<=\
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=>SIND,inclock=>CLK); u4:S_ROM PORT MAP(address=>SIN10B,q=>SD,inclock=>CLK); u5:J_ROM PORT MAP(address=>SIN10B,q=>JD,inclock=>CLK);
u6:ADDER10B PORT MAP(A=>P10B,B=>D32B(31 DOWNTO 22),S=>LIN10B); u7:REG10B PORT MAP(DOUT=>SIN10B,DIN=>LIN10B,LOAD=>CLK); u8:MUX41A PORT MAP(SS=>SC,S=>FOUT,A=>SIND,B=>SD,C=>JD); END;
第 36 页 共 36 页