diff --git a/modules/wishbone/Manifest.py b/modules/wishbone/Manifest.py index 68c3aaa57e40f1d29f3c946507fab2199937a5d8..c8ee88c09ac2ed77d4e2d532abd4f3b98bf7ed83 100644 --- a/modules/wishbone/Manifest.py +++ b/modules/wishbone/Manifest.py @@ -12,7 +12,6 @@ modules = { "local" : "wb_uart", "wb_vic", "wb_spi", - "wb_virtual_uart", "wb_crossbar", "wb_lm32", "wb_slave_adapter", diff --git a/modules/wishbone/wishbone_pkg.vhd b/modules/wishbone/wishbone_pkg.vhd index b00d25cc887bf34e851aa10fa6e602183a463457..55c73ba3f7e7dbfce3fecb876debdff1efb2d267 100644 --- a/modules/wishbone/wishbone_pkg.vhd +++ b/modules/wishbone/wishbone_pkg.vhd @@ -72,8 +72,6 @@ package wishbone_pkg is -- Components declaration ------------------------------------------------------------------------------- - - component wb_slave_adapter generic ( g_master_use_struct : boolean; @@ -115,4 +113,351 @@ package wishbone_pkg is master_o : out t_wishbone_master_out); end component; + component wb_async_bridge + generic ( + g_simulation : integer; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_cpu_address_width : integer); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + cpu_cs_n_i : in std_logic; + cpu_wr_n_i : in std_logic; + cpu_rd_n_i : in std_logic; + cpu_bs_n_i : in std_logic_vector(3 downto 0); + cpu_addr_i : in std_logic_vector(g_cpu_address_width-1 downto 0); + cpu_data_b : inout std_logic_vector(31 downto 0); + cpu_nwait_o : out std_logic; + wb_adr_o : out std_logic_vector(c_wishbone_address_width - 1 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_stb_o : out std_logic; + wb_we_o : out std_logic; + wb_sel_o : out std_logic_vector(3 downto 0); + wb_cyc_o : out std_logic; + wb_dat_i : in std_logic_vector (c_wishbone_data_width-1 downto 0); + wb_ack_i : in std_logic; + wb_stall_i : in std_logic := '0'); + end component; + + component xwb_async_bridge + generic ( + g_simulation : integer; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_cpu_address_width : integer); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + cpu_cs_n_i : in std_logic; + cpu_wr_n_i : in std_logic; + cpu_rd_n_i : in std_logic; + cpu_bs_n_i : in std_logic_vector(3 downto 0); + cpu_addr_i : in std_logic_vector(g_cpu_address_width-1 downto 0); + cpu_data_b : inout std_logic_vector(31 downto 0); + cpu_nwait_o : out std_logic; + master_o : out t_wishbone_master_out; + master_i : in t_wishbone_master_in); + end component; + + component xwb_bus_fanout + generic ( + g_num_outputs : natural; + g_bits_per_slave : integer; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_slave_interface_mode : t_wishbone_interface_mode := CLASSIC); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + master_i : in t_wishbone_master_in_array(0 to g_num_outputs-1); + master_o : out t_wishbone_master_out_array(0 to g_num_outputs-1)); + end component; + + component xwb_crossbar + generic ( + g_num_masters : integer; + g_num_slaves : integer; + g_registered : boolean); + 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); + cfg_address_i : in t_wishbone_address_array(g_num_slaves-1 downto 0); + cfg_mask_i : in t_wishbone_address_array(g_num_slaves-1 downto 0)); + end component; + + component xwb_dpram + generic ( + g_size : natural; + g_init_file : string := ""; + g_must_have_init_file : boolean := true; + g_slave1_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_slave2_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_slave1_granularity : t_wishbone_address_granularity := WORD; + g_slave2_granularity : t_wishbone_address_granularity := WORD); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave1_i : in t_wishbone_slave_in; + slave1_o : out t_wishbone_slave_out; + slave2_i : in t_wishbone_slave_in; + slave2_o : out t_wishbone_slave_out); + end component; + + component wb_gpio_port + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_pins : natural range 1 to 256; + g_with_builtin_tristates : boolean := false); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_cyc_i : in std_logic; + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_adr_i : in std_logic_vector(7 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + gpio_b : inout std_logic_vector(g_num_pins-1 downto 0); + gpio_out_o : out std_logic_vector(g_num_pins-1 downto 0); + gpio_in_i : in std_logic_vector(g_num_pins-1 downto 0); + gpio_oen_o : out std_logic_vector(g_num_pins-1 downto 0)); + end component; + + component xwb_gpio_port + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_pins : natural range 1 to 256; + g_with_builtin_tristates : boolean); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + gpio_b : inout std_logic_vector(g_num_pins-1 downto 0); + gpio_out_o : out std_logic_vector(g_num_pins-1 downto 0); + gpio_in_i : in std_logic_vector(g_num_pins-1 downto 0); + gpio_oen_o : out std_logic_vector(g_num_pins-1 downto 0)); + end component; + + component wb_i2c_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_cyc_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_int_o : out std_logic; + wb_stall_o : out std_logic; + scl_pad_i : in std_logic; + scl_pad_o : out std_logic; + scl_padoen_o : out std_logic; + sda_pad_i : in std_logic; + sda_pad_o : out std_logic; + sda_padoen_o : out std_logic); + end component; + + component xwb_i2c_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + scl_pad_i : in std_logic; + scl_pad_o : out std_logic; + scl_padoen_o : out std_logic; + sda_pad_i : in std_logic; + sda_pad_o : out std_logic; + sda_padoen_o : out std_logic); + end component; + + component xwb_lm32 + generic ( + g_profile : string); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + irq_i : in std_logic_vector(31 downto 0); + dwb_o : out t_wishbone_master_out; + dwb_i : in t_wishbone_master_in; + iwb_o : out t_wishbone_master_out; + iwb_i : in t_wishbone_master_in); + end component; + + component wb_onewire_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_ports : integer; + g_ow_btp_normal : string := "1.0"; + g_ow_btp_overdrive : string := "5.0"); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_adr_i : in std_logic_vector(2 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_ack_o : out std_logic; + wb_int_o : out std_logic; + wb_stall_o : out std_logic; + owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_en_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_i : in std_logic_vector(g_num_ports -1 downto 0)); + end component; + + component xwb_onewire_master + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_num_ports : integer; + g_ow_btp_normal : string := "5.0"; + g_ow_btp_overdrive : string := "1.0"); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + owr_pwren_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_en_o : out std_logic_vector(g_num_ports -1 downto 0); + owr_i : in std_logic_vector(g_num_ports -1 downto 0)); + end component; + + component wb_spi + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_cyc_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_err_o : out std_logic; + wb_int_o : out std_logic; + wb_stall_o : out std_logic; + pad_cs_o : out std_logic_vector(7 downto 0); + pad_sclk_o : out std_logic; + pad_mosi_o : out std_logic; + pad_miso_i : in std_logic); + end component; + + component xwb_spi + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + pad_cs_o : out std_logic_vector(7 downto 0); + pad_sclk_o : out std_logic; + pad_mosi_o : out std_logic; + pad_miso_i : in std_logic); + end component; + + component wb_simple_uart + generic ( + g_with_virtual_uart : boolean := false; + g_with_physical_uart : boolean := true; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + wb_adr_i : in std_logic_vector(4 downto 0); + wb_dat_i : in std_logic_vector(31 downto 0); + wb_dat_o : out std_logic_vector(31 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(3 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic; + uart_rxd_i : in std_logic := '1'; + uart_txd_o : out std_logic); + end component; + + component xwb_simple_uart + generic ( + g_with_virtual_uart : boolean := false; + g_with_physical_uart : boolean := true; + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor; + uart_rxd_i : in std_logic := '1'; + uart_txd_o : out std_logic); + end component; + + component wb_tics + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_period : integer); + port ( + rst_n_i : in std_logic; + clk_sys_i : in std_logic; + wb_adr_i : in std_logic_vector(3 downto 0); + wb_dat_i : in std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_dat_o : out std_logic_vector(c_wishbone_data_width-1 downto 0); + wb_cyc_i : in std_logic; + wb_sel_i : in std_logic_vector(c_wishbone_data_width/8-1 downto 0); + wb_stb_i : in std_logic; + wb_we_i : in std_logic; + wb_ack_o : out std_logic; + wb_stall_o : out std_logic); + end component; + + component xwb_tics + generic ( + g_interface_mode : t_wishbone_interface_mode := CLASSIC; + g_address_granularity : t_wishbone_address_granularity := WORD; + g_period : integer); + port ( + clk_sys_i : in std_logic; + rst_n_i : in std_logic; + slave_i : in t_wishbone_slave_in; + slave_o : out t_wishbone_slave_out; + desc_o : out t_wishbone_device_descriptor); + end component; + end wishbone_pkg;