Professional Documents
Culture Documents
Project: Competence Team for Test and Verification of Dependable Systems Projektnummer: MA 27-Projekt 05-05 Dieses Projekt wird von der Magistratsabteilung 27 der Stadt Wien im Rahmen der FH-Ausschreibung Nr. 5, Stiftungsprofessuren und Kompetenzteams fr die Wiener Fachhochschul-Ausbildungen, 2005, finanziell untersttzt.
Fachhochschule Technikum Wien Fachbereich Embedded Systems Hchstdtplatz 5 1200 Wien, sterreich http://embsys.technikum-wien.at
Letzte nderungen
Author
Christoph Veigl (CV) Christoph Veigl (CV) Christoph Veigl (CV)
Datum
3.12.2007 4.12.2007 5.12.2007
nderung
V0.1 Erste Version des Dokuments erstellt. CV. V0.2 Details gendert, Abbildungen. CV. V0.3 Bug entfernt: Dateiname im Bsp. auf Seite 12 gendert: mc8051_rom_bd.bmm . CV.
Inhalt
1 Einleitung 1.1 2 Bentigte Tools / Entwicklungsumgebungen: Prerequisites 3 3 4 4 5 6 7 8 9 10 11 11 12 12 12 13 13
ConvHex: Convertierung des Intel-Hex Files in Formate fr Simulation und Synthese 2.1 2.2 Die Formate Hex, Dua, Coe und Mem Der Aufruf von convHex
Data2MEM 3.1 3.2 3.3 Struktur des .bmm-Files: Beispiel fr ein .bmm-File [XIL01]: Einbindung des .bmm Files in das Xilinx ISE - Projekt vom 8051-Sourcecode zum Download mit impact
Auffinden der BlockMemory Strukturen BlockMemory Map-File: mc8051_rom.bmm Sourcode compilieren und linken Erzeugung des mem-Files: convHex Update des Bitstreams: data2MEM Aufruf von Impact im Batch-Modus:
References
14
1 Einleitung
Das vorliegende Dokument beschreibt eine substanzielle Erleichertung des Software-Tool-Flows fr die Implementierung in unseren Xilinx-FPGAs: Das direkte Einfgen von Software in den Bit-Stream der generierten Hardware. Xilinx stellt hierfr das Programm data2MEM zur Verfgung, dessen Anwendung im folgenden beschrieben wird. Grundstzlich lsst sich die Software fr eine im FPGA laufende CPU schon bei der Synthese festegen, indem man ein entsprechendes .coe File fr die Initialisierung des CPU-ROM (abgebildet in das FPGA Block-Ram) im Xilinx Core-Generator angibt [KUT]. Das .coe - File enthlt ein Speicherabbild des Object-Codes in binrer Darstellungsform und wird durch das Tool convHex aus einem Intel-.hex-Format erzeugt [CONVHEX]. Der Nachteil dieser Vorgehensweise besteht darin, dass auch schon kleine nderungen in der Software eine Neusynthese der gesamten Hardware in der Xilinx-ISE notwendig machen, um die Softwareinhalte ins Block-Ram zu bernehmen. Eine elegante und zeitsparende Alternative besteht in der Verwendung des XilinxTools data2MEM, welches die nderung der Block-Ram-Inhalte in einem bestehenden .bit - File ermglicht. Dadurch kann die Software fr ein IP-Core direkt in den Bitstream eingefgt werden, ohne dass das Core neu synthetisiert werden muss. Ein Software Update reduziert sich auf die Neucompilerung und Erzeugung eines .hex Files mit einer beliebigen IDE, das Update des Bitstreams mittels data2mem und den Download des neuen .bit - Files auf das FPGA mittels impact. Alle diese Aufgaben lassen sich durch Kommandozeilen-Aufrufe bewerkstelligen und sind insoferne in ein Batch-File bzw. in ein Make-File integrierbar. Die folgenden praktischen Beispiele beziehen sich auf die mc8051 - Portierung fr das Virtex4-Board [mc8051], die beschriebene Vorgangsweise kann jedoch auch fr andere CPUs oder IP-Cores eingesetzt werden.
Das .dua Format ist eine ASCII-lesbare Binrdarstellung des .hex Files, bei der die Adressen sequentiell geordnet und unbelegte Speicherbereiche mit 0 gefllt wurden. Das .dua File wird zB. bei der Simulation verwednet. Beispiel: .dua-File:
00000010 00000000 00100101 00000000 00000000 (...)
Das .coe Format ist eine Erweiterung des .dua - Formates um zwei HeaderZeilen. Dieses File kann vom Xilinx Core-Generator zur Initialisierung von ROMSpeicher verwendet werden, dient also dazu, das bersetzte Programm als ausfhrbaren Code ins FPGA-Design (in den Bitstream) aufzunehmen: .coe-File:
memory_initialization_radix = 2; memory_initialization_vector = 00000010, 00000000, 00100101, 00000000, 00000000, (...)
Das .mem - Format ist eine hexadezimale Darstellung der Speicherinhalte, wobei fr jeden Speicherinhalt auch die Adresse angegeben wird. Das .mem - File kann vom Xilinx-Utility data2MEM eingelesen werden, um den Inhalt eines Bitstreams zu modifizieren. .mem-File:
@0000 @0001 @0002 @0003 @0004 (...) 02 00 25 00 00
3 Data2MEM
Das Data2MEM Utility ermglicht das Einfgen von sequentiellen Speicherinhalten in FPGA Block-Rams, und zwar durch direkte Manipulation eines bestehenden Bitstreams (.bit-File). So kann Software vor dem Download einer CPU ins FPGA in den (ansonsten unvernderten) Bitstream eingefgt werden. Dies stellt eine Kombination des CPU- und des FPGA -Tool-Flows dar, welche die beiden Flows selbst unverndert lsst. Grundstzlich kann Data2MEM verschiedene Datenformate verarbeiten und ausgeben. Fr das Einlesen des Bitstreams stehen neben dem MEM-Format auch das ELF- und das DWARFFormat zur Verfgung. Mgliche Ausgabeformate sind neben dem aktualisierten .bit - File auch Verilog, VHDL- oder MEM-Files fr die Simulation (post-PAR simulation).
Data2MEM fhrt bei der Integration von Speicherinhalten in den Bitstream eine geeignete Umordnung der Daten durch, damit ein kontinuierlicher Adressraum erhalten bleibt. Dies ist ntig, weil der CPU-Adress- und Datenraum fr gewhnlich grer sind als die Architektur der Block-Rams und die Inhalte auf unterschiedliche BRAMs aufgeteilt werden mssen, um einen linearen Zugriff aufrechtzuerhalten:
Abb. 3 : Beispiel fr die Anordung des BRAM Adressraumes fr einen 64-bit Datenzugriff [XIL01]
Die Gre und Anordnung der Block-Rams ist technologie- bzw. designabhngig und muss in einem BlockRam Memory-Map (.bmm) File angegeben werden. Hier bestehen Unterschiede zwischen den Xilinx FPGA-Familien, derzeit sind folgenden Block-Ram-Typen verfgbar: RAMB4 (4kBit, Virtex, Virtex-E) RAMB16 (16-Kbit, Spartan-3, Virtex-II) RAMB18 (18-Kbit, Virtex-4) RAMB36 (36-Kbit BRAM, Virtex-5) Neben der Anordnung und Breite der Block RAMs (Bitlane interleave) wird im .bmm - File auch die Anzahl der ntigen Bus-Blcke angegeben. Im Beispiel aus Abb.4 wurde eine Bitlane-Breite von 8 Bit gewhlt (dieser Wert muss vom Xilinx-BlockRamTyp untersttzt werden), dies bewirkt eine Aufteilung des 64-Bit Datenwortes auf 8 BlockRams. Aus der gewhlten Bitlane-Breite ergeben sich die Datentiefe eines Block-Rams und die ntige Anzahl von Bus-Blcken fr den gewnschten Adressraum. Fr den BlockRam-Typ RAMB4 wren folgende Bitlane-Breiten bzw. Datentiefen mglich: RAMB4_S1: 1 Bit x RAMB4_S2: 2 Bit x RAMB4_S4: 4 Bit x RAMB4_S8: 8 Bit x RAMB4_S16: 16 Bit 4096 2048 1024 512 x 256
<memory_devicetype> gibt den verfgbaren Block-Ram-Typ an zB. RAMB4 oder RAMB16 <start_addr> und <end_addr> geben den gewnschten Adressraum an Ein Address_Space beinhaltet einen oder mehrere Bus-Blcke.
BUS_BLOCK <Bit_lane_definition> <Bit_lane_definition> (...) END_BUS_BLOCK;
Ein Bus-Block ist aus einer oder mehreren Bitlanes aufgebaut. Die Bitlanes definieren die Aufteilung eines CPU-Bus-Zugriff auf verschiedene BlockRams. Die Reihenfolge und Anzahl der Bus-Blcke bestimmt die Zuordnung und Gre des adressierbaren Speicherbereichs.
next higher 4k, CPU address 0xFFFFE000 - 0xFFFFEFFF [63:56]; [55:48]; [47:40]; [39:32]; [31:24]; [23:16]; [15:8]; [7:0]; next higher 4k, CPU address 0xFFFFF000 - 0xFFFFFFFF [63:56]; [55:48]; [47:40]; [39:32]; [31:24]; [23:16]; [15:8]; [7:0];
10
Hier finden sich sowohl die zugewiesenen Namen fr die BlockMemory Instanzen (hier BU5 und BU8 ) als auch die verwendeten Adress- und Datenanbindungen (die ja schon aus dem VHDL-Design heraus klar sein sollten)
11
Nach dem Einfgen ins Xilinx-Projekt und der Neusynthese erhlt man u.a. das Bitfile mc8051_top.bit und die Datei mc8051_rom_bd.bmm mit folgendem Inhalt:
ADDRESS_SPACE i_mc8051_rom RAMB16 [0x00000000:0x00000FFF] BUS_BLOCK i_mc8051_rom/BU8 [7:4] PLACED = X0Y6; i_mc8051_rom/BU5 [3:0] PLACED = X0Y7; END_BUS_BLOCK; END_ADDRESS_SPACE;
12
5 References
[CONVHEX] ConvHex: Konvertierungs-Tool. Roland Hoeller, Christoph Kutschera, Christoph Veigl. CVS-Checkout auf esshare: mc8051/sw/convHex/ [IHEX] [KUT] Das Intel Hex Format: http://www.keil.com/support/docs/1584.htm Christof Kutschera: MC8051-Virtex_howto: es@esshare//ResearchProjects/CompetenceTeam/project_docs/mc80 51_virtex4_howto.doc MC8051 OpenSource IP-Core von Oregano Systems, modifiziert fr den XG-Modus des Syopsys Design Compilers. CVS Checkout auf esshare: mc8051 Xilinx ISE: Laden des Roms ohne Neusynthese http://www.mikrocontroller.net/articles/T51-Core Oregano mc8051 Core: http://www.oregano.at/ip/8051.htm Xilinx Data2Mem User Guide, 04/07: http://toolbox.xilinx.com/docsan/xilinx92/books/docs/d2m/d2m.pdf Xilinx Impact User Guide, 02/07 http://toolbox.xilinx.com/docsan/xilinx4/pdf/docs/pac/pac.pdf
[MC8051]
13
Dateiname
mc8051_top.vhd mc8051_rom.bmm mc8051_rom_bd.bmm mc8051_top.bit final.bit sdcc.exe convhex.exe data2MEM.exe
Bemerkung
Top-Level mc8051 Design BlockMemory Map (hndisch generiert) BlockMemory Map mit Placemnet Info (von Xilinx ISE generiert) Original Bitstream File Upgedateter Bitstream incl. neuer Firmware Small Device C-Compiler, http://sdcc.sourceforge.net/ iHEX - Konverter [CONVHEX] Xilinx Tool [XIL01]
14