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

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [rtl/] [core/] [neorv32_wishbone.vhd] - Diff between revs 59 and 60

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

Rev 59 Rev 60
Line 191... Line 191...
          ctrl.rd_req <= '0';
          ctrl.rd_req <= '0';
          ctrl.wr_req <= '0';
          ctrl.wr_req <= '0';
          -- buffer all outgoing signals --
          -- buffer all outgoing signals --
          ctrl.we  <= wren_i or ctrl.wr_req;
          ctrl.we  <= wren_i or ctrl.wr_req;
          ctrl.adr <= addr_i;
          ctrl.adr <= addr_i;
          if (xbus_big_endian_c = true) then -- endianness conversion
          if (xbus_big_endian_c = true) then -- big-endian
            ctrl.wdat <= data_i;
 
            ctrl.sel  <= ben_i;
 
          else
 
            ctrl.wdat <= bswap32_f(data_i);
            ctrl.wdat <= bswap32_f(data_i);
            ctrl.sel  <= bit_rev_f(ben_i);
            ctrl.sel  <= bit_rev_f(ben_i);
 
          else -- little-endian
 
            ctrl.wdat <= data_i;
 
            ctrl.sel  <= ben_i;
          end if;
          end if;
          ctrl.src  <= src_i;
          ctrl.src  <= src_i;
          ctrl.lock <= lock_i;
          ctrl.lock <= lock_i;
          ctrl.priv <= priv_i;
          ctrl.priv <= priv_i;
          -- valid new or buffered read/write request --
          -- valid new or buffered read/write request --
Line 215... Line 215...
            ctrl.err   <= '1';
            ctrl.err   <= '1';
            ctrl.state <= IDLE;
            ctrl.state <= IDLE;
          elsif (wb_ack_i = '1') then -- normal bus termination
          elsif (wb_ack_i = '1') then -- normal bus termination
            ctrl.ack   <= '1';
            ctrl.ack   <= '1';
            ctrl.state <= IDLE;
            ctrl.state <= IDLE;
          elsif (timeout_en_c = true) and (or_all_f(ctrl.timeout) = '0') then -- valid timeout
          elsif (timeout_en_c = true) and (or_reduce_f(ctrl.timeout) = '0') then -- valid timeout
            ctrl.err   <= '1';
            ctrl.err   <= '1';
            ctrl.state <= IDLE;
            ctrl.state <= IDLE;
          end if;
          end if;
          -- timeout counter --
          -- timeout counter --
          if (timeout_en_c = true) then
          if (timeout_en_c = true) then
Line 241... Line 241...
      end case;
      end case;
    end if;
    end if;
  end process bus_arbiter;
  end process bus_arbiter;
 
 
  -- host access --
  -- host access --
  data_o <= ctrl.rdat when (xbus_big_endian_c = true) else bswap32_f(ctrl.rdat); -- endianness conversion
  data_o <= ctrl.rdat when (xbus_big_endian_c = false) else bswap32_f(ctrl.rdat); -- endianness conversion
  ack_o  <= ctrl.ack;
  ack_o  <= ctrl.ack;
  err_o  <= ctrl.err;
  err_o  <= ctrl.err;
 
 
  -- wishbone interface --
  -- wishbone interface --
  wb_tag_o(0) <= '1' when (ctrl.priv = priv_mode_m_c) else '0'; -- privileged access when in machine mode
  wb_tag_o(0) <= '1' when (ctrl.priv = priv_mode_m_c) else '0'; -- privileged access when in machine mode

powered by: WebSVN 2.1.0

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