-- Enable the stage register to latch if:
-- * it is currently empty
-- * if the downstream stage is accepting the current data
- enable <= (not stb_reg) or rdy_i;
- en_o <= enable and stb_i;
+ enable <= ((not stb_reg) or rdy_i) and stb_i and (not rst_i);
+ en_o <= enable;
stb_o <= stb_reg;
rdy_o <= enable;
process (clk_i, enable, dat_i)
begin
if rising_edge(clk_i) then
- if enable = '1' then
+ if rst_i = '1' then
+ dat_reg <= (others => '0');
+ elsif enable = '1' then
dat_reg <= dat_i;
end if;
end if;
rdy_o <= rdy_reg;
dat_o <= rob_dat_reg when rob_stb_reg = '1' else dat_reg;
- en <= rdy_reg;
- en_o <= en and stb_i;
+ en <= rdy_reg and stb_i and (not rst_i);
+ en_o <= en;
rob_en <= rdy_reg and (not rdy_i);
rob_clr <= rdy_i;
-- Normal interstage register
signal en: std_logic;
signal stb_reg: std_logic := '0';
- --signal dat_reg: std_logic_vector(WIDTH-1 downto 0);
-- Run-out-buffer
signal rob_en: std_logic;
signal rob_clr: std_logic;
signal rob_stb_reg: std_logic := '0';
- --signal rob_dat_reg: std_logic_vector(WIDTH-1 downto 0);
begin
rdy_o <= rdy_reg;
--dat_o <= rob_dat_reg when rob_stb_reg = '1' else dat_reg;
- en <= rdy_reg;
- en_o <= en and stb_i;
+ en <= rdy_reg and stb_i and (not rst_i);
+ en_o <= en;
rob_en <= rdy_reg and (not rdy_i);
rob_clr <= rdy_i;