Distributed RAMs (DRAM / SLICEM)

The SLICEM site can turn the 4 LUT6s into distributed RAMs. There are a number of modes, each element is either a 64x1 or a 32x2 distributed RAM (DRAM). The individual elements can be combined into either a 128x1 or 256x1 DRAM.

Functions

Modes

Some modes can be enabled at the single LUT level. The following modes are:

  • 32x2 Single port (32x2S)
  • 32x2 Dual port (32x2D)
  • 64x1 Single port (64x1S)
  • 64x1 Dual port (64x1D)

Some modes are SLICEM wide:

  • 128x1 Single port (128x1S)
  • 128x1 Dual port (128x1D)
  • 256x1

Ports

Each LUT element when operating in RAM mode is a DPRAM64.

Port name Direction Width Description
WA IN 8 Write address
A IN 6 Read address
DI IN 2 Data input
WE IN 1 Write enable
CLK IN 1 Clock
O6 OUT 1 Data output 1
O5 OUT 1 Data output 2

Configuration

The configuration for the DRAM is found in the following segbits:

  • ALUT.RAM
  • ALUT.SMALL
  • ADI1MUX.AI
  • BLUT.RAM
  • BLUT.SMALL
  • BDI1MUX.BI
  • CLUT.RAM
  • CLUT.SMALL
  • CDI1MUX.CI
  • DLUT.RAM
  • DLUT.SMALL
  • WA7USED
  • WA8USED

In order to use DRAM in a SLICEM, the DLUT in the SLICEM must be a RAM (e.g. DLUT.RAM). In addition the DLUT can never be a dual port RAM because the write address lines for the DLUT are also the read address lines.

Segbits for modes

The following table shows the features required for each mode type for each LUT.

LUTs 32x2S 32x2D 64x1S 64x1D
D

DLUT.RAM

DLUT.SMALL

N/A DLUT.RAM N/A
C

CLUT.RAM

CLUT.SMALL

CDI1MUX.CI

CLUT.RAM

CLUT.SMALL

CLUT.RAM

CDI1MUX.CI

CLUT.RAM
B

BLUT.RAM

BLUT.SMALL

BDI1MUX.CI

BLUT.RAM

BLUT.SMALL

BLUT.RAM

BDI1MUX.CI

BLUT.RAM
A

ALUT.RAM

ALUT.SMALL

ADI1MUX.CI

ALUT.RAM

ALUT.SMALL

ALUT.RAM

ADI1MUX.CI

ALUT.RAM

Ports for modes

In each mode, how the ports are used vary. The following table show the relationship between the LUT mode and ports.

LUTs 32x2S 32x2D 64x1S 64x1D
D

WA[4:0] = A[4:0] = {D5,D4,D3,D2,D1}

DI[1:0] = {DX, DI}

N/A

WA[5:0] = A[5:0] = {D6,D5,D4,D3,D2,D1}

DI[0] = DI

N/A
C

WA[4:0] = A[4:0] = {C5,C4,C3,C2,C1}

DI[1:0] = {CX, CI}

WA[4:0] = {D5,D4,D3,D2,D1}

A[4:0] = {C5,C4,C3,C2,C1}

DI[1:0] = {CX,DI}

WA[5:0] = A[5:0] = {C6,C5,C4,C3,C2,C1}

DI[0] = CI

WA[5:0] = {D6,D5,D4,D3,D2,D1}

A[5:0] = {C6,C5,C4,C3,C2,C1}

DI[0] = DI

B

WA[4:0] = A[4:0] = {B5,B4,B3,B2,B1}

DI[1:0] = {BX, BI}

WA[4:0] = {D5,D4,D3,D2,D1}

A[4:0] = {B5,B4,B3,B2,B1}

DI[1:0] = {BX,DI}

WA[5:0] = A[5:0] = {B6,B5,B4,B3,B2,B1}

DI[0] = BI

WA[5:0] = {D6,D5,D4,D3,D2,D1}

A[5:0] = {B6,B5,B4,B3,B2,B1}

DI[0] = DI

A

WA[4:0] = A[4:0] = {A5,A4,A3,A2,A1}

DI[1:0] = {AX, AI}

WA[4:0] = {D5,D4,D3,D2,D1}

A[4:0] = {A5,A4,A3,A2,A1}

DI[1:0] = {AX,BLUT.DI[0]}

WA[5:0] = A[5:0] = {A6,A5,A4,A3,A2,A1}

DI[0] = AI

WA[5:0] = {D6,D5,D4,D3,D2,D1}

A[5:0] = {A6,A5,A4,A3,A2,A1}

DI[0] = BLUT.DI[0]

Techlib macros

The tech library exposes the following aggregate modes, which are accomplished with the following combinations.

Macro Option 1 Option 2 Option 3 Option 4
RAM32M

DLUT = 32x2S

CLUT = 32x2D

BLUT = 32x2D

ALUT = 32x2D

     
RAM32X1D

DLUT = 32x2S

CLUT = 32x2D

BLUT = 32x2S

ALUT = 32x2D

   
RAM32X1S DLUT = 32x1S CLUT = 32x1S BLUT = 32x1S ALUT = 32x1S
RAM32X2S

DLUT = 32x2S

CLUT = 32x2D

BLUT = 32x2S

ALUT = 32x2D

   
RAM64M

DLUT = 64x1S

CLUT = 64x1D

BLUT = 64x1D

ALUT = 64x1D

     
RAM64X1D

DLUT = 64x1S

CLUT = 64x1D

BLUT = 64x1S

ALUT = 64x1D

   
RAM64X1S DLUT = 64x1S CLUT = 64x1S BLUT = 64x1S ALUT = 64x1S