移相正弦信号发生器设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图1 基于DDS的数字移相信号发生器电路模型图 [31..22] [9..2] 10位 加法器 [31..22] 10位 寄存器 正弦波 ROM1
PW
POUT
[31..0] [27..20] 32位 [31..0] 加法器 32位 寄存器
FW CLK
ห้องสมุดไป่ตู้
正弦波 ROM2
FOUT
图2 数字式移相信号发生器完整结构
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;
当PW=08H=8D 超前 0.351625°×8=2.8125°
数字移相信号发生器顶层设计文件
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;
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;
设CLK=1MHZ,ROM地址线位10条(000-3FFH,1024个), [9..0] [7..0] 10位 [9..0] 加法器 ADD 10位 寄存器
PW CLK
正弦波 ROM1
POUT
启始地址ADD=000H
总比FOUT超前”一个”地 址 “跳一个”地址相当于 360°÷1024=0.351625° 当PW=01H=1D 超前 0.351625°
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;
移相正弦信号发生器设计
采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图 正弦波ROM是存放正弦波数据的,10位数据线,10位地址线; “FW” 是8位频率控制字 “PW”是8位相移控制字 32位加法器和32位寄存器是控制”地址步长”的----控制了 频率 10位加法器和10位寄存器是控制读取正弦波ROM1与读取正 弦波ROM2的”地址差”----控制相位差(移相) POUT和FOUT分别为10位输出,可以分别与两个高速D/A 相接,他们分别输出参考信号和可移相正弦波信号。
设CLK=1MHZ,ROM地址线位10条(000-3FFH,1024个), [9..0] [7..0] 10位 [9..0] 加法器 ADD 10位 寄存器
FW CLK
正弦波 ROM2
FOUT
启始地址ADD=000H
当FW=08H=8D
当FW=01H=1D 下一个CLK,ADD=008H=8D 下一个CLK,ADD=001H=1D 扫描一次ROM需要的CLK 扫描一次ROM需要的CLK 1024÷1=1024 扫描一次ROM需要的时间 1µS×1024=1024µS 输出频率≈976HZ 1024÷8=128 扫描一次ROM需要的时间 1µS×128=128µS 输出频率=7.8125KHZ
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;
ARCHITECTURE one OF DDS_VHDL IS COMPONENT REG32B --32位锁存器 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 --10位锁存器 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 --32位加法器 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 --10位加法器 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 --10位地址10位数据正弦信号数据ROM PORT ( address : IN STD_LOGIC_VECTOR(9 DOWNTO 0); inclock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR(9 DOWNTO 0) ); END COMPONENT;