⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dds1.vhd

📁 利用VHDL语言实现在
💻 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 + -