?? i2c_cnt.vhd
字號:
-- I2C_cnt.VHD是I2C總線控制器,它包括以下文件:
-- I2C.vhd :主要完成I2c總線的命令,啟動(s),主控器的寫操作,主控器讀操作,被控器應(yīng)答(ack),
-- 主控器的應(yīng)答(ACKm),停止等;
-- ENA_sda_out.vhd:二選一選擇器;
-- Rom.vhd:用來存放要配置的寄存器的數(shù)據(jù),此文件包括在I2C.vhd中。
-- SRL16.vhd:延時模塊
-- Divide_clk.vhd:分頻器,把源時鐘128分頻(源時鐘頻率為30M),分頻輸出是30M/128=234.375KHz
-- 配置完被控器后(SAA7114),在輸出復(fù)位信號(Chip_rst),為CPLD內(nèi)的其它模塊復(fù)位,執(zhí)行程序。
--
--
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE ieee.std_logic_arith.all;
ENTITY I2C_CNT IS
PORT ( CLK :IN STD_LOGIC;
RST :IN STD_LOGIC;
SDA :INOUT STD_LOGIC;
CHIP_RST :OUT STD_LOGIC;
CLK_OUT :OUT STD_LOGIC;
TEST :OUT STD_LOGIC;
SCL :OUT STD_LOGIC
);
END I2C_CNT;
ARCHITECTURE RTL OF I2C_CNT IS
COMPONENT I2C
PORT ( CLK :IN STD_LOGIC;
RST :IN STD_LOGIC;
SDA_IN :IN STD_LOGIC;
CHIP_RST :OUT STD_LOGIC;
SCL :OUT STD_LOGIC;
ENA_SDA_OUT :OUT STD_LOGIC;
test_OUT :out std_logic;
SDA_OUT :OUT STD_LOGIC);
END COMPONENT;
COMPONENT ENA_SDA_OUT
PORT ( ENA_SDA_OUT :IN STD_LOGIC;
SDA_OUT :IN STD_LOGIC;
SDA :OUT STD_LOGIC);
END COMPONENT;
COMPONENT SRL16
PORT ( Q : out std_logic;
Clk : in std_logic;
A : in std_logic_VECTOR(3 DOWNTO 0);
D : in std_logic);
END COMPONENT;
COMPONENT DIVIDE_CLK_TEST -- 時鐘分頻器
PORT( CLK :IN STD_LOGIC; -- 30M的時鐘或別的外部輸入時鐘
DIVIDE_CLK :OUT STD_LOGIC -- 輸出240.375K的時鐘
);
END COMPONENT;
COMPONENT DELAY_RST --復(fù)位延時
PORT ( RST :IN STD_LOGIC; -- 來自于SAA711
CLK :IN STD_LOGIC;
RST_OUT :OUT STD_LOGIC -- 輸出到CPLD
);
END COMPONENT;
SIGNAL ENA_SDA :STD_LOGIC;
SIGNAL SDA_OUTPUT :STD_LOGIC;
SIGNAL RESET :STD_LOGIC;
SIGNAL RST_CPLD :STD_LOGIC;
SIGNAL W_DIVIDE_CLK:STD_LOGIC;
BEGIN
I2C: I2C PORT MAP (CLK=>W_DIVIDE_CLK, RST=>RST_CPLD, SDA_IN=>SDA, CHIP_RST=>CHIP_RST,
SCL=>SCL,ENA_SDA_OUT=>ENA_SDA,SDA_OUT=>SDA_OUTPUT,TEST_OUT=>TEST) ;
ENA_SDA_OUT: ENA_SDA_OUT PORT MAP (ENA_SDA_OUT=>ENA_SDA,SDA=>SDA,
SDA_OUT=>SDA_OUTPUT);
SRL16: SRL16 PORT MAP (Q=>RESET,CLK=>W_DIVIDE_CLK,A=>"1111",D=>RST);
DIVIDE_CLK: DIVIDE_CLK_TEST PORT MAP (CLK=>CLK,DIVIDE_CLK=>W_DIVIDE_CLK);
DELAY_RST : DELAY_RST PORT MAP(CLK=>CLK,RST=>RESET,RST_OUT=>RST_CPLD);
CLK_OUT<=RST_CPLD;
--TEST<=RST_CPLD;
END RTL;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -