cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
timo-ge
Explorer
Explorer
2,216 Views
Registered: ‎11-12-2007

2 CPUs with shared BRAM, BRAM init

Hi,

I'm having some trouble with the generated system_bd.bmm in XPS 12.4.

I got a XPS design with two processors (1 PPC440, 1Microblaze) on a Virtex5FXT.

Both CPU must communicate with each other through one shared bram, every CPU has its own PLB. 

 

Address MAP:

PPC: 0xFFFF0000 -- 0xFFFFFFFF   bram_1

PPC: 0xFFFE0000 -- 0xFFFEFFFF   bram_2 (port2, shared with mb)

 

MB: 0x00000000 -- 0x0000FFFF     bram_2 (port1, main memory for Mblaze)

 

XPS always generates a wrong system_bd.bmm file which I always must fix manually, that's quiete annoying.

When initializing the bram with both elf-files, the microblaze program gets overwritten.

 

I have tried to put a gep in the address map of the PPC, but this didn't help.

 

 

Here is the generated system.bmm:

ADDRESS_MAP ppc440_1 PPC440 100
	ADDRESS_SPACE bram_2_combined COMBINED [0xfffe0000:0xffffffff]
		ADDRESS_RANGE RAMB32
		BUS_BLOCK
			bram_2/bram_2/ramb36_0 [31:30] INPUT = bram_2_combined_0.mem ;
			bram_2/bram_2/ramb36_1 [29:28] INPUT = bram_2_combined_1.mem ;
			bram_2/bram_2/ramb36_2 [27:26] INPUT = bram_2_combined_2.mem ;
			bram_2/bram_2/ramb36_3 [25:24] INPUT = bram_2_combined_3.mem ;
			bram_2/bram_2/ramb36_4 [23:22] INPUT = bram_2_combined_4.mem ;
			bram_2/bram_2/ramb36_5 [21:20] INPUT = bram_2_combined_5.mem ;
			bram_2/bram_2/ramb36_6 [19:18] INPUT = bram_2_combined_6.mem ;
			bram_2/bram_2/ramb36_7 [17:16] INPUT = bram_2_combined_7.mem ;
			bram_2/bram_2/ramb36_8 [15:14] INPUT = bram_2_combined_8.mem ;
			bram_2/bram_2/ramb36_9 [13:12] INPUT = bram_2_combined_9.mem ;
			bram_2/bram_2/ramb36_10 [11:10] INPUT = bram_2_combined_10.mem ;
			bram_2/bram_2/ramb36_11 [9:8] INPUT = bram_2_combined_11.mem ;
			bram_2/bram_2/ramb36_12 [7:6] INPUT = bram_2_combined_12.mem ;
			bram_2/bram_2/ramb36_13 [5:4] INPUT = bram_2_combined_13.mem ;
			bram_2/bram_2/ramb36_14 [3:2] INPUT = bram_2_combined_14.mem ;
			bram_2/bram_2/ramb36_15 [1:0] INPUT = bram_2_combined_15.mem ;
		END_BUS_BLOCK;
		END_ADDRESS_RANGE;
		ADDRESS_RANGE RAMB32
		BUS_BLOCK
			bram_1/bram_1/ramb36_0 [31:30] INPUT = bram_1_combined_0.mem ;
			bram_1/bram_1/ramb36_1 [29:28] INPUT = bram_1_combined_1.mem ;
			bram_1/bram_1/ramb36_2 [27:26] INPUT = bram_1_combined_2.mem ;
			bram_1/bram_1/ramb36_3 [25:24] INPUT = bram_1_combined_3.mem ;
			bram_1/bram_1/ramb36_4 [23:22] INPUT = bram_1_combined_4.mem ;
			bram_1/bram_1/ramb36_5 [21:20] INPUT = bram_1_combined_5.mem ;
			bram_1/bram_1/ramb36_6 [19:18] INPUT = bram_1_combined_6.mem ;
			bram_1/bram_1/ramb36_7 [17:16] INPUT = bram_1_combined_7.mem ;
			bram_1/bram_1/ramb36_8 [15:14] INPUT = bram_1_combined_8.mem ;
			bram_1/bram_1/ramb36_9 [13:12] INPUT = bram_1_combined_9.mem ;
			bram_1/bram_1/ramb36_10 [11:10] INPUT = bram_1_combined_10.mem ;
			bram_1/bram_1/ramb36_11 [9:8] INPUT = bram_1_combined_11.mem ;
			bram_1/bram_1/ramb36_12 [7:6] INPUT = bram_1_combined_12.mem ;
			bram_1/bram_1/ramb36_13 [5:4] INPUT = bram_1_combined_13.mem ;
			bram_1/bram_1/ramb36_14 [3:2] INPUT = bram_1_combined_14.mem ;
			bram_1/bram_1/ramb36_15 [1:0] INPUT = bram_1_combined_15.mem ;
		END_BUS_BLOCK;
		END_ADDRESS_RANGE;
	END_ADDRESS_SPACE;
