RTLDoc datamover (lkesting/konark) - RTLDoc example
module

hci_core_fifo

hci.bender/git/checkouts/hci-95bf7c02baf9662e/rtl/core/hci_core_fifo.sv:73elaboratedas datamover_streamer.use_fifo_gen.i_tcdm_fifo
4in
2out
2sub

The hci_core_fifo module implements a hardware FIFO queue for HCI-Core interfaces, used to withstand data scarcity (req=0) or backpressure (gnt=0), decoupling two architectural domains. This FIFO is single-clock and therefore cannot be used to cross two distinct clock domains. The FIFO treats a HCI-Core load stream as a combination of two 32-bit HWPE-Streams, one going from the tcdm_initiator to the tcdm_target interface carrying the addr (outgoing stream); the other from the tcdm_target to the tcdm_initiator interface, carrying the r_data (incoming stream).

On the target side, the req and gnt of the HCI-Core interfaces are mapped on valid and ready respectively in the outgoing stream. Backpressure on the incoming stream (target side) cannot be enforced by means of the HCI-Core target interface and thus is carried by a specific input ready_i that must be generated outside of the TCDM FIFO, typically by a hwpe_stream_source module (output tcdm_fifo_ready_o). On the initiator side, req is mapped to the AND of the incoming stream ready signal and the outgoing stream valid signal. gnt is hooked to the outgoing stream ready signal. The r_valid is mapped on valid in the incoming stream. :numref:`_hci_core_fifo_mapping` shows this mapping.

Mapping of HCI-Core and HWPE-Stream signals inside the load FIFO.

hci_core_fifo design-time parameters.

Name

Default

Description

FIFO_DEPTH

8

Depth of the FIFO queue (multiple of 2).

LATCH_FIFO

0

If 1, use latches instead of flip-flops (requires special constraints in synthesis).

hci_core_fifo output flags.

Name

Type

Description

empty

logic

1 if the FIFO is currently empty.

full

logic

1 if the FIFO is currently full.

push_pointer

logic[7:0]

Unused.

pop_pointer

logic[7:0]

Unused.

Internal connectivity

the submodules of hci_core_fifo and the signals between them
G cluster_hci_core_fifo hci_core_fifo p__flags_o flags_o i__i_fifo_incoming i_fifo_incoming hwpe_stream_fifo n__flags_incoming flags_incoming i__i_fifo_incoming->n__flags_incoming i__i_fifo_outgoing i_fifo_outgoing hwpe_stream_fifo n__flags_outgoing flags_outgoing i__i_fifo_outgoing->n__flags_outgoing l__logic internal logic of hci_core_fifo l__logic->p__flags_o n__flags_incoming->l__logic n__flags_outgoing->l__logic
scroll or pinch to zoom · drag to move · click a node to open

The ports stand at the walls of the module frame: input, left · output, right · interface — a slanted green box is a stream or a bus; the wide green line carries its data, and the arrow gives the direction · control — the dashed amber line shows which module controls what · flag / status · no direction. A straight box is a module. A hexagon is a port that goes in two directions. A dashed inner box is a generate block. The dashed white node is the logic of the module itself: the processes that drive or read a control net. The clock, reset, clear and test-mode nets are not in the graph; the chips below the diagram give them.

Clocks

clk_i

Resets

rst_niactive-low

Clears

clear_isynchronous

Ports 6

Inputs 4

DirNameTypeWidth
in clk_i logic 1
in rst_ni logic 1
in clear_i logic 1
in tcdm_target hci_core_intf .target -

Outputs 2

DirNameTypeWidth
out flags_o flag hwpe_stream_package::flags_fifo_t 20
out tcdm_initiator hci_core_intf .initiator -

Parameters 10

NameResolved value
FIFO_DEPTH32'd2
LATCH_FIFO32'd0
HCI_SIZE_tcdm_initiator224'h0
DW32'd0
BW32'd0
AW32'd0
UW32'd0
IW32'd0
EW32'd0
EHW32'd0

Submodules 2

InstanceModuleCountConns
i_fifo_incoming hwpe_stream_fifo 1 6
i_fifo_outgoing hwpe_stream_fifo 1 6

Interfaces / streams 4

stream_outgoing_pushhwpe_stream_intf_stream stream_outgoing_pophwpe_stream_intf_stream stream_incoming_pushhwpe_stream_intf_stream stream_incoming_pophwpe_stream_intf_stream

Imports

hwpe_stream_package::*hci_package::*