SRAM and FIFO Memories in Actel's Low-Power Flash Devices
6- 18
v1.1
Initializing the RAM/FIFO
The SRAM blocks can be initialized with data to use as a lookup table (LUT). Data initialization can
be accomplished either by loading the data through the design logic or through the UJTAG
interface. The UJTAG macro is used to allow access from the JTAG port to the internal logic in the
device. By sending the appropriate initialization string to the JTAG Test Access Port (TAP)
Controller, the designer can put the JTAG circuitry into a mode that allows the user to shift data
into the array logic through the JTAG port using the UJTAG macro. For a more detailed explanation
A user interface is required to receive the user command, initialization data, and clock from the
UJTAG macro. The interface must synchronize and load the data into the correct RAM block of the
design. The main outputs of the user interface block are the following:
Memory block chip select: Selects a memory block for initialization. The chip selects signals
for each memory block that can be generated from different user-defined pockets or simple
logic, such as a ring counter (see below).
Memory block write address: Identifies the address of the memory cell that needs to be
initialized.
Memory block write data: The interface block receives the data serially from the UTDI port
of the UJTAG macro and loads it in parallel into the write data ports of the memory blocks.
Memory block write clock: Drives the WCLK of the memory block and synchronizes the write
data, write address, and chip select signals.
Figure 6-8 shows the user interface between UJTAG and the memory blocks.
An important component of the interface between the UJTAG macro and the RAM blocks is a
serial-in/parallel-out shift register. The width of the shift register should equal the data width of
the RAM blocks. The RAM data arrives serially from the UTDI output of the UJTAG macro. The data
must be shifted into a shift register clocked by the JTAG clock (provided at the UDRCK output of
the UJTAG macro).
Then, after the shift register is fully loaded, the data must be transferred to the write data port of
the RAM block. To synchronize the loading of the write data with the write address and write
clock, the output of the shift register can be pipelined before driving the RAM block.
The write address can be generated in different ways. It can be imported through the TAP using a
different instruction opcode and another shift register, or generated internally using a simple
Figure 6-8 Interfacing TAP Ports and SRAM Blocks
TRST
UJTAG
TDO
TDI
TMS
TCK
TRST
TDO
TDI
TMS
TCK
URSTB
UDRUPD
UDRSH
UDRCAP
UDRCK
UTDI
UTDO
UIREG[7:0]
IR[7:0]
User Interface
WDATA
WADDR
WCLK
WEN1
WEN2
WEN3
Reset
DR_UPDATE
DR_SHIFT
DR_CAPTURE
DR_CLK
DIN
DOUT
WD
WADDR
WCLK
WEN
RAM1
WD
WADDR
WCLK
WEN
RAM2
WD
WADDR
WCLK
WEN
RAM3