?? 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 + -