用VHDL設計正弦信號發生器


正弦信號發生器的結構由3部分組成:

1、計數器或地址信號發生器,要根據ROM大小來確定地址發生器寬度。(其實驗選擇6位地址信號發生器給ROM)

2、正弦信號數據存儲ROM(地址寬度6位,數據寬度8位),包含64個字的完整正弦波數據(1個完整周期)

3、8位D/A模塊(采用TLC5602超高頻數模轉換器),實現數模轉換,輸出模擬正弦波信號。

 

                                                                  結構圖

在正弦信號發生器結構圖中,地址信號發生器的時鍾信號有clk提供,假設其頻率為f0,正弦波數據ROM中存放每周期64個字節的波形數據,則8位

D/A轉換后的正弦信號頻率為:f=f0/64.

TLC5602X電路圖:

 

 

                                               並行DAC電路原理圖

 

1、產生6位計數器(地址發生器)

(1)、生成mif文件

 

(2)、6位地址,64個字,8位寬。

 

 

 (3)、生成包含完整周期的正弦波數據

 

 2、創建正弦波數據存儲ROM

(1)、選擇路徑

 

 (2)、創建

 

 (3)、選擇產生的rom

 

 (4)、添加文件

 

 (5)、更改時鍾,選擇周期

 

 (6)、去掉多余輸出

 

 (7)、添加,fim文件

 

 (8)、選中

 

產生文件程序:

LIBRARY ieee;
USE ieee.std_logic_1164.all;

LIBRARY altera_mf;
USE altera_mf.all;

ENTITY date_rom IS
PORT
(
address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END date_rom;


ARCHITECTURE SYN OF date_rom IS

SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);

 

COMPONENT altsyncram
GENERIC (
address_aclr_a : STRING;
clock_enable_input_a : STRING;
clock_enable_output_a : STRING;
init_file : STRING;
intended_device_family : STRING;
lpm_hint : STRING;
lpm_type : STRING;
numwords_a : NATURAL;
operation_mode : STRING;
outdata_aclr_a : STRING;
outdata_reg_a : STRING;
widthad_a : NATURAL;
width_a : NATURAL;
width_byteena_a : NATURAL
);
PORT (
address_a : IN STD_LOGIC_VECTOR (5 DOWNTO 0);
clock0 : IN STD_LOGIC ;
q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END COMPONENT;

BEGIN
q <= sub_wire0(7 DOWNTO 0);

altsyncram_component : altsyncram
GENERIC MAP (
address_aclr_a => "NONE",
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
init_file => "date.mif",
intended_device_family => "Cyclone IV E",
lpm_hint => "ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=ROM1",
lpm_type => "altsyncram",
numwords_a => 64,
operation_mode => "ROM",
outdata_aclr_a => "NONE",
outdata_reg_a => "UNREGISTERED",
widthad_a => 6,
width_a => 8,
width_byteena_a => 1
)
PORT MAP (
address_a => address,
clock0 => inclock,
q_a => sub_wire0
);

 

END SYN;

 3、正弦信號發生器頂層設計

程序:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity signt is
port(
clk_in:in std_logic;
dout:out std_logic_vector(7 downto 0);
clk_out:out std_logic
);
end;
architecture bhv of signt is
component date_rom
port(
address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);
inclock : IN STD_LOGIC := '1';
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
end component;
signal q1:std_LOGIC_VECTOR(5 downto 0);
begin
process(clk_in)
begin
if clk_in'event and clk_in='1' then
q1<=q1+1;
end if;
end process;
u1:date_rom port map(address=>q1,q=>dout,inclock=>clk_in);
clk_out<=not clk_in;
end;

 

仿真圖:

 

 rtl原圖:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM