10-13-2011 12:17 AM
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;