OpenCores
URL https://opencores.org/ocsvn/neorv32/neorv32/trunk

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [rtl/] [core/] [neorv32_wishbone.vhd] - Diff between revs 2 and 11

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 11
Line 70... Line 70...
    rden_i   : in  std_ulogic; -- read enable
    rden_i   : in  std_ulogic; -- read enable
    wren_i   : in  std_ulogic; -- write enable
    wren_i   : in  std_ulogic; -- write enable
    ben_i    : in  std_ulogic_vector(03 downto 0); -- byte write enable
    ben_i    : in  std_ulogic_vector(03 downto 0); -- byte write enable
    data_i   : in  std_ulogic_vector(31 downto 0); -- data in
    data_i   : in  std_ulogic_vector(31 downto 0); -- data in
    data_o   : out std_ulogic_vector(31 downto 0); -- data out
    data_o   : out std_ulogic_vector(31 downto 0); -- data out
 
    cancel_i : in  std_ulogic; -- cancel current bus transaction
    ack_o    : out std_ulogic; -- transfer acknowledge
    ack_o    : out std_ulogic; -- transfer acknowledge
    err_o    : out std_ulogic; -- transfer error
    err_o    : out std_ulogic; -- transfer error
    -- wishbone interface --
    -- wishbone interface --
    wb_adr_o : out std_ulogic_vector(31 downto 0); -- address
    wb_adr_o : out std_ulogic_vector(31 downto 0); -- address
    wb_dat_i : in  std_ulogic_vector(31 downto 0); -- read data
    wb_dat_i : in  std_ulogic_vector(31 downto 0); -- read data
Line 106... Line 107...
 
 
  -- Sanity Check ---------------------------------------------------------------------------
  -- Sanity Check ---------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  -- -------------------------------------------------------------------------------------------
  sanity_check: process(clk_i)
  sanity_check: process(clk_i)
  begin
  begin
    if rising_edge(clk_i) then -- just for simulation
    if rising_edge(clk_i) then
      if (INTERFACE_REG_STAGES > 2) then
      if (INTERFACE_REG_STAGES > 2) then
        assert false report "NEORV32 CONFIG ERROR! Number of external memory interface buffer stages must be 0, 1 or 2." severity error;
        assert false report "NEORV32 CONFIG ERROR! Number of external memory interface buffer stages must be 0, 1 or 2." severity error;
      end if;
      end if;
    end if;
    end if;
  end process sanity_check;
  end process sanity_check;
Line 142... Line 143...
      wb_err_ff  <= '0';
      wb_err_ff  <= '0';
    elsif rising_edge(clk_i) then
    elsif rising_edge(clk_i) then
      -- bus cycle --
      -- bus cycle --
      if (INTERFACE_REG_STAGES = 0) then
      if (INTERFACE_REG_STAGES = 0) then
        wb_cyc_ff <= '0'; -- unused
        wb_cyc_ff <= '0'; -- unused
      elsif (INTERFACE_REG_STAGES = 1) then
      else
        wb_cyc_ff <= wb_access and ((not wb_ack_i) or (not wb_err_i));
        wb_cyc_ff <= (wb_cyc_ff or wb_access) and ((not wb_ack_i) or (not wb_err_i)) and (not cancel_i);
      elsif (INTERFACE_REG_STAGES = 2) then
 
        wb_cyc_ff <= wb_access and ((not wb_ack_ff) or (not wb_err_ff));
 
      end if;
      end if;
      -- bus strobe --
      -- bus strobe --
      wb_stb_ff1 <= wb_stb_ff0;
      wb_stb_ff1 <= wb_stb_ff0;
      wb_stb_ff0 <= wb_access;
      wb_stb_ff0 <= wb_access;
      -- bus ack --
      -- bus ack --
Line 186... Line 185...
  interface_reg_level_one:
  interface_reg_level_one:
  if (INTERFACE_REG_STAGES = 1) generate -- 1 register levels: buffer outgoing signals
  if (INTERFACE_REG_STAGES = 1) generate -- 1 register levels: buffer outgoing signals
    buffer_stages_one: process(clk_i)
    buffer_stages_one: process(clk_i)
    begin
    begin
      if rising_edge(clk_i) then
      if rising_edge(clk_i) then
 
        if (wb_cyc_ff = '0') then
        wb_adr_o <= addr_i;
        wb_adr_o <= addr_i;
        wb_dat_o <= data_i;
        wb_dat_o <= data_i;
        wb_sel_o <= ben_i;
        wb_sel_o <= ben_i;
        wb_we_o  <= wren_i;
        wb_we_o  <= wren_i;
      end if;
      end if;
 
      end if;
    end process buffer_stages_one;
    end process buffer_stages_one;
    data_o <= wb_dat_i;
    data_o <= wb_dat_i;
  end generate;
  end generate;
 
 
  interface_reg_level_two:
  interface_reg_level_two:
  if (INTERFACE_REG_STAGES = 2) generate -- 2 register levels: buffer incoming and outgoing signals
  if (INTERFACE_REG_STAGES = 2) generate -- 2 register levels: buffer incoming and outgoing signals
    buffer_stages_two: process(clk_i)
    buffer_stages_two: process(clk_i)
    begin
    begin
      if rising_edge(clk_i) then
      if rising_edge(clk_i) then
 
        if (wb_cyc_ff = '0') then
        wb_adr_o <= addr_i;
        wb_adr_o <= addr_i;
        wb_dat_o <= data_i;
        wb_dat_o <= data_i;
        wb_sel_o <= ben_i;
        wb_sel_o <= ben_i;
        wb_we_o  <= wren_i;
        wb_we_o  <= wren_i;
        data_o   <= wb_dat_i;
        data_o   <= wb_dat_i;
      end if;
      end if;
 
      end if;
    end process buffer_stages_two;
    end process buffer_stages_two;
  end generate;
  end generate;
 
 
 
 
end neorv32_wishbone_rtl;
end neorv32_wishbone_rtl;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.