diff --git a/modules/wishbone/wb_clock_crossing/xwb_clock_crossing.vhd b/modules/wishbone/wb_clock_crossing/xwb_clock_crossing.vhd index 5ea06f80fc331e60a249266711461808b59bc5aa..f22b1cc7126a6f8633e0011f54de70af961fd628 100644 --- a/modules/wishbone/wb_clock_crossing/xwb_clock_crossing.vhd +++ b/modules/wishbone/wb_clock_crossing/xwb_clock_crossing.vhd @@ -90,6 +90,10 @@ architecture rtl of xwb_clock_crossing is -- The slave pops them immediately from the mfifo and queues them itself. -- Suddenly, the slave can do work and answers all pending requests. -- The slow master is unable to read the sfifo fast enough and it overflows. + -- + -- Therefore, we monitor the number of sent requests through MFIFO, versus + -- the acknowledgements received through SFIFO and we block if there are + -- g_SIZE pending requests, even if MFIFO is actually not full (or even empty). subtype t_count is unsigned(f_ceil_log2(g_size+1)-1 downto 0); @@ -199,6 +203,7 @@ begin mr_en <= not mr_empty and (not mrecv.CYC or not master_o_STB or not master_i.STALL); master_o.CYC <= mrecv.CYC; master_o.STB <= master_o_STB; -- is high outside of CYC. that's ok; it should be ignored. + -- ** NOTE: violates Wishbone B4 Rule 3.25 ** master_o.ADR <= mrecv.ADR; master_o.WE <= mrecv.WE; master_o.SEL <= mrecv.SEL;