]> git.the-white-hart.net Git - vhdl/commitdiff
Organize utility library
authorRyan <>
Wed, 17 Sep 2025 21:23:28 +0000 (16:23 -0500)
committerRyan <>
Wed, 17 Sep 2025 21:23:28 +0000 (16:23 -0500)
libraries/utility/fifo.vhd
libraries/utility/multiclk_ram.vhd [deleted file]
libraries/utility/tests/test_mapper.vhd [deleted file]
libraries/utility/wb_mapper.vhd [deleted file]
libraries/utility/wb_mux2.vhd [deleted file]
libraries/utility/wb_mux4.vhd [deleted file]

index 303989f06b44a17fa4dd7d7d00286f345b0b9f37..b8feaa17641b59ed60988d0bb4c055b51f0c2a34 100644 (file)
@@ -1,5 +1,3 @@
--- TODO: -- TODO: https://eecs.umich.edu/courses/doing_dsp/handout/SRL16E.pdf
---       Play with using shift-registers to make this more dense
 library ieee;
 use ieee.std_logic_1164.all;
 use ieee.std_logic_misc.all;
diff --git a/libraries/utility/multiclk_ram.vhd b/libraries/utility/multiclk_ram.vhd
deleted file mode 100644 (file)
index 1a6cddb..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-
-entity multiclk_ram is
-       generic (
-               A: integer := 4;  -- Address width
-               N: integer := 8;  -- Data width
-       );
-       port (
-               -- The "native" clock domain, where the RAM itself lives
-               -- Read-only, and reads are asynchronous (clk_a_i is needed for signal domain crossing, not access)
-               clk_a_i: in  std_logic;
-               adr_a_i: in  std_logic_vector(A-1 downto 0);
-               dat_a_o: out std_logic_vector(N-1 downto 0);
-
-               -- The "external" clock domain, where the operator lives
-               -- Read and write
-               clk_b_i: in  std_logic;
-               stb_b_i: in  std_logic;
-               we_b_i:  in  std_logic;
-               ack_b_o: out std_logic;
-               adr_b_i: in  std_logic_vector(A-1 downto 0);
-               dat_b_i: in  std_logic_vector(N-1 downto 0);
-               dat_b_o: out std_logic_vector(N-1 downto 0);
-       );
-end multiclk_ram;
-
-
-architecture behavioral of multiclk_ram is
-begin
-end behavioral;
diff --git a/libraries/utility/tests/test_mapper.vhd b/libraries/utility/tests/test_mapper.vhd
deleted file mode 100644 (file)
index 5b033fc..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-
-library work;
-
-
-entity test_mapper is
-end test_mapper;
-
-
-architecture behavior of test_mapper is
-
-       signal cyc:       std_logic;
-       signal stb:       std_logic;
-       signal we:        std_logic;
-       signal ack:       std_logic;
-       signal adr:       std_logic_vector(31 downto 0);
-       signal dat_mosi:  std_logic_vector(7 downto 0);
-       signal dat_miso:  std_logic_vector(7 downto 0);
-
-       signal mem_cyc:   std_logic;
-       signal mem_stb:   std_logic;
-       signal mem_we:    std_logic;
-       signal mem_ack:   std_logic;
-       signal mem_adr:   std_logic_vector(31 downto 0);
-       signal mem_mosi:  std_logic_vector(7 downto 0);
-       signal mem_miso:  std_logic_vector(7 downto 0);
-
-       signal tile_cyc:  std_logic;
-       signal tile_stb:  std_logic;
-       signal tile_we:   std_logic;
-       signal tile_ack:  std_logic;
-       signal tile_adr:  std_logic_vector(31 downto 0);
-       signal tile_mosi: std_logic_vector(7 downto 0);
-       signal tile_miso: std_logic_vector(7 downto 0);
-
-       signal host_cyc:  std_logic;
-       signal host_stb:  std_logic;
-       signal host_we:   std_logic;
-       signal host_ack:  std_logic;
-       signal host_adr:  std_logic_vector(31 downto 0);
-       signal host_mosi: std_logic_vector(7 downto 0);
-       signal host_miso: std_logic_vector(7 downto 0);
-
-       signal ps2_cyc:   std_logic;
-       signal ps2_stb:   std_logic;
-       signal ps2_we:    std_logic;
-       signal ps2_ack:   std_logic;
-       signal ps2_adr:   std_logic_vector(31 downto 0);
-       signal ps2_mosi:  std_logic_vector(7 downto 0);
-       signal ps2_miso:  std_logic_vector(7 downto 0);
-
-       signal uart_cyc:  std_logic;
-       signal uart_stb:  std_logic;
-       signal uart_we:   std_logic;
-       signal uart_ack:  std_logic;
-       signal uart_adr:  std_logic_vector(31 downto 0);
-       signal uart_mosi: std_logic_vector(7 downto 0);
-       signal uart_miso: std_logic_vector(7 downto 0);
-
-begin
-
-       p_test: process
-       begin
-               -- Initial values
-               cyc       <= '0';
-               stb       <= '0';
-               we        <= '0';
-               adr       <= x"00000000";
-               dat_mosi  <= x"00";
-               mem_miso  <= x"11";
-               tile_miso <= x"aa";
-               host_miso <= x"bb";
-               ps2_miso  <= x"cc";
-               uart_miso <= x"dd";
-               mem_ack   <= '0';
-               tile_ack  <= '0';
-               host_ack  <= '0';
-               ps2_ack   <= '0';
-               uart_ack  <= '0';
-
-               cyc      <= '1';
-               stb      <= '1';
-               we       <= '0';
-               adr      <= x"00000000";
-               dat_mosi <= x"00";
-
-               wait for 100 ns;
-
-               cyc      <= '1';
-               stb      <= '1';
-               we       <= '0';
-               adr      <= x"02000000";
-               dat_mosi <= x"00";
-
-               -- Done
-               wait;
-       end process;
-
-       e_uut: entity work.wb_mapper
-               generic map (
-                       A_WIDTH => 32,
-                       D_WIDTH => 8
-               )
-               port map (
-                       cyc_i   => cyc,
-                       stb_i   => stb,
-                       we_i    => we,
-                       ack_o   => ack,
-                       adr_i   => adr,
-                       dat_i   => dat_mosi,
-                       dat_o   => dat_miso,
-
-                       -- Flash: 0x00000000-0x00ffffff
-                       -- Ram:   0x01000000-0x01ffffff
-                       mask_0  => "00000010000000000000000000000000",
-                       match_0 => "00000000000000000000000000000000",
-                       cyc_o_0 => mem_cyc,
-                       stb_o_0 => mem_stb,
-                       we_o_0  => mem_we,
-                       ack_i_0 => mem_ack,
-                       adr_o_0 => mem_adr,
-                       dat_o_0 => mem_mosi,
-                       dat_i_0 => mem_miso,
-
-                       -- Vbuf:  0x02000000-0x02001fff
-                       -- Tiles: 0x02002000-0x02003fff
-                       mask_1  => "00000010000000000100000000000000",
-                       match_1 => "00000010000000000000000000000000",
-                       cyc_o_1 => tile_cyc,
-                       stb_o_1 => tile_stb,
-                       we_o_1  => tile_we,
-                       ack_i_1 => tile_ack,
-                       adr_o_1 => tile_adr,
-                       dat_o_1 => tile_mosi,
-                       dat_i_1 => tile_miso,
-
-                       -- Host:  0x02004000-0x02004007
-                       mask_2  => "00000010000000000100000000011000",
-                       match_2 => "00000010000000000100000000000000",
-                       cyc_o_2 => host_cyc,
-                       stb_o_2 => host_stb,
-                       we_o_2  => host_we,
-                       ack_i_2 => host_ack,
-                       adr_o_2 => host_adr,
-                       dat_o_2 => host_mosi,
-                       dat_i_2 => host_miso,
-
-                       -- PS2:   0x02004008-0x0200400f
-                       mask_3  => "00000010000000000100000000011000",
-                       match_3 => "00000010000000000100000000001000",
-                       cyc_o_3 => ps2_cyc,
-                       stb_o_3 => ps2_stb,
-                       we_o_3  => ps2_we,
-                       ack_i_3 => ps2_ack,
-                       adr_o_3 => ps2_adr,
-                       dat_o_3 => ps2_mosi,
-                       dat_i_3 => ps2_miso,
-
-                       -- UART:  0x02004010-0x02004017
-                       mask_4  => "00000010000000000100000000011000",
-                       match_4 => "00000010000000000100000000010000",
-                       cyc_o_4 => uart_cyc,
-                       stb_o_4 => uart_stb,
-                       we_o_4  => uart_we,
-                       ack_i_4 => uart_ack,
-                       adr_o_4 => uart_adr,
-                       dat_o_4 => uart_mosi,
-                       dat_i_4 => uart_miso,
-
-                       mask_5  => "00000000000000000000000000000000",
-                       match_5 => "00000000000000000000000000000001",
-                       cyc_o_5 => open,
-                       stb_o_5 => open,
-                       we_o_5  => open,
-                       ack_i_5 => '1',
-                       adr_o_5 => open,
-                       dat_o_5 => open,
-                       dat_i_5 => "00000000",
-
-                       mask_6  => "00000000000000000000000000000000",
-                       match_6 => "00000000000000000000000000000001",
-                       cyc_o_6 => open,
-                       stb_o_6 => open,
-                       we_o_6  => open,
-                       ack_i_6 => '1',
-                       adr_o_6 => open,
-                       dat_o_6 => open,
-                       dat_i_6 => "00000000",
-
-                       mask_7  => "00000000000000000000000000000000",
-                       match_7 => "00000000000000000000000000000001",
-                       cyc_o_7 => open,
-                       stb_o_7 => open,
-                       we_o_7  => open,
-                       ack_i_7 => '1',
-                       adr_o_7 => open,
-                       dat_o_7 => open,
-                       dat_i_7 => "00000000"
-               );
-
-end;
diff --git a/libraries/utility/wb_mapper.vhd b/libraries/utility/wb_mapper.vhd
deleted file mode 100644 (file)
index 87f68ff..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-
-
-entity wb_mapper is
-       generic (
-               A_WIDTH: integer := 32;
-               D_WIDTH: integer := 8
-       );
-       port (
-               -- Master Wishbone interface
-               cyc_i:   in  std_logic;
-               stb_i:   in  std_logic;
-               we_i:    in  std_logic;
-               ack_o:   out std_logic;
-               adr_i:   in  std_logic_vector(31 downto 0);
-               dat_i:   in  std_logic_vector(7 downto 0);
-               dat_o:   out std_logic_vector(7 downto 0);
-
-               -- Device wishbone interfaces
-               mask_0:  in  std_logic_vector(A_WIDTH-1 downto 0);
-               match_0: in  std_logic_vector(A_WIDTH-1 downto 0);
-               cyc_o_0: out std_logic;
-               stb_o_0: out std_logic;
-               we_o_0:  out std_logic;
-               ack_i_0: in  std_logic;
-               adr_o_0: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_0: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_0: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               mask_1:  in  std_logic_vector(A_WIDTH-1 downto 0);
-               match_1: in  std_logic_vector(A_WIDTH-1 downto 0);
-               cyc_o_1: out std_logic;
-               stb_o_1: out std_logic;
-               we_o_1:  out std_logic;
-               ack_i_1: in  std_logic;
-               adr_o_1: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_1: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_1: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               mask_2:  in  std_logic_vector(A_WIDTH-1 downto 0);
-               match_2: in  std_logic_vector(A_WIDTH-1 downto 0);
-               cyc_o_2: out std_logic;
-               stb_o_2: out std_logic;
-               we_o_2:  out std_logic;
-               ack_i_2: in  std_logic;
-               adr_o_2: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_2: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_2: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               mask_3:  in  std_logic_vector(A_WIDTH-1 downto 0);
-               match_3: in  std_logic_vector(A_WIDTH-1 downto 0);
-               cyc_o_3: out std_logic;
-               stb_o_3: out std_logic;
-               we_o_3:  out std_logic;
-               ack_i_3: in  std_logic;
-               adr_o_3: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_3: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_3: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               mask_4:  in  std_logic_vector(A_WIDTH-1 downto 0);
-               match_4: in  std_logic_vector(A_WIDTH-1 downto 0);
-               cyc_o_4: out std_logic;
-               stb_o_4: out std_logic;
-               we_o_4:  out std_logic;
-               ack_i_4: in  std_logic;
-               adr_o_4: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_4: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_4: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               mask_5:  in  std_logic_vector(A_WIDTH-1 downto 0);
-               match_5: in  std_logic_vector(A_WIDTH-1 downto 0);
-               cyc_o_5: out std_logic;
-               stb_o_5: out std_logic;
-               we_o_5:  out std_logic;
-               ack_i_5: in  std_logic;
-               adr_o_5: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_5: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_5: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               mask_6:  in  std_logic_vector(A_WIDTH-1 downto 0);
-               match_6: in  std_logic_vector(A_WIDTH-1 downto 0);
-               cyc_o_6: out std_logic;
-               stb_o_6: out std_logic;
-               we_o_6:  out std_logic;
-               ack_i_6: in  std_logic;
-               adr_o_6: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_6: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_6: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               mask_7:  in  std_logic_vector(A_WIDTH-1 downto 0);
-               match_7: in  std_logic_vector(A_WIDTH-1 downto 0);
-               cyc_o_7: out std_logic;
-               stb_o_7: out std_logic;
-               we_o_7:  out std_logic;
-               ack_i_7: in  std_logic;
-               adr_o_7: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_7: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_7: in  std_logic_vector(D_WIDTH-1 downto 0)
-       );
-end wb_mapper;
-
-
-architecture behavioral of wb_mapper is
-
-       signal sel_0: std_logic;
-       signal sel_1: std_logic;
-       signal sel_2: std_logic;
-       signal sel_3: std_logic;
-       signal sel_4: std_logic;
-       signal sel_5: std_logic;
-       signal sel_6: std_logic;
-       signal sel_7: std_logic;
-       signal dummy: std_logic;
-
-       signal en_0:  std_logic_vector(7 downto 0);
-       signal en_1:  std_logic_vector(7 downto 0);
-       signal en_2:  std_logic_vector(7 downto 0);
-       signal en_3:  std_logic_vector(7 downto 0);
-       signal en_4:  std_logic_vector(7 downto 0);
-       signal en_5:  std_logic_vector(7 downto 0);
-       signal en_6:  std_logic_vector(7 downto 0);
-       signal en_7:  std_logic_vector(7 downto 0);
-
-begin
-
-       sel_0   <= '1' when (adr_i and mask_0) = match_0 else '0';
-       en_0    <= (others => sel_0);
-       cyc_o_0 <= cyc_i and sel_0;
-       stb_o_0 <= stb_i;
-       we_o_0  <= we_i;
-       adr_o_0 <= adr_i;
-       dat_o_0 <= dat_i;
-
-       sel_1   <= '1' when (adr_i and mask_1) = match_1 else '0';
-       en_1    <= (others => sel_1);
-       cyc_o_1 <= cyc_i and sel_1;
-       stb_o_1 <= stb_i;
-       we_o_1  <= we_i;
-       adr_o_1 <= adr_i;
-       dat_o_1 <= dat_i;
-
-       sel_2   <= '1' when (adr_i and mask_2) = match_2 else '0';
-       en_2    <= (others => sel_2);
-       cyc_o_2 <= cyc_i and sel_2;
-       stb_o_2 <= stb_i;
-       we_o_2  <= we_i;
-       adr_o_2 <= adr_i;
-       dat_o_2 <= dat_i;
-
-       sel_3   <= '1' when (adr_i and mask_3) = match_3 else '0';
-       en_3    <= (others => sel_3);
-       cyc_o_3 <= cyc_i and sel_3;
-       stb_o_3 <= stb_i;
-       we_o_3  <= we_i;
-       adr_o_3 <= adr_i;
-       dat_o_3 <= dat_i;
-
-       sel_4   <= '1' when (adr_i and mask_4) = match_4 else '0';
-       en_4    <= (others => sel_4);
-       cyc_o_4 <= cyc_i and sel_4;
-       stb_o_4 <= stb_i;
-       we_o_4  <= we_i;
-       adr_o_4 <= adr_i;
-       dat_o_4 <= dat_i;
-
-       sel_5   <= '1' when (adr_i and mask_5) = match_5 else '0';
-       en_5    <= (others => sel_5);
-       cyc_o_5 <= cyc_i and sel_5;
-       stb_o_5 <= stb_i;
-       we_o_5  <= we_i;
-       adr_o_5 <= adr_i;
-       dat_o_5 <= dat_i;
-
-       sel_6   <= '1' when (adr_i and mask_6) = match_6 else '0';
-       en_6    <= (others => sel_6);
-       cyc_o_6 <= cyc_i and sel_6;
-       stb_o_6 <= stb_i;
-       we_o_6  <= we_i;
-       adr_o_6 <= adr_i;
-       dat_o_6 <= dat_i;
-
-       sel_7   <= '1' when (adr_i and mask_7) = match_7 else '0';
-       en_7    <= (others => sel_7);
-       cyc_o_7 <= cyc_i and sel_7;
-       stb_o_7 <= stb_i;
-       we_o_7  <= we_i;
-       adr_o_7 <= adr_i;
-       dat_o_7 <= dat_i;
-
-       dummy <= not (sel_0 or sel_1 or sel_2 or sel_3 or sel_4 or sel_5 or sel_6 or sel_7);
-
-       ack_o <= (ack_i_0 and sel_0) or
-                (ack_i_1 and sel_1) or
-                (ack_i_2 and sel_2) or
-                (ack_i_3 and sel_3) or
-                (ack_i_4 and sel_4) or
-                (ack_i_5 and sel_5) or
-                (ack_i_6 and sel_6) or
-                (ack_i_7 and sel_7) or
-                dummy;  -- If none are selected, acknowledge to eat the bus transaction
-
-       dat_o <= (dat_i_0 and en_0) or
-                (dat_i_1 and en_1) or
-                (dat_i_2 and en_2) or
-                (dat_i_3 and en_3) or
-                (dat_i_4 and en_4) or
-                (dat_i_5 and en_5) or
-                (dat_i_6 and en_6) or
-                (dat_i_7 and en_7);
-
-end behavioral;
diff --git a/libraries/utility/wb_mux2.vhd b/libraries/utility/wb_mux2.vhd
deleted file mode 100644 (file)
index e0eb31d..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-
-
-entity wb_mux2 is
-       generic (
-               WIDTH: integer := 8
-       );
-       port (
-               sel:     in  std_logic;
-
-               -- Single master
-               cyc_i:   in  std_logic;
-               ack_o:   out std_logic;
-               dat_o:   out std_logic_vector(WIDTH-1 downto 0);
-
-               -- Multiple devices
-               cyc_o_0: out std_logic;
-               ack_i_0: in  std_logic;
-               dat_i_0: in  std_logic_vector(WIDTH-1 downto 0);
-
-               cyc_o_1: out std_logic;
-               ack_i_1: in  std_logic;
-               dat_i_1: in  std_logic_vector(WIDTH-1 downto 0)
-       );
-end wb_mux2;
-
-
-architecture behavioral of wb_mux2 is
-begin
-
-       cyc_o_0 <= cyc_i when sel  = '0' else '0';
-       cyc_o_1 <= cyc_i when sel /= '0' else '0';
-
-       with sel select dat_o <=
-               dat_i_0 when '0',
-               dat_i_1 when others;
-
-       with sel select ack_o <=
-               ack_i_0 when '0',
-               ack_i_1 when others;
-
-end behavioral;
diff --git a/libraries/utility/wb_mux4.vhd b/libraries/utility/wb_mux4.vhd
deleted file mode 100644 (file)
index 53bf871..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-library ieee;
-use ieee.std_logic_1164.all;
-
-
-entity wb_mux4 is
-       generic (
-               A_WIDTH: integer := 32;
-               D_WIDTH: integer := 8
-       );
-       port (
-               sel:   in  std_logic_vector(1 downto 0);
-
-               -- Wishbone interface to master
-               cyc_i: in  std_logic;
-               stb_i: in  std_logic;
-               we_i:  in  std_logic;
-               ack_o: out std_logic;
-               adr_i: in  std_logic_vector(A_WIDTH-1 downto 0);
-               dat_i: in  std_logic_vector(D_WIDTH-1 downto 0);
-               dat_o: out std_logic_vector(D_WIDTH-1 downto 0);
-
-               -- Wishbone interfaces to devices
-               cyc_o_0: out std_logic;
-               stb_o_0: out std_logic;
-               we_o_0:  in  std_logic;
-               ack_i_0: out std_logic;
-               adr_o_0: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_0: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_0: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               cyc_o_1: out std_logic;
-               stb_o_1: out std_logic;
-               we_o_1:  in  std_logic;
-               ack_i_1: out std_logic;
-               adr_o_1: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_1: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_1: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               cyc_o_2: out std_logic;
-               stb_o_2: out std_logic;
-               we_o_2:  in  std_logic;
-               ack_i_2: out std_logic;
-               adr_o_2: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_2: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_2: in  std_logic_vector(D_WIDTH-1 downto 0);
-
-               cyc_o_3: out std_logic;
-               stb_o_3: out std_logic;
-               we_o_3:  in  std_logic;
-               ack_i_3: out std_logic;
-               adr_o_3: out std_logic_vector(A_WIDTH-1 downto 0);
-               dat_o_3: out std_logic_vector(D_WIDTH-1 downto 0);
-               dat_i_3: in  std_logic_vector(D_WIDTH-1 downto 0)
-       );
-end wb_mux4;
-
-
-architecture behavioral of wb_mux4 is
-begin
-
-       cyc_o_0 <= cyc_i when sel = "00" else '0';
-       stb_o_0 <= stb_i;
-       we_o_0  <= we_i;
-       adr_o_0 <= adr_i;
-       dat_o_0 <= dat_i;
-
-       cyc_o_1 <= cyc_i when sel = "01" else '0';
-       stb_o_1 <= stb_i;
-       we_o_1  <= we_i;
-       adr_o_1 <= adr_i;
-       dat_o_1 <= dat_i;
-
-       cyc_o_2 <= cyc_i when sel = "10" else '0';
-       stb_o_2 <= stb_i;
-       we_o_2  <= we_i;
-       adr_o_2 <= adr_i;
-       dat_o_2 <= dat_i;
-
-       cyc_o_3 <= cyc_i when sel = "11" else '0';
-       stb_o_3 <= stb_i;
-       we_o_3  <= we_i;
-       adr_o_3 <= adr_i;
-       dat_o_3 <= dat_i;
-
-       with sel select ack_o <=
-               ack_i_0 when "00",
-               ack_i_1 when "01",
-               ack_i_2 when "10",
-               ack_i_3 when others;
-
-       with sel select dat_o <=
-               dat_i_0 when "00",
-               dat_i_1 when "01",
-               dat_i_2 when "10",
-               dat_i_3 when others;
-
-end behavioral;