diff --git a/modules/wishbone/wb_pcie/pcie_wb.vhd b/modules/wishbone/wb_pcie/pcie_wb.vhd index a0f656930a883b904eb2aa6e372c35b530811baf..77dbdc031ecc6e19bd9e04e326997c54431da980 100644 --- a/modules/wishbone/wb_pcie/pcie_wb.vhd +++ b/modules/wishbone/wb_pcie/pcie_wb.vhd @@ -13,16 +13,22 @@ entity pcie_wb is clk125_i : in std_logic; -- 125 MHz, free running cal_clk50_i : in std_logic; -- 50 MHz, shared between all PHYs + -- Physical PCIe pins pcie_refclk_i : in std_logic; -- 100 MHz, must not derive clk125_i or cal_clk50_i - pcie_rstn_i : in std_logic; -- Reset PCIe sticky registers + pcie_rstn_i : in std_logic; -- Asynchronous "clear sticky" PCIe pin pcie_rx_i : in std_logic_vector(3 downto 0); pcie_tx_o : out std_logic_vector(3 downto 0); - wb_clk : in std_logic; -- Whatever clock you want these signals on: - wb_rstn_i : in std_logic; -- (whatever clock domain you like) - master_o : out t_wishbone_master_out; -- Commands from PC to FPGA + -- Commands from PC to FPGA + master_clk_i : in std_logic; + master_rstn_i : in std_logic; + master_o : out t_wishbone_master_out; master_i : in t_wishbone_master_in; - slave_i : in t_wishbone_slave_in; -- Command to PC from FPGA + + -- Command to PC from FPGA + slave_clk_i : in std_logic := '0'; + slave_rstn_i : in std_logic := '0'; + slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; slave_o : out t_wishbone_slave_out); end pcie_wb; @@ -71,7 +77,7 @@ begin pcie_phy : pcie_altera port map( clk125_i => clk125_i, cal_clk50_i => cal_clk50_i, - async_rstn => wb_rstn_i, + async_rstn => master_rstn_i and slave_rstn_i, pcie_refclk_i => pcie_refclk_i, pcie_rstn_i => pcie_rstn_i, @@ -151,7 +157,7 @@ begin alloc : process(internal_wb_clk) begin if rising_edge(internal_wb_clk) then - internal_wb_rstn_sync <= wb_rstn_i & internal_wb_rstn_sync(internal_wb_rstn_sync'length-1 downto 1); + internal_wb_rstn_sync <= (master_rstn_i and slave_rstn_i) & internal_wb_rstn_sync(internal_wb_rstn_sync'length-1 downto 1); if internal_wb_rstn = '0' then tx_alloc_mask <= '1'; @@ -166,8 +172,8 @@ begin slave_rst_n_i => internal_wb_rstn, slave_i => int_slave_i, slave_o => int_slave_o, - master_clk_i => wb_clk, - master_rst_n_i => wb_rstn_i, + master_clk_i => master_clk_i, + master_rst_n_i => master_rstn_i, master_i => master_i, master_o => master_o); @@ -179,8 +185,8 @@ begin int_slave_i.adr(r_addr'right-1 downto 0) <= wb_adr(r_addr'right-1 downto 0); FPGA_to_PC_clock_crossing : xwb_clock_crossing port map( - slave_clk_i => wb_clk, - slave_rst_n_i => wb_rstn_i, + slave_clk_i => slave_clk_i, + slave_rst_n_i => slave_rstn_i, slave_i => slave_i, slave_o => slave_o, master_clk_i => internal_wb_clk, diff --git a/modules/wishbone/wb_pcie/pcie_wb_pkg.vhd b/modules/wishbone/wb_pcie/pcie_wb_pkg.vhd index eb91aecb35118fda5235b3e5da2c844326a0b7da..27c792500a919cb9cbe31352ddc017079a99b6f0 100644 --- a/modules/wishbone/wb_pcie/pcie_wb_pkg.vhd +++ b/modules/wishbone/wb_pcie/pcie_wb_pkg.vhd @@ -11,18 +11,24 @@ package pcie_wb_pkg is clk125_i : in std_logic; -- 125 MHz, free running cal_clk50_i : in std_logic; -- 50 MHz, shared between all PHYs + -- Physical PCIe pins pcie_refclk_i : in std_logic; -- 100 MHz, must not derive clk125_i or cal_clk50_i pcie_rstn_i : in std_logic; -- Asynchronous "clear sticky" PCIe pin pcie_rx_i : in std_logic_vector(3 downto 0); pcie_tx_o : out std_logic_vector(3 downto 0); - wb_clk : in std_logic; -- Whatever clock you want these signals on: - wb_rstn_i : in std_logic; -- Reset wishbone bus - master_o : out t_wishbone_master_out; -- Commands from PC to FPGA + -- Commands from PC to FPGA + master_clk_i : in std_logic; + master_rstn_i : in std_logic; + master_o : out t_wishbone_master_out; master_i : in t_wishbone_master_in; - slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; -- Command to PC from FPGA + + -- Command to PC from FPGA + slave_clk_i : in std_logic := '0'; + slave_rstn_i : in std_logic := '0'; + slave_i : in t_wishbone_slave_in := cc_dummy_slave_in; slave_o : out t_wishbone_slave_out); -end component; + end component; component pcie_altera is port(