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

xwb_register_link: also register the CYC signal, otherwise STB remains active...

xwb_register_link: also register the CYC signal, otherwise STB remains active for one more cycle after CYC is dropped, which is not compliant with Wishbone
parent f119723b
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
-- Author : Wesley W. Terpstra -- Author : Wesley W. Terpstra
-- Company : GSI -- Company : GSI
-- Created : 2013-12-16 -- Created : 2013-12-16
-- Last update: 2018-10-29 -- Last update: 2018-11-08
-- Platform : FPGA-generic -- Platform : FPGA-generic
-- Standard : VHDL'93 -- Standard : VHDL'93
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
...@@ -46,10 +46,11 @@ architecture rtl of xwb_register_link is ...@@ -46,10 +46,11 @@ architecture rtl of xwb_register_link is
signal s_push, s_pop : std_logic; signal s_push, s_pop : std_logic;
signal s_full, s_empty : std_logic; signal s_full, s_empty : std_logic;
signal r_ack, r_err : std_logic; signal r_ack, r_err : std_logic;
signal r_cyc : std_logic;
signal r_dat : t_wishbone_data; signal r_dat : t_wishbone_data;
begin begin
sp : wb_skidpad sp : wb_skidpad
generic map( generic map(
g_adrbits => c_wishbone_address_width g_adrbits => c_wishbone_address_width
...@@ -72,24 +73,26 @@ begin ...@@ -72,24 +73,26 @@ begin
); );
slave_o.ack <= r_ack; slave_o.ack <= r_ack;
slave_o.err <= r_err; slave_o.err <= r_err;
slave_o.dat <= r_dat; slave_o.dat <= r_dat;
slave_o.rty <= '0'; slave_o.rty <= '0';
s_pop <= not master_i.stall; s_pop <= not master_i.stall;
s_push <= slave_i.cyc and slave_i.stb and not s_full; s_push <= slave_i.cyc and slave_i.stb and not s_full;
slave_o.stall <= s_full; slave_o.stall <= s_full;
master_o.stb <= not s_empty; master_o.stb <= not s_empty;
master_o.cyc <= slave_i.cyc; master_o.cyc <= r_cyc;
main : process(clk_sys_i, rst_n_i) is main : process(clk_sys_i, rst_n_i) is
begin begin
if rst_n_i = '0' then if rst_n_i = '0' then
r_cyc <= '0';
r_ack <= '0'; r_ack <= '0';
r_err <= '0'; r_err <= '0';
r_dat <= (others => '0'); r_dat <= (others => '0');
elsif rising_edge(clk_sys_i) then elsif rising_edge(clk_sys_i) then
r_cyc <= slave_i.cyc;
-- no flow control on ack/err -- no flow control on ack/err
r_ack <= master_i.ack; r_ack <= master_i.ack;
r_err <= master_i.err; r_err <= master_i.err;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment