1 / 11

采用直接数字综合器 DDS 发生器的设计

移相正弦信号发生器设计. 采用直接数字综合器 DDS 发生器的设计. 原理:图 1 是此电路模型图. 正弦波 ROM 是存放正弦波数据的, 10 位数据线, 10 位地址线;. “FW” 是 8 位频率控制字. “PW” 是 8 位相移控制字. 32 位加法器和 32 位寄存器是控制”地址步长”的 ---- 控制了频率. 10 位加法器和 10 位寄存器是控制读取正弦波 ROM1 与读取正弦波 ROM2 的”地址差” ---- 控制相位差 ( 移相 ).

teva
Download Presentation

采用直接数字综合器 DDS 发生器的设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. 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)<="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;

  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)<="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;

  7. 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;

  8. 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) BEGIN IF CLK'EVENT AND Load = '1' THEN DOUT <= DIN; END IF; END PROCESS; END behav;

  9. 设CLK=1MHZ,ROM地址线位10条(000-3FFH,1024个), [9..0] ADD [9..0] 10位 加法器 正弦波 ROM2 FOUT [7..0] 10位 寄存器 FW 启始地址ADD=000H CLK 当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

  10. 设CLK=1MHZ,ROM地址线位10条(000-3FFH,1024个), [9..0] ADD [9..0] 10位 加法器 正弦波 ROM1 POUT [7..0] 10位 寄存器 PW 启始地址ADD=000H CLK 总比FOUT超前”一个”地址 “跳一个”地址相当于 360°÷1024=0.351625° 当PW=01H=1D 当PW=08H=8D 超前 超前 0.351625° 0.351625°×8=2.8125°

More Related