Skip to content
Snippets Groups Projects
Commit 206ccd26 authored by Dimitris Lampridis's avatar Dimitris Lampridis
Browse files

wb_crossbar: introfuce generic to control WB mode (classic, pipelined) for SDB ROM WB interface

parent a47a6bb9
Branches
Tags
No related merge requests found
...@@ -34,12 +34,14 @@ entity sdb_rom is ...@@ -34,12 +34,14 @@ entity sdb_rom is
g_layout : t_sdb_record_array; g_layout : t_sdb_record_array;
g_masters : natural; g_masters : natural;
g_bus_end : unsigned(63 downto 0); g_bus_end : unsigned(63 downto 0);
g_sdb_name : string := "WB4-Crossbar-GSI "); g_wb_mode : t_wishbone_interface_mode := CLASSIC;
g_sdb_name : string := "WB4-Crossbar-GSI ");
port( port(
clk_sys_i : in std_logic; clk_sys_i : in std_logic;
master_i : in std_logic_vector(g_masters-1 downto 0); rst_n_i : in std_logic := '1';
slave_i : in t_wishbone_slave_in; master_i : in std_logic_vector(g_masters-1 downto 0);
slave_o : out t_wishbone_slave_out); slave_i : in t_wishbone_slave_in;
slave_o : out t_wishbone_slave_out);
end sdb_rom; end sdb_rom;
architecture rtl of sdb_rom is architecture rtl of sdb_rom is
...@@ -159,21 +161,40 @@ architecture rtl of sdb_rom is ...@@ -159,21 +161,40 @@ architecture rtl of sdb_rom is
signal r_flag : t_wishbone_data; signal r_flag : t_wishbone_data;
signal r_ack : std_logic; signal r_ack : std_logic;
signal slave_in : t_wishbone_slave_in;
signal slave_out : t_wishbone_slave_out;
begin begin
slave_o.dat <= r_rom or r_flag; cmp_sdb_wb_adapter : wb_slave_adapter
slave_o.ack <= r_ack; generic map (
slave_o.err <= '0'; g_master_use_struct => TRUE,
slave_o.rty <= '0'; g_master_mode => CLASSIC,
slave_o.stall <= '0'; g_master_granularity => BYTE,
g_slave_use_struct => TRUE,
g_slave_mode => g_wb_mode,
g_slave_granularity => BYTE)
port map (
clk_sys_i => clk_sys_i,
rst_n_i => rst_n_i,
slave_i => slave_i,
slave_o => slave_o,
master_i => slave_out,
master_o => slave_in);
slave_out.dat <= r_rom or r_flag;
slave_out.ack <= r_ack;
slave_out.err <= '0';
slave_out.rty <= '0';
slave_out.stall <= '0';
s_adr <= unsigned(slave_i.adr(c_rom_depth+c_rom_lowbits-1 downto c_rom_lowbits)); s_adr <= unsigned(slave_in.adr(c_rom_depth+c_rom_lowbits-1 downto c_rom_lowbits));
s_sel <= unsigned(f_msi_flag_index(master_i)); s_sel <= unsigned(f_msi_flag_index(master_i));
slave_clk : process(clk_sys_i) slave_clk : process(clk_sys_i)
begin begin
if (rising_edge(clk_sys_i)) then if (rising_edge(clk_sys_i)) then
r_ack <= slave_i.cyc and slave_i.stb; r_ack <= slave_in.cyc and slave_in.stb;
r_rom <= rom(to_integer(s_adr)); r_rom <= rom(to_integer(s_adr));
r_flag <= (others => '0'); r_flag <= (others => '0');
if s_adr = s_sel and c_msi then if s_adr = s_sel and c_msi then
...@@ -181,5 +202,5 @@ begin ...@@ -181,5 +202,5 @@ begin
end if; end if;
end if; end if;
end process; end process;
end rtl; end rtl;
...@@ -37,6 +37,7 @@ entity xwb_sdb_crossbar is ...@@ -37,6 +37,7 @@ entity xwb_sdb_crossbar is
g_wraparound : boolean := true; g_wraparound : boolean := true;
g_layout : t_sdb_record_array; g_layout : t_sdb_record_array;
g_sdb_addr : t_wishbone_address; g_sdb_addr : t_wishbone_address;
g_sdb_wb_mode : t_wishbone_interface_mode := CLASSIC;
g_sdb_name : string := "WB4-Crossbar-GSI "); g_sdb_name : string := "WB4-Crossbar-GSI ");
port( port(
clk_sys_i : in std_logic; clk_sys_i : in std_logic;
...@@ -216,9 +217,11 @@ begin ...@@ -216,9 +217,11 @@ begin
g_layout => c_layout, g_layout => c_layout,
g_masters => g_num_masters, g_masters => g_num_masters,
g_bus_end => c_bus_last, g_bus_end => c_bus_last,
g_wb_mode => g_sdb_wb_mode,
g_sdb_name => g_sdb_name) g_sdb_name => g_sdb_name)
port map( port map(
clk_sys_i => clk_sys_i, clk_sys_i => clk_sys_i,
rst_n_i => rst_n_i,
master_i => sdb_sel, master_i => sdb_sel,
slave_i => master_o_1(g_num_slaves), slave_i => master_o_1(g_num_slaves),
slave_o => master_i_1(g_num_slaves)); slave_o => master_i_1(g_num_slaves));
......
...@@ -425,6 +425,7 @@ package wishbone_pkg is ...@@ -425,6 +425,7 @@ package wishbone_pkg is
g_wraparound : boolean := true; g_wraparound : boolean := true;
g_layout : t_sdb_record_array; g_layout : t_sdb_record_array;
g_sdb_addr : t_wishbone_address; g_sdb_addr : t_wishbone_address;
g_sdb_wb_mode : t_wishbone_interface_mode := CLASSIC;
g_sdb_name : string := "WB4-Crossbar-GSI "); g_sdb_name : string := "WB4-Crossbar-GSI ");
port ( port (
clk_sys_i : in std_logic; clk_sys_i : in std_logic;
...@@ -482,12 +483,14 @@ package wishbone_pkg is ...@@ -482,12 +483,14 @@ package wishbone_pkg is
component sdb_rom is component sdb_rom is
generic( generic(
g_layout : t_sdb_record_array; g_layout : t_sdb_record_array;
g_masters : natural; g_masters : natural;
g_bus_end : unsigned(63 downto 0); g_bus_end : unsigned(63 downto 0);
g_sdb_name : string := "WB4-Crossbar-GSI "); g_wb_mode : t_wishbone_interface_mode := CLASSIC;
g_sdb_name : string := "WB4-Crossbar-GSI ");
port( port(
clk_sys_i : in std_logic; clk_sys_i : in std_logic;
rst_n_i : in std_logic := '1';
master_i : in std_logic_vector(g_masters-1 downto 0); master_i : in std_logic_vector(g_masters-1 downto 0);
slave_i : in t_wishbone_slave_in; slave_i : in t_wishbone_slave_in;
slave_o : out t_wishbone_slave_out); slave_o : out t_wishbone_slave_out);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment