cpu16/src/I2C.vhd

41 lines
1.1 KiB
VHDL

-- I2C.vhd
-- Date: Wed Jan 31 13:05:40 2024
-- Author: Yannick Reiß
-- E-Mail: schnick@nickr.eu
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity I2C is
port (
Clk : in std_logic;
SDA_In : in std_logic;
SCL_In : in std_logic;
ClientR : in std_logic_vector(15 downto 0);
ServerR : in std_logic_vector(15 downto 0);
SDA_Out : out std_logic;
SCL_Out : out std_logic;
ClientW : out std_logic_vector(15 downto 0)
);
end I2C;
architecture Implementation of I2C is
signal Clk100k : std_logic := '0';
signal Clk100Counter : std_logic_vector(10 downto 0) := (others => '0');
signal PackageReg : std_logic_vector(11 downto 0) := (others => '0');
begin
ClkSplit100k : process(Clk)
begin
if rising_edge(Clk) then
if unsigned(Clk100Counter) >= 500 then
Clk100Counter <= (others => '0');
Clk100k <= not Clk100k;
else
Clk100Counter <= std_logic_vector(unsigned(Clk100Counter) + 1);
end if;
end if;
end process ClkSplit100k;
end Implementation;