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

📄 i2c_cnt.vhd

📁 vhdl的i2c程序
💻 VHD
字号:
--   I2C_cnt.VHD是I2C总线控制器,它包括以下文件:
--         I2C.vhd :主要完成I2c总线的命令,启动(s),主控器的写操作,主控器读操作,被控器应答(ack),
--                  主控器的应答(ACKm),停止等;
--         ENA_sda_out.vhd:二选一选择器;
--         Rom.vhd:用来存放要配置的寄存器的数据,此文件包括在I2C.vhd中。
--         SRL16.vhd:延时模块
--         Divide_clk.vhd:分频器,把源时钟128分频(源时钟频率为30M),分频输出是30M/128=234.375KHz
--   配置完被控器后(SAA7114),在输出复位信号(Chip_rst),为CPLD内的其它模块复位,执行程序。
--
--
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          --复位延时
 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;    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -