cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
lisaliu
Newbie
Newbie
1,451 Views
Registered: ‎04-01-2011

data2mem in ISE12.3 does not work with Spartan6

Hello,

 

I am using SP605 board, and ISE 12.3. I found that I cannot use data2mem to initialize the instruction memory of my soft processor core implemented on Spartan6. The .bmm I used with data2mem command is generated by bitgen. Here is the content of the .bmm file:

 

// BMM LOC annotation file.
//
// Release 12.3 - Data2MEM M.70d, build 1.9 Aug 19, 2010
// Copyright (c) 1995-2011 Xilinx, Inc.  All rights reserved.


///////////////////////////////////////////////////////////////////////////////
//
// Address space 'dat3' 0x00000000:0x000007FF (2 KBytes).
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_SPACE dat3 RAMB16 [0x00000000:0x000007FF]
    BUS_BLOCK
        trmx/dmx/ram[3].RAMB16BWER_inst [31:0] PLACED = X2Y32;
    END_BUS_BLOCK;
END_ADDRESS_SPACE;


///////////////////////////////////////////////////////////////////////////////
//
// Address space 'dat2' 0x00000000:0x000007FF (2 KBytes).
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_SPACE dat2 RAMB16 [0x00000000:0x000007FF]
    BUS_BLOCK
        trmx/dmx/ram[2].RAMB16BWER_inst [31:0] PLACED = X2Y36;
    END_BUS_BLOCK;
END_ADDRESS_SPACE;


///////////////////////////////////////////////////////////////////////////////
//
// Address space 'dat1' 0x00000000:0x000007FF (2 KBytes).
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_SPACE dat1 RAMB16 [0x00000000:0x000007FF]
    BUS_BLOCK
        trmx/dmx/ram[1].RAMB16BWER_inst [31:0] PLACED = X2Y30;
    END_BUS_BLOCK;
END_ADDRESS_SPACE;


///////////////////////////////////////////////////////////////////////////////
//
// Address space 'dat0' 0x00000000:0x000007FF (2 KBytes).
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_SPACE dat0 RAMB16 [0x00000000:0x000007FF]
    BUS_BLOCK
        trmx/dmx/ram[0].RAMB16BWER_inst [31:0] PLACED = X2Y34;
    END_BUS_BLOCK;
END_ADDRESS_SPACE;


///////////////////////////////////////////////////////////////////////////////
//
// Address space 'ins3' 0x00000000:0x000008FF (2 KBytes).
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_SPACE ins3 RAMB18 [0x00000000:0x000008FF]
    BUS_BLOCK
        trmx/imx/ram[3].RAMB16BWER_inst [35:0] PLACED = X2Y26;
    END_BUS_BLOCK;
END_ADDRESS_SPACE;


///////////////////////////////////////////////////////////////////////////////
//
// Address space 'ins2' 0x00000000:0x000008FF (2 KBytes).
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_SPACE ins2 RAMB18 [0x00000000:0x000008FF]
    BUS_BLOCK
        trmx/imx/ram[2].RAMB16BWER_inst [35:0] PLACED = X2Y28;
    END_BUS_BLOCK;
END_ADDRESS_SPACE;


///////////////////////////////////////////////////////////////////////////////
//
// Address space 'ins1' 0x00000000:0x000008FF (2 KBytes).
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_SPACE ins1 RAMB18 [0x00000000:0x000008FF]
    BUS_BLOCK
        trmx/imx/ram[1].RAMB16BWER_inst [35:0] PLACED = X2Y24;
    END_BUS_BLOCK;
END_ADDRESS_SPACE;


///////////////////////////////////////////////////////////////////////////////
//
// Address space 'ins0' 0x00000000:0x000008FF (2 KBytes).
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_SPACE ins0 RAMB18 [0x00000000:0x000008FF]
    BUS_BLOCK
        trmx/imx/ram[0].RAMB16BWER_inst [35:0] PLACED = X1Y28;
    END_BUS_BLOCK;
END_ADDRESS_SPACE;

 

The data2mem command sequence I used to intialize the local memory of my processor core is as following:

 

data2mem -bm ram_bd.bmm  -bt  ..\prj\top.bit  -bd ..\mem\ins0.mem tag ins0 -o b temp1.bit
data2mem -bm ram_bd.bmm  -bt  temp1.bit  -bd ..\mem\ins1.mem tag ins1 -o b temp2.bit
data2mem -bm ram_bd.bmm  -bt  temp2.bit  -bd ..\mem\ins2.mem tag ins2 -o b temp3.bit
data2mem -bm ram_bd.bmm  -bt  temp3.bit  -bd ..\mem\ins3.mem tag ins3 -o b temp4.bit

data2mem -bm .\ram_bd.bmm  -bt  .\temp4.bit  -bd ..\mem\dat0.mem tag dat0 -o b .\temp5.bit
data2mem -bm .\ram_bd.bmm  -bt  .\temp5.bit  -bd ..\mem\dat1.mem tag dat1 -o b .\temp6.bit
data2mem -bm .\ram_bd.bmm  -bt  .\temp6.bit  -bd ..\mem\dat2.mem tag dat2 -o b .\temp7.bit
data2mem -bm .\ram_bd.bmm  -bt  .\temp7.bit  -bd ..\mem\dat3.mem tag dat3 -o b .\trm.bit

 

However, if I use data2mem command to generate .v files and include these files in the memory module, the memories are initialized correctly. Did anybod meet the same problem? Or can somebody give a solution for this problem? Many thanks first.

 

LL

0 Kudos
0 Replies