Interconnect components

Simplebus

Interconnect

The simplebus interconnect module is the centerpiece of the whole simplebus interface, it is a crosspoint that allows multiple masters and slaves to communicate seamlessy, the block is fully templated through a custom python/jinja2 script that allows the generation of specific modules with any number of master and slaves for security and power consumption reasons this block acts as a router, blocking the propagation of all the simplebus signals to all but the targeted nodes.

Warning

The following connections are an example for a 2 master 2 slave module.

PARAMETERS

  • SLAVE_1_LOW: Slave interface 1 address space low bound. Default value 0x00000000

  • SLAVE_1_HIGH: Slave interface 1 address space high bound. Default value 0xffffffff

  • SLAVE_2_LOW: Slave interface 2 address space low bound. Default value 0x00000000

  • SLAVE_2_HIGH: Slave interface 2 address space high bound. Default value 0xffffffff

INPUTS

  • clock: Main clock input

INTERFACES
  • master_1 Simplebus interface to the first master

  • master_2 Simplebus interface to the second master

  • slave_1 Simplebus interface to the first slave

  • slave_2 Simplebus interface to the second slave

APB to Simplebus

This module provides a simple combinatorial, bidirectional bridge between an APB master and a Simplebus slave interface.

PARAMETERS

  • READ_LATENCY: Number of cycles between read transaction start and response arrival. Default value 2

INPUTS

  • PCLK: Main clock input

  • PRESETn: Active low synchronous reset input

INTERFACES

  • apb AMBA APB interface towards the master

  • spb Simplebus interface to the downstream modules

Configurator

This module provides a simple combinatorial, bidirectional bridge between an APB master and a Simplebus slave interface.

PARAMETERS

  • N_CONFIG: Number of configuration values to write. Default value 2

INPUTS

  • clock: Main clock input

  • start: A high level pulse on this input triggers the configuration process

  • config_address: Array of the addresses to write the configurations to

  • config_data: Array of configuration data to write

OUTPUTS

  • done: Flag raised upon completion of the configuration process.

INTERFACES

  • sb Simplebus interface the configuration is written to.

Simplebus Clock Domain Crossing (CDC)

This module implemnts a handshaken clock domain crossing for a Simplebus interface.

Warning

Only write transactions are supported.

Warning

This module is Xilinx Specific.

INPUTS

  • in_clock: Clock for the input domain

  • out_clock: Clock for the output domain

  • reset: Active low synchronous reset input

INTERFACES

  • in_sb Simplebus interface input.

  • out_sb Simplebus interface output.

ROM

This utility module implements a Simplebus connecter read only memory area.

PARAMETERS - BASE_ADDRESS: Base address for the Simplebus interface. Default value 0x43c00000

INPUTS

  • clock: Main clock input

  • reset: Active low synchronous reset input

INTERFACES

  • sb Simplebus interface.

DMA master with an AXI stream output

This module can be used to read values from a simplebus accessible memory location and transmit them on an axi stream interface. Performing what ammounts to a two dimensional dma trasfer. The source address is consequently composed by two parts, a channel related one, corresponding to the row index in a table view, and a destination offset, that corresponds to the column index. The module is designed to pull data from a femtocore processor and push it to an RTCU communication interface.

PARAMETERS

  • BASE_ADDRESS: Base address of the simplebus accessible target memoty area. Default value 0x43c00000

  • CHANNEL_OFFSET: Offset between the addresses of two contiguous memory cells in a column. Default value 0x0

  • DESTINATION_OFFSET: Offset of the target cell memory cell in its row. Default value 0x0

  • CHANNEL_NUMBER: Number of transfers in each DMA transactions. Default value 3

  • SB_DELAY: Delay between simplebus read transaction start and read data availability. Default value 5

  • TARGET_ADDRESS: Address for the message on the other end of the RTCU link. Default value 0x18

  • SOURCE_CHANNEL_SEQUENCE: Array of row indexes to read from, usefull to reorder data. Default value {3,2,1}

  • TARGET_CHANNEL_SEQUENCE: Array of values for the AXI stream destination field. Default value {3,2,1}

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

  • enable: A high value on this input triggers a dma transaction sequence.

INTERFACES

  • source Simplebus interface to the DMA endpoint.

  • target AXI stream output interface

DMA master with an AXI stream input

This module can be used to axi stream received values to a Simplebus accessible memory location. It can perform two dimentional dma transfers with the simplebus target address being composed of two parts, a channel related one, corresponding to the row index in a table view, and a destination offset, that corresponds to the column index. The module is designed to push data from an axi stream to a femtocore processor.

PARAMETERS

  • BASE_ADDRESS: Base address of the simplebus accessible target memoty area. Default value 0x43c00000

  • CHANNEL_OFFSET: Offset between the addresses of two contiguous memory cells in a column. Default value 0x0

  • DESTINATION_OFFSET: Offset of the target cell memory cell in its row. Default value 0x0

  • CHANNEL_NUMBER: Number of transfers in each DMA transactions. Default value 3

  • SB_DELAY: Delay between adjacent simplebus write transactions. Default value 3

  • LAST_DESTINATION: Index of the last destination value in an axi stream group of data defining a transaction. Default value

  • FIFO_DEPTH: Depth of the FIFO used to temporarily hold the AXI stream received data while it is bein transmitted on the Simplebus. Default value {3,2,1}

  • CHANNEL_SEQUENCE: Array of values defining the row of the data table to write to. Default value {3,2,1}

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

  • enable: A high value on this input triggers a dma transaction sequence.

OUTPUT - done: Flag raised when a full transaction has been compleated

INTERFACES

  • source Simplebus interface to the DMA endpoint.

  • target AXI stream output interface

AXI stream

AXI stream Clock Domain Crossing (CDC)

This module provvides clock domain crossing for an axi stream interface. two implementations are provvided, a simpler flip-flop based one which is lower latency and consumes less area, but is more fragile and a more robust handshaken one that takes more time and area.

Warning

Some features of this module are Xilinx Specific.

PARAMETERS

  • CDC_STYLE: Type of Clock domain crossing implementation ( FF for flip-flop based, HANDSHAKE for handshaken) Default Value FF

  • N_STAGES: Number of flip-flop stages used for the FF implementation. Default value 3

  • DATA_WIDTH: Width of the axi stream data signal. Default value 32

  • USER_WIDTH: Width of the axi stream user signal. Default value 32

  • DEST_WIDTH: Width of the axi stream destination signal. Default value 32

INPUTS

  • in_clock: Clock for the input domain

  • out_clock: Clock for the output domain

  • reset: Active low synchronous reset input

INTERFACES

  • in AXI stream input interface.

  • out AXI stream output interface.

Combiner

This module is used to combine combine AXI streams into a single one, the input ports have fixed priorities, thus in case of a collision the one with the lowest index will prevail, all others else will be ignored. The block is fully templated through a custom python/jinja2 script allowing a combiner with an arbitrary number of ports to be generated as needed. The input and output axi streams interface are also customizable thanks to the parametrised width

PARAMETERS

  • INPUT_DATA_WIDTH: Width of the input axi stream data signal. Default value 16

  • OUTPUT_DATA_WIDTH: Width of the output axi stream data signal. Default value 32

  • MSB_DEST_SUPPORT: Put the Lowest significant byte of the axi stream destination signal in the most significant byte of the output stream. Default value TRUE

  • N_CHANNELS: Number of combined AXI streams. Default value 6

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

INTERFACES

  • stream_in_1 AXI stream input to combine number 1.

  • stream_in_2 AXI stream input to combine number 2.

  • stream_out Combined axi stream output interface.

Constant

This module is meant to push a constant value to others through an AXI stream interface. A dedicated input can be used to can be used to ensure Synchronization of the axi stream transaction with an external timebase signal.

PARAMETERS

  • BASE_ADDRESS: Base address for the Simplebus interface. Default value 0x43C00000

  • CONSTANT_WIDTH: Width of the output axi stream data signal. Default value 32

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

  • sync: Synchronization input, AXI stream write transactions will be delayed until a high signal is present on this line.

INTERFACES

  • sb Simplebus slave interface for configuration and control

  • const_out AXI stream output interface

prioritised FIFO

This module allows to merge two different AXI streams of different priorities, while also completely mitigating the risk of transaction drops due to conflicts between transactions, thanks to internal FIFOs on both inputs. The depth of whom is parametrised to allow the trade off between area and flexibility. The module will always privilege high priority transactions in spite anything else, it will thus empty the HP fifo before starting on the LP one. no amount of round robin arbitration between inputs is performed, thus enough downstream bandwidth should be available if starvation of the LP input is to be avoided.

PARAMETERS

  • FIFO_DEPTH: Depth of the FIFO. Default value 16

  • INPUT_DATA_WIDTH: Width of the axi stream data signal. Default value 32

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

  • data_in_lp: Low priority AXI stream input data signal.

  • data_in_lp_valid: Low priority AXI stream input valid signal.

  • data_in_lp_tlast: Low priority AXI stream input tlast signal.

  • data_in_hp: High priority AXI stream input data signal.

  • data_in_hp_valid: High priority AXI stream input valid signal.

  • data_in_hp_tlast: High priority AXI stream input tlast signal.

  • data_out_ready: AXI stream output ready signal.

OUTPUT

  • data_in_lp_ready: Low priority AXI stream input ready signal.

  • data_in_hp_ready: High priority AXI stream input ready signal.

  • data_out: AXI stream output data signal.

  • data_out_valid: AXI stream output valid signal.

  • data_out_tlast: AXI stream output tlast signal.

