URL
https://opencores.org/ocsvn/neorv32/neorv32/trunk
[/] [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
|
© copyright 1999-2025
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.