From d78e55d6fae8fd8ed89782536f19d9098672fc41 Mon Sep 17 00:00:00 2001
From: "Wesley W. Terpstra" <w.terpstra@gsi.de>
Date: Thu, 21 Apr 2016 18:00:20 +0200
Subject: [PATCH] msi: enable support in crossbar

---
 .../wishbone/wb_crossbar/xwb_sdb_crossbar.vhd | 28 ++++++++++++++++---
 modules/wishbone/wishbone_pkg.vhd             | 16 +++++++----
 2 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd b/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd
index 0de69e92..361b52f0 100644
--- a/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd
+++ b/modules/wishbone/wb_crossbar/xwb_sdb_crossbar.vhd
@@ -15,11 +15,15 @@ entity xwb_sdb_crossbar is
     clk_sys_i     : in  std_logic;
     rst_n_i       : in  std_logic;
     -- Master connections (INTERCON is a slave)
-    slave_i       : in  t_wishbone_slave_in_array(g_num_masters-1 downto 0);
-    slave_o       : out t_wishbone_slave_out_array(g_num_masters-1 downto 0);
+    slave_i       : in  t_wishbone_slave_in_array  (g_num_masters-1 downto 0);
+    slave_o       : out t_wishbone_slave_out_array (g_num_masters-1 downto 0);
+    msi_master_i  : in  t_wishbone_master_in_array (g_num_masters-1 downto 0) := (others => cc_dummy_master_in);
+    msi_master_o  : out t_wishbone_master_out_array(g_num_masters-1 downto 0);
     -- Slave connections (INTERCON is a master)
-    master_i      : in  t_wishbone_master_in_array(g_num_slaves-1 downto 0);
-    master_o      : out t_wishbone_master_out_array(g_num_slaves-1 downto 0));
+    master_i      : in  t_wishbone_master_in_array (g_num_slaves -1 downto 0);
+    master_o      : out t_wishbone_master_out_array(g_num_slaves -1 downto 0);
+    msi_slave_i   : in  t_wishbone_slave_in_array  (g_num_slaves -1 downto 0) := (others => cc_dummy_slave_in);
+    msi_slave_o   : out t_wishbone_slave_out_array (g_num_slaves -1 downto 0));
 end xwb_sdb_crossbar;
 
 architecture rtl of xwb_sdb_crossbar is
@@ -256,4 +260,20 @@ begin
       master_o      => master_o_1,
       sdb_sel_o     => sdb_sel);
 
+  msi : xwb_crossbar
+    generic map(
+      g_num_masters => g_num_slaves,
+      g_num_slaves  => g_num_masters,
+      g_registered  => g_registered,
+      g_address     => c_addresses.msi_address,
+      g_mask        => c_addresses.msi_mask)
+    port map(
+      clk_sys_i     => clk_sys_i,
+      rst_n_i       => rst_n_i,
+      slave_i       => msi_slave_i,
+      slave_o       => msi_slave_o,
+      master_i      => msi_master_i,
+      master_o      => msi_master_o,
+      sdb_sel_o     => open);
+
 end rtl;
diff --git a/modules/wishbone/wishbone_pkg.vhd b/modules/wishbone/wishbone_pkg.vhd
index 4d1826d6..358fe3c9 100644
--- a/modules/wishbone/wishbone_pkg.vhd
+++ b/modules/wishbone/wishbone_pkg.vhd
@@ -341,12 +341,16 @@ package wishbone_pkg is
       g_layout      : t_sdb_record_array;
       g_sdb_addr    : t_wishbone_address);
     port (
-      clk_sys_i : in  std_logic;
-      rst_n_i   : in  std_logic;
-      slave_i   : in  t_wishbone_slave_in_array(g_num_masters-1 downto 0);
-      slave_o   : out t_wishbone_slave_out_array(g_num_masters-1 downto 0);
-      master_i  : in  t_wishbone_master_in_array(g_num_slaves-1 downto 0);
-      master_o  : out t_wishbone_master_out_array(g_num_slaves-1 downto 0));
+      clk_sys_i     : in  std_logic;
+      rst_n_i       : in  std_logic;
+      slave_i       : in  t_wishbone_slave_in_array  (g_num_masters-1 downto 0);
+      slave_o       : out t_wishbone_slave_out_array (g_num_masters-1 downto 0);
+      msi_master_i  : in  t_wishbone_master_in_array (g_num_masters-1 downto 0) := (others => cc_dummy_master_in);
+      msi_master_o  : out t_wishbone_master_out_array(g_num_masters-1 downto 0);
+      master_i      : in  t_wishbone_master_in_array (g_num_slaves -1 downto 0);
+      master_o      : out t_wishbone_master_out_array(g_num_slaves -1 downto 0);
+      msi_slave_i   : in  t_wishbone_slave_in_array  (g_num_slaves -1 downto 0) := (others => cc_dummy_slave_in);
+      msi_slave_o   : out t_wishbone_slave_out_array (g_num_slaves -1 downto 0));
   end component;
   
   component xwb_register_link -- puts a register of delay between crossbars
-- 
GitLab