END_ADDRESS_MAP;

ADDRESS_MAP microblaze_1 MICROBLAZE 101
	ADDRESS_SPACE bram_2_combined COMBINED [0x00000000:0x0000ffff]
		ADDRESS_RANGE RAMB32
		BUS_BLOCK
			bram_2/bram_2/ramb36_0 [31:30] INPUT = bram_2_combined_0.mem ;
			bram_2/bram_2/ramb36_1 [29:28] INPUT = bram_2_combined_1.mem ;
			bram_2/bram_2/ramb36_2 [27:26] INPUT = bram_2_combined_2.mem ;
			bram_2/bram_2/ramb36_3 [25:24] INPUT = bram_2_combined_3.mem ;
			bram_2/bram_2/ramb36_4 [23:22] INPUT = bram_2_combined_4.mem ;
			bram_2/bram_2/ramb36_5 [21:20] INPUT = bram_2_combined_5.mem ;
			bram_2/bram_2/ramb36_6 [19:18] INPUT = bram_2_combined_6.mem ;
			bram_2/bram_2/ramb36_7 [17:16] INPUT = bram_2_combined_7.mem ;
			bram_2/bram_2/ramb36_8 [15:14] INPUT = bram_2_combined_8.mem ;
			bram_2/bram_2/ramb36_9 [13:12] INPUT = bram_2_combined_9.mem ;
			bram_2/bram_2/ramb36_10 [11:10] INPUT = bram_2_combined_10.mem ;
			bram_2/bram_2/ramb36_11 [9:8] INPUT = bram_2_combined_11.mem ;
			bram_2/bram_2/ramb36_12 [7:6] INPUT = bram_2_combined_12.mem ;
			bram_2/bram_2/ramb36_13 [5:4] INPUT = bram_2_combined_13.mem ;
			bram_2/bram_2/ramb36_14 [3:2] INPUT = bram_2_combined_14.mem ;
			bram_2/bram_2/ramb36_15 [1:0] INPUT = bram_2_combined_15.mem ;
		END_BUS_BLOCK;
		END_ADDRESS_RANGE;
	END_ADDRESS_SPACE;
END_ADDRESS_MAP;

 

And the system_bd.bmm:

///////////////////////////////////////////////////////////////////////////////
//
// Processor 'ppc440_1', ID 100, memory map.
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_MAP ppc440_1 PPC440 100


    ///////////////////////////////////////////////////////////////////////////////
    //
    // Processor 'ppc440_1' address space 'bram_2_combined' 0xFFFE0000:0xFFFFFFFF (128 KBytes).
    //
    ///////////////////////////////////////////////////////////////////////////////

    ADDRESS_SPACE bram_2_combined COMBINED [0xFFFE0000:0xFFFFFFFF]

        ///////////////////////////////////////////////////////////////////////////////
        //
        // Address range 0xFFFE0000:0xFFFEFFFF (64 KBytes).
        //
        ///////////////////////////////////////////////////////////////////////////////

      ADDRESS_RANGE RAMB32
          BUS_BLOCK
   bram_2/bram_2/ramb36_0 [31:30] INPUT = bram_2_combined_0.mem PLACED = X3Y15;
   bram_2/bram_2/ramb36_1 [29:28] INPUT = bram_2_combined_1.mem PLACED = X3Y14;
   bram_2/bram_2/ramb36_2 [27:26] INPUT = bram_2_combined_2.mem PLACED = X4Y15;
   bram_2/bram_2/ramb36_3 [25:24] INPUT = bram_2_combined_3.mem PLACED = X4Y14;
   bram_2/bram_2/ramb36_4 [23:22] INPUT = bram_2_combined_4.mem PLACED = X4Y18;
   bram_2/bram_2/ramb36_5 [21:20] INPUT = bram_2_combined_5.mem PLACED = X4Y19;
   bram_2/bram_2/ramb36_6 [19:18] INPUT = bram_2_combined_6.mem PLACED = X3Y19;
   bram_2/bram_2/ramb36_7 [17:16] INPUT = bram_2_combined_7.mem PLACED = X3Y18;
   bram_2/bram_2/ramb36_8 [15:14] INPUT = bram_2_combined_8.mem PLACED = X4Y16;
   bram_2/bram_2/ramb36_9 [13:12] INPUT = bram_2_combined_9.mem PLACED = X4Y17;
   bram_2/bram_2/ramb36_10 [11:10] INPUT = bram_2_combined_10.mem PLACED = X0Y16;
   bram_2/bram_2/ramb36_11 [9:8] INPUT = bram_2_combined_11.mem PLACED = X0Y15;
   bram_2/bram_2/ramb36_12 [7:6] INPUT = bram_2_combined_12.mem PLACED = X3Y17;
   bram_2/bram_2/ramb36_13 [5:4] INPUT = bram_2_combined_13.mem PLACED = X3Y16;
   bram_2/bram_2/ramb36_14 [3:2] INPUT = bram_2_combined_14.mem PLACED = X3Y13;
   bram_2/bram_2/ramb36_15 [1:0] INPUT = bram_2_combined_15.mem PLACED = X4Y13;
          END_BUS_BLOCK;
      END_ADDRESS_RANGE;


        ///////////////////////////////////////////////////////////////////////////////
        //
        // Address range 0xFFFF0000:0xFFFFFFFF (64 KBytes).
        //
        ///////////////////////////////////////////////////////////////////////////////

        ADDRESS_RANGE RAMB32
            BUS_BLOCK
                bram_1/bram_1/ramb36_0 [31:30] INPUT = bram_1_combined_0.mem PLACED = X2Y11;
                bram_1/bram_1/ramb36_1 [29:28] INPUT = bram_1_combined_1.mem PLACED = X3Y10;
                bram_1/bram_1/ramb36_2 [27:26] INPUT = bram_1_combined_2.mem PLACED = X1Y10;
                bram_1/bram_1/ramb36_3 [25:24] INPUT = bram_1_combined_3.mem PLACED = X1Y11;
                bram_1/bram_1/ramb36_4 [23:22] INPUT = bram_1_combined_4.mem PLACED = X4Y20;
                bram_1/bram_1/ramb36_5 [21:20] INPUT = bram_1_combined_5.mem PLACED = X3Y20;
                bram_1/bram_1/ramb36_6 [19:18] INPUT = bram_1_combined_6.mem PLACED = X4Y11;
                bram_1/bram_1/ramb36_7 [17:16] INPUT = bram_1_combined_7.mem PLACED = X4Y10;
                bram_1/bram_1/ramb36_8 [15:14] INPUT = bram_1_combined_8.mem PLACED = X3Y11;
                bram_1/bram_1/ramb36_9 [13:12] INPUT = bram_1_combined_9.mem PLACED = X3Y12;
                bram_1/bram_1/ramb36_10 [11:10] INPUT = bram_1_combined_10.mem PLACED = X0Y13;
                bram_1/bram_1/ramb36_11 [9:8] INPUT = bram_1_combined_11.mem PLACED = X0Y14;
                bram_1/bram_1/ramb36_12 [7:6] INPUT = bram_1_combined_12.mem PLACED = X1Y20;
                bram_1/bram_1/ramb36_13 [5:4] INPUT = bram_1_combined_13.mem PLACED = X2Y20;
                bram_1/bram_1/ramb36_14 [3:2] INPUT = bram_1_combined_14.mem PLACED = X3Y9;
                bram_1/bram_1/ramb36_15 [1:0] INPUT = bram_1_combined_15.mem PLACED = X4Y9;
            END_BUS_BLOCK;
        END_ADDRESS_RANGE;
    END_ADDRESS_SPACE;

