Interfacing External SRAM

By

Eric Chan, Tim Bensler


External memory is often necessary when relatively large amounts of memory is required by a FPGA application. Such applications include data compression, DSP chips, or any application that requires large amounts of buffering. The on-board memory of a Altera EP10K20 in a UP1 board is limited to only about 12Kbits (6 2Kbit EAB blocks). Using external SRAM, one can command up to 1Mbyte of memory depending on the availability.

The main advantage of using SRAM over DRAM is that it is easier to interface with. To access DRAM, one needs a memory controller that handles the periodic refresh of the DRAM memory. With SRAM, however, one only needs to supply a constant DC source in order for the SRAM to retain its data. Furthermore, in the case of CMOS static memories, the power requirement is extremely small compared to the DRAM counterparts, allowing the implementation to be battery powered.

 

SRAM Operation

Here we are assuming that the one Data Bus is used for both the read/write operations. Static RAM is typically accessed as follows:

READ: (Assumes all signals are active low)

WRITE:

Parameter

SYMBOL

LH51256L-10

UNIT

MIN

MAX

Read Cycle Time

tRC

100

 

ns

Address access time

tAA

 

100

ns

Chip Enable access time

tACE

 

100

ns

Output Enable access time

tOE

 

50

ns

Output hold time

tOH

5

 

ns

CE Low to output in Low-Z

tLZ

5

 

ns

OE Low to output in Low-Z

tOLZ

5

 

ns

CE High to output in High-Z

tHZ

0

30

ns

OE High to output in High-Z

tOHZ

0

30

ns

 


 

 

Parameter

SYMBOL

LH51256L-10

UNIT

MIN

MAX

Write Cycle Time

tWC

100

 

ns

CE Low to end of write

tCW

90

 

ns

Address valid to end of write

tAW

90

 

ns

Address setup time

tAS

5

 

ns

Write recovery time

tWR

15

 

ns

Write pulse width

tWP

50

 

ns

Input data setup time

tDW

30

 

 

Input data hold time

tDH

10

 

 

WE High to output in High-Z

tOW

0

ns

WE Low to output in High-Z

tWZ

0

30

ns

OE High to output in High-Z

tOHZ

0

30

ns

 

Here is the VHDL code used to implement the SRAM interface:

sram_controller.vhd