UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 23012

11.1 EDK - For 36 Kb of IOCM block RAM memory, is it necessary to allot 64 Kb block RAM memory?

Description

My application is barely over 32 Kb (around 36 Kb). The documentation seems to indicate that I must use 64 Kb memory, which wastes 28 Kb of memory. Is there a way to work around this so that I can use only four Kb extra without wasting 28 Kb of memory?

Solution

Since the IOCM is instantiated as a bus, it is possible to instantiate more than one IOCM block RAM controller.

If you want to use 36 Kb, the distribution is as follows:

# One IOCM Controller for 4 KB, where the Base Address is: 0xFFFF7000 AND the High Address is: 0xFFFF7FFF

# One IOCM Controller for 32 KB, where the Base Address is 0xFFFF8000 AND the High Address is: 0xFFFFFFFF

Consequently, you are instantiating 36 Kb of contiguous IOCM block RAM memory for your system. On the software side, you can modify the linker script to make the ICOM memory look like one piece of memory, as it is contiguous. The following is a snippet of MHS file to implement this method:

-----------------------------------------------------------------------------------

BEGIN isocm_v10

PARAMETER INSTANCE = iocm

PARAMETER HW_VER = 2.00.a

PARAMETER C_ISCNTLVALUE = 0x81

PORT ISOCM_Clk = sys_clk_s

PORT sys_rst = sys_bus_reset

END

BEGIN isbram_if_cntlr

PARAMETER INSTANCE = iocm_cntlr

PARAMETER HW_VER = 3.00.a

PARAMETER C_BASEADDR = 0xffff8000

PARAMETER C_HIGHADDR = 0xffffffff

BUS_INTERFACE ISOCM = iocm

BUS_INTERFACE DCR_WRITE_PORT = isocm_porta

BUS_INTERFACE INSTRN_READ_PORT = isocm_portb

END

BEGIN bram_block

PARAMETER INSTANCE = isocm_bram

PARAMETER HW_VER = 1.00.a

BUS_INTERFACE PORTA = isocm_porta

BUS_INTERFACE PORTB = isocm_portb

END

BEGIN isbram_if_cntlr

PARAMETER INSTANCE = iocm_cntlr_1

PARAMETER HW_VER = 3.00.a

PARAMETER C_BASEADDR = 0xFFFF7000

PARAMETER C_HIGHADDR = 0xFFFF7FFF

BUS_INTERFACE ISOCM = iocm

BUS_INTERFACE DCR_WRITE_PORT = isocm_porta_1

BUS_INTERFACE INSTRN_READ_PORT = isocm_portb_1

END

BEGIN bram_block

PARAMETER INSTANCE = isocm_bram_1

PARAMETER HW_VER = 1.00.a

BUS_INTERFACE PORTA = isocm_porta_1

BUS_INTERFACE PORTB = isocm_portb_1

END

AR# 23012
Date Created 09/04/2007
Last Updated 12/15/2012
Status Active
Type General Article