Skip to content

SystemVerilog IO descriptions

Scott Nellenbach edited this page Nov 8, 2018 · 6 revisions

Descriptions of both the processor-facing and internal-facing IO ports in the generated RTL output are shown below.


SystemVerilog processor IO

Ordt generates the following decoder module IO that will be driven by processor logic. Several processor interface forms are currently supported: parallel, leaf, ring8, ring16, ring32, and serial8. The type can be specified via the root_decoder_interface ordt parameter for systemverilog output.

Parallel processor interface

The parallel interface type provides N bit parallel data buses for read/write data transfer. The data width is determined by the largest register in the region being addressed. Specify using root_decoder_interface = parallel.

* IO direction is shown for the primary processor interface on a generated decoder. An complementary interface form with inverted IO direction will be generated for register/regfile regions instanced using external(PARALLEL) - see here for more info. In this mode, the interface would typically drive a child addrmap module using a parallel processor interface.

Also note that IO names in the table above reflect the case where a child decoder is being driven by a parent decoder interface (thus the reg path is included in the names). In the root decoder, simplified names will be used, eg. h2d_pio_dec_read, h2d_pio_dec_write, h2d_pio_dec_address, h2d_pio_dec_write_data, d2h_dec_pio_read_data, d2h_dec_pio_ack, d2h_dec_pio_nack, etc.

Parallel pulsed processor interface

The parallel_pulsed interface type is identical to the parallel type, except that input signals for initiating a read or write (h2d_<regname>_re, h2d_<regname>_we) expect a single cycle pulse high rather than remaining high until an ack/nack response. Specify using root_decoder_interface = parallel_pulsed.

Leaf processor interface

The leaf interface type provides N bit parallel data buses for read/write transfer. Specify using root_decoder_interface = leaf.

8 bit serial interface

The serial8 interface type provides a 8 bit data buses for read/write transfer. Specify using root_decoder_interface = serial8.

* IO direction is shown for the primary processor interface on a generated decoder. An complementary interface form with inverted IO direction will be generated for register/regfile regions instanced using external(SERIAL8) - see here for more info. In this mode, the interface would typically drive a child addrmap module using a serial8 processor interface.

8 bit ring interface

The ring8 interface type provides a 8 bit data buses for read/write transfer to multiple child decoders. Specify using root_decoder_interface = ring8.

* IO direction is shown for the primary processor interface on a generated decoder. An complementary interface form with inverted IO direction will be generated for register/regfile regions instanced using external(RING8) - see here for more info. In this mode, the interface would typically drive a child addrmap module(s) using a ring8 processor interface.

16 bit ring interface

The ring16 interface type provides a 16 bit data buses for read/write transfer to multiple child decoders. Specify using root_decoder_interface = ring16.

* IO direction is shown for the primary processor interface on a generated decoder. An complementary interface form with inverted IO direction will be generated for register/regfile regions instanced using external(RING16) - see here for more info. In this mode, the interface would typically drive a child addrmap module(s) using a ring16 processor interface.

32 bit ring interface

The ring32 interface type provides a 32 bit data buses for read/write transfer to multiple child decoders. Specify using root_decoder_interface = ring32.

* IO direction is shown for the primary processor interface on a generated decoder. An complementary interface form with inverted IO direction will be generated for register/regfile regions instanced using external(RING32) - see here for more info. In this mode, the interface would typically drive a child addrmap module(s) using a ring16 processor interface.


SystemVerilog internal logic IO

Ordt generates the following logic module IO for passing register and field information to user RTL. All of the following signals are optional and depend on the SystemRDL properties specified.

Register field IO:

Interrupt and halt IO:

Counter field IO:

Bitwise field IO:

Clone this wiki locally