END_ADDRESS_MAP;


///////////////////////////////////////////////////////////////////////////////
//
// Processor 'microblaze_1', ID 101, memory map.
//
///////////////////////////////////////////////////////////////////////////////

ADDRESS_MAP microblaze_1 MICROBLAZE 101


    ///////////////////////////////////////////////////////////////////////////////
    //
    // Processor 'microblaze_1' address space 'bram_2_combined' 0x00000000:0x0000FFFF (64 KBytes).
    //
    ///////////////////////////////////////////////////////////////////////////////

    ADDRESS_SPACE bram_2_combined RAMB32 [0x00000000:0x0000FFFF]
        BUS_BLOCK
            bram_2/bram_2/ramb36_0 [31:30] INPUT = bram_2_combined_0.mem PLACED = X3Y15;
            bram_2/bram_2/ramb36_1 [29:28] INPUT = bram_2_combined_1.mem PLACED = X3Y14;
            bram_2/bram_2/ramb36_2 [27:26] INPUT = bram_2_combined_2.mem PLACED = X4Y15;
            bram_2/bram_2/ramb36_3 [25:24] INPUT = bram_2_combined_3.mem PLACED = X4Y14;
            bram_2/bram_2/ramb36_4 [23:22] INPUT = bram_2_combined_4.mem PLACED = X4Y18;
            bram_2/bram_2/ramb36_5 [21:20] INPUT = bram_2_combined_5.mem PLACED = X4Y19;
            bram_2/bram_2/ramb36_6 [19:18] INPUT = bram_2_combined_6.mem PLACED = X3Y19;
            bram_2/bram_2/ramb36_7 [17:16] INPUT = bram_2_combined_7.mem PLACED = X3Y18;
            bram_2/bram_2/ramb36_8 [15:14] INPUT = bram_2_combined_8.mem PLACED = X4Y16;
            bram_2/bram_2/ramb36_9 [13:12] INPUT = bram_2_combined_9.mem PLACED = X4Y17;
            bram_2/bram_2/ramb36_10 [11:10] INPUT = bram_2_combined_10.mem PLACED = X0Y16;
            bram_2/bram_2/ramb36_11 [9:8] INPUT = bram_2_combined_11.mem PLACED = X0Y15;
            bram_2/bram_2/ramb36_12 [7:6] INPUT = bram_2_combined_12.mem PLACED = X3Y17;
            bram_2/bram_2/ramb36_13 [5:4] INPUT = bram_2_combined_13.mem PLACED = X3Y16;
            bram_2/bram_2/ramb36_14 [3:2] INPUT = bram_2_combined_14.mem PLACED = X3Y13;
            bram_2/bram_2/ramb36_15 [1:0] INPUT = bram_2_combined_15.mem PLACED = X4Y13;
        END_BUS_BLOCK;
    END_ADDRESS_SPACE;

END_ADDRESS_MAP;

 

 

0 Kudos
Reply
0 Replies