Line 21... |
Line 21... |
| | `fence_o` | an executed `fence` instruction
|
| | `fence_o` | an executed `fence` instruction
|
| | `fencei_o` | an executed `fence.i` instruction
|
| | `fencei_o` | an executed `fence.i` instruction
|
| Configuration generics: | _MEM_EXT_EN_ | enable external memory interface when _true_
|
| Configuration generics: | _MEM_EXT_EN_ | enable external memory interface when _true_
|
| | _MEM_EXT_TIMEOUT_ | number of clock cycles after which an unacknowledged external bus access will auto-terminate (0 = disabled)
|
| | _MEM_EXT_TIMEOUT_ | number of clock cycles after which an unacknowledged external bus access will auto-terminate (0 = disabled)
|
| Configuration constants in VHDL package file `neorv32_package.vhd`: | `wb_pipe_mode_c` | when _false_ (default): classic/standard Wishbone protocol; when _true_: pipelined Wishbone protocol
|
| Configuration constants in VHDL package file `neorv32_package.vhd`: | `wb_pipe_mode_c` | when _false_ (default): classic/standard Wishbone protocol; when _true_: pipelined Wishbone protocol
|
| | `xbus_big_endian_c` | byte-order (Endianness) of external memory interface; true=BIG, false=little (default)
|
| | `wb_big_endian_c` | byte-order (Endianness) of external memory interface; true=BIG, false=little (default)
|
|
| | `wb_rx_buffer_c` | enable register buffer for RX path (default)
|
| CPU interrupts: | none |
|
| CPU interrupts: | none |
|
|=======================
|
|=======================
|
|
|
The external memory interface uses the Wishbone interface protocol. The external interface port is available
|
The external memory interface uses the Wishbone interface protocol. The external interface port is available
|
when the _MEM_EXT_EN_ generic is _true_. This interface can be used to attach external memories, custom
|
when the _MEM_EXT_EN_ generic is _true_. This interface can be used to attach external memories, custom
|
Line 47... |
Line 48... |
**pipelined** Wishbone transactions. The transaction protocol is configured via the wb_pipe_mode_c constant
|
**pipelined** Wishbone transactions. The transaction protocol is configured via the wb_pipe_mode_c constant
|
in the in the main VHDL package file (`rtl/neorv32_package.vhd`):
|
in the in the main VHDL package file (`rtl/neorv32_package.vhd`):
|
|
|
[source,vhdl]
|
[source,vhdl]
|
----
|
----
|
-- (external) bus interface --
|
-- external bus interface --
|
constant wb_pipe_mode_c : boolean := false;
|
constant wb_pipe_mode_c : boolean := false;
|
----
|
----
|
|
|
When `wb_pipe_mode_c` is disabled, all bus control signals including _STB_ are active (and stable) until the
|
When `wb_pipe_mode_c` is disabled, all bus control signals including _STB_ are active (and stable) until the
|
transfer is acknowledged/terminated. If `wb_pipe_mode_c` is enabled, all bus control except _STB_ are active
|
transfer is acknowledged/terminated. If `wb_pipe_mode_c` is enabled, all bus control except _STB_ are active
|
Line 74... |
Line 75... |
Architecture for Portable IP Cores". A copy of this document can be found in the docs folder of this
|
Architecture for Portable IP Cores". A copy of this document can be found in the docs folder of this
|
project.
|
project.
|
|
|
**Interface Latency**
|
**Interface Latency**
|
|
|
The Wishbone gateway introduces two additional latency cycles: Processor-outgoing and -incoming signals
|
By default, the Wishbone gateway introduces two additional latency cycles: processor-outgoing ("TX") and
|
are fully registered. Thus, any access from the CPU to a processor-external devices requires +2 clock cycles.
|
processor-incoming ("RX") signals are fully registered. Thus, any access from the CPU to a processor-external devices
|
|
via Wishbone requires 2 additional clock cycles (at least; depending on device's latency).
|
|
|
|
If the attached Wishbone network / peripheral already provides output registers or if the Wishbone network is not relevant
|
|
for timing closure, the default buffering of incoming ("RX") data within the gateway can be disabled.
|
|
The configuration is done via the `wb_rx_buffer_c` constant in the in the main VHDL package file (`rtl/neorv32_package.vhd`):
|
|
|
|
[source,vhdl]
|
|
----
|
|
-- external bus interface --
|
|
constant wb_rx_buffer_c : boolean := false; -- false to implement "async" RX (non-default)
|
|
----
|
|
|
**Bus Access Timeout**
|
**Bus Access Timeout**
|
|
|
The Wishbone bus interface provides an option to configure a bus access timeout counter. The _MEM_EXT_TIMEOUT_
|
The Wishbone bus interface provides an option to configure a bus access timeout counter. The _MEM_EXT_TIMEOUT_
|
top generic is used to specify the _maximum_ time (in clock cycles) a bus access can be pending before it is automatically
|
top generic is used to specify the _maximum_ time (in clock cycles) a bus access can be pending before it is automatically
|
Line 123... |
Line 135... |
|
|
**Endianness**
|
**Endianness**
|
|
|
The NEORV32 CPU and the Processor setup are *little-endian* architectures. To allow direct connection
|
The NEORV32 CPU and the Processor setup are *little-endian* architectures. To allow direct connection
|
to a big-endian memory system the external bus interface provides an _Endianness configuration_. The
|
to a big-endian memory system the external bus interface provides an _Endianness configuration_. The
|
Endianness (of the external memory interface) can be configured via the global `xbus_big_endian_c`
|
Endianness (of the external memory interface) can be configured via the global `wb_big_endian_c`
|
constant in the main VHDL package file (`rtl/neorv32_package.vhd`). By default, the external memory
|
constant in the main VHDL package file (`rtl/neorv32_package.vhd`). By default, the external memory
|
interface uses little-endian byte-order.
|
interface uses little-endian byte-order.
|
|
|
[source,vhdl]
|
[source,vhdl]
|
----
|
----
|
-- (external) bus interface --
|
-- external bus interface --
|
constant xbus_big_endian_c : boolean := true;
|
constant wb_big_endian_c : boolean := true;
|
----
|
----
|
|
|
Application software can check the Endianness configuration of the external bus interface via the
|
Application software can check the Endianness configuration of the external bus interface via the
|
_SYSINFO_FEATURES_MEM_EXT_ENDIAN_ flag in the processor's SYSINFO module (see section
|
_SYSINFO_FEATURES_MEM_EXT_ENDIAN_ flag in the processor's SYSINFO module (see section
|
<<_system_configuration_information_memory_sysinfo>> for more information).
|
<<_system_configuration_information_memory_sysinfo>> for more information).
|
|
|
**AXI4-Lite Connectivity**
|
**AXI4-Lite Connectivity**
|
|
|
The AXI4-Lite wrapper (`rtl/top_templates/neorv32_top_axi4lite.vhd`) provides a Wishbone-to-
|
The AXI4-Lite wrapper (`rtl/templates/system/neorv32_SystemTop_axi4lite.vhd`) provides a Wishbone-to-
|
AXI4-Lite bridge, compatible with Xilinx Vivado (IP packager and block design editor). All entity signals of
|
AXI4-Lite bridge, compatible with Xilinx Vivado (IP packager and block design editor). All entity signals of
|
this wrapper are of type _std_logic_ or _std_logic_vector_, respectively.
|
this wrapper are of type _std_logic_ or _std_logic_vector_, respectively.
|
|
|
The AXI Interface has been verified using Xilinx Vivado IP Packager and Block Designer. The AXI
|
The AXI Interface has been verified using Xilinx Vivado IP Packager and Block Designer. The AXI
|
interface port signals are automatically detected when packaging the core.
|
interface port signals are automatically detected when packaging the core.
|
Line 151... |
Line 163... |
.Example AXI SoC using Xilinx Vivado
|
.Example AXI SoC using Xilinx Vivado
|
image::neorv32_axi_soc.png[]
|
image::neorv32_axi_soc.png[]
|
|
|
[WARNING]
|
[WARNING]
|
Using the auto-termination timeout feature (_MEM_EXT_TIMEOUT_ greater than zero) is **not AXI4 compliant** as the AXI protocol does not support canceling of
|
Using the auto-termination timeout feature (_MEM_EXT_TIMEOUT_ greater than zero) is **not AXI4 compliant** as the AXI protocol does not support canceling of
|
bus transactions. Therefore, the NEORV32 top wrapper with AXI4-Lite interface (`rtl/top_templates/neorv32_top_axi4lite`) configures _MEM_EXT_TIMEOUT_ = 0 by default.
|
bus transactions. Therefore, the NEORV32 top wrapper with AXI4-Lite interface (`rtl/templates/system/neorv32_SystemTop_axi4lite`) configures _MEM_EXT_TIMEOUT_ = 0 by default.
|
|
|
|
|
bus transactions. Therefore, the NEORV32 top wrapper with AXI4-Lite interface (`rtl/templates/system/neorv32_SystemTop_axi4lite`) configures _MEM_EXT_TIMEOUT_ = 0 by default.
|
|