📄 dds1.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DDS1 IS --产生调相信号
PORT ( CLK : IN STD_LOGIC;
dds_out:out std_logic_vector(7 downto 0);
din:in std_logic);
END;
ARCHITECTURE one OF DDS1 IS
component ADDER7B IS
PORT ( A : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
B : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );
end component ADDER7B;
COMPONENT REG7B
PORT ( LOAD : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
DOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );
END COMPONENT;
COMPONENT SIN_ROM
PORT ( address : IN STD_LOGIC_VECTOR(6 DOWNTO 0);
clock : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );
END COMPONENT;
SIGNAL F7B : STD_LOGIC_VECTOR(6 DOWNTO 0);--输入的7位的频率字,作为累加值
SIGNAL D7B : STD_LOGIC_VECTOR(6 DOWNTO 0);--7位的地址信号,7位寄存器的输出
SIGNAL DIN7B : STD_LOGIC_VECTOR(6 DOWNTO 0);--7位的地址信号,7位寄存器的输入
SIGNAL P7B : STD_LOGIC_VECTOR(6 DOWNTO 0):="0000000";--7位相位字信号
SIGNAL LIN7B : STD_LOGIC_VECTOR( 6 DOWNTO 0);--输入到寄存器的地址信号
SIGNAL SIN7B : STD_LOGIC_VECTOR( 6 DOWNTO 0);--寄存器输出的地址信号
-- signal FWORD : STD_LOGIC_VECTOR(7 DOWNTO 0);--频率字信号
signal q:STD_LOGIC_VECTOR(8 DOWNTO 0);
BEGIN
F7B<=(1=>'1',others=>'0'); P7B(5 downto 0)<=(others=>'0');
--该频率能使一个码元周期包含有两个周期的正弦波信号
u1 : ADDER7B PORT MAP( A=>F7B,B=>D7B, S=>DIN7B );--32位加法器,产生DDS的地址累加
u2 : REG7B PORT MAP( DOUT=>D7B,DIN=>DIN7B, LOAD=>CLK );--32位寄存器,输出的结果送累加器
u3 : SIN_ROM PORT MAP( address=>SIN7B, q=>dds_out, clock=>CLK );--输出正弦psk信号
u4 : ADDER7B PORT MAP( A=>P7B,B=>D7B,S=>LIN7B );--输出累加后的相位
u5 : REG7B PORT MAP( DOUT=>SIN7B,DIN=>LIN7B, LOAD=>CLK );--10位寄存器,寄存输入ROM的地址
process(clk)
begin
if clk 'event and clk='1' then
q<=q+1; --一个码元周期包含有128个时钟周期
end if;
end process;
process(q(8))--控制相位
begin
if rising_edge(q(8)) then
if din='1' then P7B<=P7B+"1000000";
--在q=64的时刻,根据输入的值进行DPSK
end if;
end if;
end process;
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -