Live value table memory

ENTITY LVT_MEM IS

Multiported memory implementation inspired by https://dl.acm.org/doi/abs/10.1145/2629629 This approach is suitable for shallow memories since it implements smaller true multiported memories using registers. Thus underlying memories are implemented using LUTs (distmem for Xilinx). Also this memory supports read-during write NEW_DATA behaviour. Writes to same address from multiple ports in the same clock cycle result in undefined behaviour.

Generics

Generic

Type

Default

Description

DATA_WIDTH

natural

16

Stored data width

ITEMS

natural

64

Depth of memory

READ_PORTS

natural

2

Amount of read ports

WRITE_PORTS

natural

2

Amount of write ports

RD_LATENCY

natural

1

Read latency - 0 or 1

RDW_BEHAV

string

“NEW_DATA”

Read during write behaviour: “NEW_DATA” or “DONT_CARE”.

MEM_TYPE

string

“BRAM”

Underlying memory type: “BRAM” or “LUT”. When using BRAM, RD_LATENCY must be set to 1.

DEVICE

string

“AGILEX”

Ports

Port

Type

Mode

Description

CLK

std_logic

in

RESET

std_logic

in

WR_EN

std_logic_vector(WRITE_PORTS-1 downto 0)

in

WR_ADDR

slv_array_t(WRITE_PORTS-1 downto 0)(log2(ITEMS)-1 downto 0)

in

WR_DATA

slv_array_t(WRITE_PORTS-1 downto 0)(DATA_WIDTH-1 downto 0)

in

RD_ADDR

slv_array_t(READ_PORTS-1 downto 0)(log2(ITEMS)-1 downto 0)

in

RD_DATA

slv_array_t(READ_PORTS-1 downto 0)(DATA_WIDTH-1 downto 0)

out