Download presentation
Presentation is loading. Please wait.
1
移相正弦信号发生器设计 采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图
正弦波ROM是存放正弦波数据的,10位数据线,10位地址线; “FW” 是8位频率控制字 “PW”是8位相移控制字 32位加法器和32位寄存器是控制”地址步长”的----控制了频率 10位加法器和10位寄存器是控制读取正弦波ROM1与读取正弦波ROM2的”地址差”----控制相位差(移相) POUT和FOUT分别为10位输出,可以分别与两个高速D/A相接,他们分别输出参考信号和可移相正弦波信号。
2
图1 基于DDS的数字移相信号发生器电路模型图
[31..22] [31..22] 正弦波 ROM1 10位 寄存器 POUT 10位 加法器 [9..2] PW [31..0] [31..0] 32位 加法器 正弦波 ROM2 FOUT [27..20] 32位 寄存器 FW CLK
3
图2 数字式移相信号发生器完整结构
4
数字移相信号发生器顶层设计文件 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;
5
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) ); 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) ); 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) ); COMPONENT SIN_ROM 位地址10位数据正弦信号数据ROM PORT ( address : IN STD_LOGIC_VECTOR(9 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) );
6
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); BEGIN F32B(27 DOWNTO 20)<=FWORD ; F32B(31 DOWNTO 28)<="0000"; F32B(19 DOWNTO 0)<=" " ; 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;
7
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); BEGIN F32B(27 DOWNTO 20)<=FWORD ; F32B(31 DOWNTO 28)<="0000"; F32B(19 DOWNTO 0)<=" " ; 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 ),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;
8
32位加法器,10位加法器略去 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;
9
32位寄存器,10位寄存器略去 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG32B IS PORT ( CLK : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); END REG32B; ARCHITECTURE behav OF REG32B IS BEGIN PROCESS(CLK, DIN) IF CLK'EVENT AND Load = '1' THEN DOUT <= DIN; END IF; END PROCESS; END behav;
10
设CLK=1MHZ,ROM地址线位10条(000-3FFH,1024个),
FW 10位 加法器 寄存器 正弦波 ROM2 FOUT [7..0] [9..0] CLK ADD 启始地址ADD=000H 当FW=08H=8D 当FW=01H=1D 下一个CLK,ADD=008H=8D 下一个CLK,ADD=001H=1D 扫描一次ROM需要的CLK 扫描一次ROM需要的CLK 1024÷8=128 1024÷1=1024 扫描一次ROM需要的时间 扫描一次ROM需要的时间 1μS×128=128μS 1μS×1024=1024μS 输出频率=7.8125KHZ 输出频率≈976HZ
11
设CLK=1MHZ,ROM地址线位10条(000-3FFH,1024个),
PW 10位 加法器 寄存器 正弦波 ROM1 POUT [7..0] [9..0] CLK ADD 启始地址ADD=000H 总比FOUT超前”一个”地址 “跳一个”地址相当于 360°÷1024= ° 当PW=01H=1D 当PW=08H=8D 超前 超前 ° °×8=2.8125°
Similar presentations