XPM FIFO

This module provvides a simple AXI stream FIFO, implemented through Xilinx parametrised Macros.

Warning

This module is Xilinx Specific.

PARAMETERS

  • FIFO_DEPTH: Depth of the FIFO. Default value 16

  • INPUT_DATA_WIDTH: Width of the axi stream data signal. Default value 32

  • INPUT_DEST_WIDTH: Width of the axi stream destination signal Default value 16

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

INTERFACES

  • in AXI stream input interface

  • out AXI stream output interface

FIFO

This module provvides a simple AXI stream FIFO, implemented as simple behavioural system verilog code.

PARAMETERS

  • FIFO_DEPTH: Depth of the FIFO. Default value 16

  • DATA_WIDTH: Width of the axi stream data signal. Default value 32

  • DEST_WIDTH: Width of the axi stream destination signal Default value 16

  • USE_WIDTH: Width of the axi stream user signal Default value 16

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

INTERFACES

  • in AXI stream input interface

  • out AXI stream output interface

Limiter

This module saturates the value of the axi stream data passing through it.

PARAMETERS

  • BASE_ADDRESS: Base address for the Simplebus interface. Default value 0x43C00000

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

INTERFACES

  • in AXI stream input interface

  • out AXI stream output interface

  • sb: Simplebus slave interface for control and configuration

MUX

This module selects one of many input axi streams

PARAMETERS

  • DATA_WIDTH: Width of the axi stream data signal. Default value 32

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

  • address: Index of the selected axi stream.

INTERFACES

  • stream_in_1: AXI stream input number 1

  • stream_in_2: AXI stream input number 2

  • stream_out: AXI stream output

Register slice

This module adds a configurable ammount of delay stages to an axi stream. When N_STAGES is set to 1 this module can be also used as a register to break up a combinatorial path during timing closure.

PARAMETERS

  • DATA_WIDTH: Width of the axi stream data signal. Default value 32

  • DEST_WIDTH: Width of the axi stream destination signal. Default value 32

  • USER_WIDTH: Width of the axi stream user signal. Default value 32

  • N_STAGES: Number of delay stages. Default value 1

  • READY_REG: When set to 1 the ready signal is delayed as wello. Default value 0

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

INTERFACES

  • in: AXI stream input

  • out: AXI stream output

Synchronized repeater

This module is used to synchronize an axi stream to an external timebase. Since no buffering is present, the Synchronization signal frequency must be the same or higher than the axi stream data transmission rate, otherwise transactions will be dropped.

PARAMETERS

  • DATA_WIDTH: Width of the axi stream data signal. Default value 32

  • DEST_WIDTH: Width of the axi stream destination signal. Default value 32

  • USER_WIDTH: Width of the axi stream user signal. Default value 32

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

  • sync: Synchronization signal input

INTERFACES

  • in: AXI stream input

  • out: AXI stream output

Tlast Generator

This modules monitors the axi stream connected to it’s input, and repets it to the output with the addition of a tlast signal, that is asserted periodically after a parametrised number of transactions. It uses an internal 16 bit counter, allowing a maximum period between assertions of 65535 transactions. The block only supports the mandatory subset AXI stream signals (TDATA, TVALID, TREADY) at the input and (TDATA, TVALID, TREADY, TLAST) at the output

PARAMETERS

  • DATA_WIDTH: Width of the axi stream data signal. Default value 32

  • DEST_WIDTH: Width of the axi stream destination signal. Default value 32

  • USER_WIDTH: Width of the axi stream user signal. Default value 32

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

  • period: period of the tlast signal

  • in_data: AXI stream input data signal.

  • in_valid: AXI stream input valid signal.

  • out_ready: AXI stream output ready signal.

OUTPUT - in_ready: AXI stream input ready signal. - out_data: AXI stream output data signal. - out_valid: AXI stream output valid signal. - out_tlast: AXI stream output tlast signal.

traffic generator

This module, part of the testing and validation infrastructure, is used as an axi stream data generator, the data are stored in an internal pre-initialized RAM block. While the enable signal is asserterf each clock cycle a new sample is sent to the output axi stream interface. If the data is needed at a lower rate, a periodically strobed enable signal can be used.

PARAMETERS

  • DATA_WIDTH: Width of the axi stream data signal. Default value 32

  • DEST_WIDTH: Width of the axi stream destination signal. Default value 32

  • USER_WIDTH: Width of the axi stream user signal. Default value 32

INPUTS

  • clock: Main clock input.

  • reset: Active low synchronous reset input.

  • enable: period of the tlast signal

  • traffic_ready: AXI stream output ready signal.

OUTPUT

  • traffic_data: AXI stream output data signal.

  • traffic_valid: AXI stream output valid signal.