Forum: FPGA, VHDL & Co. data2mem zur Mitarbeit bewegen


von Xilinx-generverter (Gast)


Lesenswert?

Hallo Forum!

Ich möchte mir unter Xilinx-ISE mit data2mem ein gültiges bmm-File bauen 
lassen für einen BRAM mit 64k x 32 Bits.

Dazu verwende ich die folgende Kommandozeile:
1
$ data2mem -mf   p mein_soc PPC405 0   a mein_ram w 0x0000 32   s RAMB16 0x10000 2   mein_block   -o p mein.bmm

Leider bekomme ich die folgende Fehlermeldung:
1
ERROR:Data2MEM:11 - Unexpected symbol '0', 'ADDRESS_MAP 'p' processor type name' expected.
2
data2mem -mf p mein_soc PPC405 0 a mein_ram w 0x0000 32 s RAMB16 0x10000 2 mein_block -o p mein.bmm
3
                               ^

Und das, obwohl ich laut Hilfe die richtige Syntax verwende (und der 
Prozessortyp ja schon da steht...):
1
$ data2mem -help mf
2
...    
3
    The Address Space Definition group items mean:
4
5
    -mf <p PNAME PTYPE PID
6
            <a ANAME ['w' | 'b'] ASTART BWIDTH
7
                <s MTYPE BSIZE DWIDTH IBASE...>...>...>
8
9
       'p'    = The following three items define an Address Map definition.
10
                As many Address Map definitions are repeated back-to-back.
11
                An Address Map definition must have at least one Address
12
                Space definition.
13
14
       PNAME  = Alpha-numeric name of the Processor Map.
15
16
       PTYPE  = Alpha-numeric name of the processor type in the Address Map.
17
                Legal processor types consists of 'PPC405', 'MICROBLAZE',
18
                and 'PICOBLAZE'.
19
20
       PID    = Numeric ID of the Address Map.
21
...

Die wenigen Beispiele, die ich im Netz gefunden habe, verwenden auch 
diese Syntax.

Hat jemand noch eine ältere ISE-Version, bei der das evtl. klappt?
Wenn ja, wäre es nett, das bmm hier anzuhängen.

Alternativ sind Vorschläge willkommen, um data2mem lauffähig zu 
machen...

TIA

von Strubi (Gast)


Lesenswert?

Moin,

ich erinnere mich dunkel, dass die Hilfe in data2mem nicht mehr so ganz 
korrekt war.
Was bei mir funktioniert, ist:

1) foo.bmm schreiben, in Projekt einbinden
2) Tools generieren daraus foo_bd.bmm (siehe Xilinx-Doku dazu)
3) ELF-File in SRAM-Bitstream mergen. Hier mal copy/paste die 
Makefile-Regel dazu:
1
$(PLATFORM)_fw.bit: fw/$(PLATFORM)_top.bit boot.elf
2
        $(DATA2MEM) -bd boot.elf -bm foo_bd.bmm -bt $< \
3
        -bx /tmp \
4
        -o b $@

Gruss,

- Strubi


P.S. Poste doch sonst mal dein BMM.

von Xilinx-generverter (Gast)


Lesenswert?

Hallo Strubi,

Ab Punkt 2 funktioniert es erwartungsgemäß.
Die Schwierigkeit liegt in Punkt 1, dem Erstellen der richtigen 
.bmm-Datei.
Eigentlich sollte die mit dem Parameter -mf auch von data2mem erstellt 
werden können.

Für einen Blockram mit 512x32 (words x bits) sieht die Datei so aus:
1
ADDRESS_SPACE my_ram RAMB16 [0x00000000:0x000007ff]
2
    BUS_BLOCK
3
        ram_instance/Mram_ram [31:0];
4
    END_BUS_BLOCK;
5
END_ADDRESS_SPACE;

Getestet habe ich es, indem ich mir Zufallszahlen (bin + mem) generiert 
habe:
1
$ srec_cat -generate 0x0000 0x0800 -random -o data.bin -binary
2
3
$ echo "@0" > data.mem
4
$ xxd -plain data.bin >> data.mem

Dann kann ich nach der Synthese (und data2mem) die Bitfiles vergleichen:
1
$ xxd fw/$(PLATFORM)_top.bit > $(PLATFORM)_top.xxd
2
$ xxd $(PLATFORM)_fw.bit     > $(PLATFORM)_fw.xxd
3
4
$ diff  $(PLATFORM)_top.xxd  $(PLATFORM)_fw.xxd  |  wc -l
Wenn beide bit (bzw. xxd)-Dateien identisch sind, sind die bmm-Dateien 
korrekt.


Die bmm-Datei für ein 1024x32 RAM ist z.B. nicht korrekt:
1
# !!! NOT working !!!
2
ADDRESS_SPACE my_ram RAMB16 [0x00000000:0x00000fff]
3
    BUS_BLOCK
4
        ram_instance/Mram_ram2 [31:16];
5
        ram_instance/Mram_ram1 [15: 0];
6
    END_BUS_BLOCK;
7
END_ADDRESS_SPACE;
8
# !!! NOT working !!!

von Xilinx-generverter (Gast)


Angehängte Dateien:

Lesenswert?

Xilinx-generverter schrieb:
> Die bmm-Datei für ein 1024x32 RAM ist z.B. nicht korrekt:

Neue Erkenntnisse:
Bei 1024x32 (2xRAMB16) und bei 2048x32 (4xRAMB16) werden von der 
Synthese die Paritybits des BRAM (unnötigerweise) mit genutzt.
Das kann man im 'technologie view' und auch im FPGA-Editor sehen.

Das hat die folgenden Konsequenzen:
- die bmm-Datei passt nicht mehr (RAMB18 statt RAMB16, 36 Bit statt 32 
Bit [confusing])
- die mem-Datei zum Initialisieren braucht ein anderes Format
- elf-Dateien gehen vermutlich gar nicht mehr

P.S.: Mit dem angehängten Quelltext (Versuch eines Minimalbeispiels) 
kann der genneigte Leser die Problematik evtl. nachvollziehen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.