Referenzsysteme
Das Projekt Microblaze References (MB-Ref) beinhaltet fertig nutzbare FPGA Designs für verschiedene Evaluierungssysteme. Sie sind im Verzeichnis working-designs
hinterlegt.
Die Designs liegen immer in zwei verschiedenen Ausbaustufen vor, einer Lite- und einer Full-Variante (Details siehe unten). Jedes Design wird für mehrere Xilinx ISE/EDK Versionen evaluiert und bei Bedarf auf neuere Versionen übertragen. Alle Designs basieren auf der jeweils aktuellsten MicroBlaze Implementierung wie sie von der zugrunde liegenden Xilinx ISE/EDK Version angeboten wird.
FPGA-Designs mit Multi-Core Implementierungen werden aktuell noch nicht unterstützt!
Unterstützte Zielsysteme
Ausbaustufen
"Lite"
- MicroBlaze Ausstattung:
microblaze_0
- 2kB Instruction Cache (line length 4)
- 2kB Data Cache (line length 4)
- MMU: virtual, full register access, 2 protection zones
- Exception Handling
- Barrel Shifter
- Pattern Comparator
- MSR Instruction
- MUL32 Multiplicator
- without Divider
- without FPU
- Debug: 1 PC breakpoint, without read/write watchpoints
- PVR: full USER1 and USER2
- Kernkomponenten für Betriebssysteme und Debugging:
- 1 JTAG UART, only primary instance:
mdm_0
- 1 Interrupt Controller, only primary instance:
xps_intc_0
- 1 Timer (system tick), only primary instance:
xps_timer_0
- UART Leitungen:
- only primary instance:
xps_uart_0
- XPS UART Lite
- 115200 Baud (8N1)
- interrupt source
- Netzerk Leitungen:
- only primary instance:
xps_ether_0
- XPS Ethernet Lite
- Duplex Mode
- MDIO support
- without second Rx/TX buffer
- interrupt source
"Full"
- MicroBlaze Ausstattung:
microblaze_0
- 16kB Instruction Cache (line length 8)
- 16kB Data Cache (line length 4)
- MMU: virtual, full register access, 2 protection zones
- Exception Handling
- Barrel Shifter
- Pattern Comparator
- MSR Instruction
- MUL32 Multiplicator
- Integer Divider
- Basic FPU: no FLOAT ↔ INT, no SQRT
- Debug: 1 PC breakpoint, without read/write watchpoints
- PVR: full USER1 and USER2
- Kernkomponenten für Betriebssysteme und Debugging:
- 1 JTAG UART, only primary instance: mdm_0
- 1 Interrupt Controller, only primary instance:
xps_intc_0
- 1 Timer (system tick), only primary instance:
xps_timer_0
- UART Leitungen:
- only primary instance:
xps_uart_0
- XPS 16550 UART
- interrupt source
- Netzerk Leitungen:
- only primary instance:
xps_ether_0
- XPS LL TEMAC
- Duplex Mode
- MDIO support
- SDMA access
- interrupt source
Allgemeine Entwurfsrichtlinien
Alle FPGA Designs folgen den hier aufgestellten Entwurfsrichtlinien. Eine Ausnahme bildet das Design von Sensor-to-Image. Dieses wird komplett separat behandelt.
Aufbau der FPGA Projekte
Jedes FPGA Design wird ausschließlich mit dem Xilinx Platfrom Studion (XPS) entwickelt. Eigene IP Cores müssen als eigenständiges Design entwickelt und in das FPGA Design im XPS integriert werden. Dazu kann der Create and Import Peripheral Wizard (CreateIP) aus dem Xilinx EDK oder gleich das Integrated Synthesis Environment (ISE) benutzt werden.
Ein Ansatz nur über ISE mit der Integration einer XPS Instanz für das Prozessorsystem ist zwar prinzipiell möglich, aber wird für ein Referenzsystem innerhalb von MB-Ref nicht zugelassen.
Systemrichtlinien
Instanzen und ihre Speicherbereiche
Jeder verbaute IP Core wird als eine Instanz von sich selbst in ein FPGA Design aufgenommen und kann dabei beliebig oft instantiiert werden. Der Name der im FPGA Design entstehenden Instanz wird vom Namen des zugrunde liegenden IP Core abgeleitet und um eine laufende Nummer beginnend bei 0 erweitert. Beispiel: Der IP Core des Zählerbausteins XPS Timer/Counter besitzt den Namen xps_timer
. Somit wird die erste Instanz xps_timer_0
genannt. Die zweite Instanz erhält den Namen xps_timer_1
, und so weiter.
Die hier zugeordneten Speicherbereiche entsprechen den generell für die jeweiligen IP Core Instanzen reservierten Speicherbereiche. Somit werden Cluster im Speicher gebildet, damit funktional gleiche bzw. ähnliche IP Core Instanzen an einer festen Stelle und nur dort im Speicher zu finden sind. IP Core Instanzen, die keinen Speicher benötigen, erhalten auch keine Zuordnung.
Folgende Namen sind bekannt und werden so benutzt:
Kategorie | IP Core1) | ||||
---|---|---|---|---|---|
IP Core Name | Name der Instanzen | Speicherbereich | Größe | ||
Extensions | |||||
Instanzen von Design spez. IP Cores | 0xB000.0000 … 0xFFFF.FFFF | 1 GB | |||
Linear ROM | Xilinx Multi-CHannel External Memory Controller (XPS MCH EMC) | ||||
xps_mch_emc | 1-fache Instantiierung | ||||
xps_mch_emc_0 | 0xAF00.0000 … 0xAFFF.FFFF | min. 16 MB | |||
0x9000.0000 … 0xAFFF.FFFF | max. 512 MB | ||||
2-fache Instantiierung | |||||
xps_mch_emc_0 | 0xAF00.0000 … 0xAFFF.FFFF | min. 16 MB | |||
0xA000.0000 … 0xAFFF.FFFF | max. 256 MB | ||||
xps_mch_emc_1 | 0x9F00.0000 … 0x9FFF.FFFF | min. 16 MB | |||
0x9000.0000 … 0x9FFF.FFFF | max. 256 MB | ||||
4-fache Instantiierung | |||||
xps_mch_emc_0 | 0xAF00.0000 … 0xAFFF.FFFF | min. 16 MB | |||
0xA800.0000 … 0xAFFF.FFFF | max. 128 MB | ||||
xps_mch_emc_1 | 0xA700.0000 … 0xA7FF.FFFF | min. 16 MB | |||
0xA000.0000 … 0xA7FF.FFFF | max. 128 MB | ||||
xps_mch_emc_2 | 0x9F00.0000 … 0x9FFF.FFFF | min. 16 MB | |||
0x9800.0000 … 0x9FFF.FFFF | max. 128 MB | ||||
xps_mch_emc_3 | 0x9700.0000 … 0x97FF.FFFF | min. 16 MB | |||
0x9000.0000 … 0x97FF.FFFF | max. 128 MB | ||||
… | |||||
On-Chip Debug (OCD) | MicroBlaze Debug Module (MDM) | ||||
mdm | mdm_0 | 0x8FFF.0000 … 0x8FFF.FFFF | 64 kB | ||
mdm_1 | 0x8FFE.0000 … 0x8FFE.FFFF | 64 kB | |||
mdm_2 | 0x8FFD.0000 … 0x8FFD.FFFF | 64 kB | |||
… | |||||
mdm_15 | 0x8FF0.0000 … 0x8FF0.FFFF | 64 kB | |||
Reserve für weitere IP Cores dieser Kategorie | 0x8F00.0000 … 0x8FEF.FFFF | 15 MB | |||
Reserve für weitere Kategorien | 0x8B00.0000 … 0x8EFF.FFFF | 64 MB | |||
OS spezifisch | XPS Interrupt Controller (XPS INTC) | ||||
xps_intc | xps_intc_0 | 0x8AFF.0000 … 0x8AFF.FFFF | 64 kB | ||
xps_intc_1 | 0x8AFE.0000 … 0x8AFE.FFFF | 64 kB | |||
xps_intc_2 | 0x8AFD.0000 … 0x8AFD.FFFF | 64 kB | |||
… | |||||
xps_intc_15 | 0x8AF0.0000 … 0x8AF0.FFFF | 64 kB | |||
XPS Timer/Counter (XPS TIMER) | |||||
xps_timer | xps_timer_0 | 0x8AEF.0000 … 0x8AEF.FFFF | 64 kB | ||
xps_timer_1 | 0x8AEE.0000 … 0x8AEE.FFFF | 64 kB | |||
xps_timer_2 | 0x8AED.0000 … 0x8AED.FFFF | 64 kB | |||
… | |||||
xps_timer_15 | 0x8AE0.0000 … 0x8AE0.FFFF | 64 kB | |||
SDMA Controller of Multi-Port Memory Controller (DDR/DDR2/SDRAM) | |||||
mpmc:sdma_ctrl | mpmc:sdma_ctrl_0 | 0x8ADF.0000 … 0x8ADF.FFFF | 64 kB | ||
mpmc:sdma_ctrl_1 | 0x8ADE.0000 … 0x8ADE.FFFF | 64 kB | |||
mpmc:sdma_ctrl_2 | 0x8ADD.0000 … 0x8ADD.FFFF | 64 kB | |||
… | |||||
mpmc:sdma_ctrl_15 | 0x8AD0.0000 … 0x8AD0.FFFF | 64 kB | |||
Reserve für weitere IP Cores dieser Kategorie | 0x8A00.0000 … 0x8ACF.FFFF | 13 MB | |||
UART Leitungen | XPS Universal Asynchronous Receiver Transmitter (UART) Lite Interface | ||||
xps_uartlite | xps_uart_0 | 0x89FF.0000 … 0x89FF.FFFF | 64 kB | ||
xps_uart_1 | 0x89FE.0000 … 0x89FE.FFFF | 64 kB | |||
xps_uart_2 | 0x89FD.0000 … 0x89FD.FFFF | 64 kB | |||
… | |||||
xps_uart_255 | 0x8900.0000 … 0x8900.FFFF | 64 kB | |||
XPS 16550 Universal Asynchronous Receiver Transmitter (UART) | |||||
xps_uart16550 | xps_uart_0 | 0x89FF.0000 … 0x89FF.FFFF | 64 kB | ||
xps_uart_1 | 0x89FE.0000 … 0x89FE.FFFF | 64 kB | |||
xps_uart_2 | 0x89FD.0000 … 0x89FD.FFFF | 64 kB | |||
… | |||||
xps_uart_255 | 0x8900.0000 … 0x8900.FFFF | 64 kB | |||
Netzwerk Leitungen | XPS Ethernet Lite Media Access Controller (MAC) | ||||
xps_ethernetlite | xps_ether_0 | 0x88F0.0000 … 0x88FF.FFFF | 1 MB | ||
xps_ether_1 | 0x88E0.0000 … 0x88FE.FFFF | 1 MB | |||
xps_ether_2 | 0x88D0.0000 … 0x88FD.FFFF | 1 MB | |||
… | |||||
xps_ether_15 | 0x8800.0000 … 0x8800.FFFF | 1 MB | |||
XPS Local Link (LL) Tri-Mode Ethernet Media Access Controller (TEMAC) | |||||
xps_ll_temac | xps_ether_0 | 0x88F0.0000 … 0x88FF.FFFF | 1 MB | ||
xps_ether_1 | 0x88E0.0000 … 0x88FE.FFFF | 1 MB | |||
xps_ether_2 | 0x88D0.0000 … 0x88FD.FFFF | 1 MB | |||
… | |||||
xps_ether_15 | 0x8800.0000 … 0x8800.FFFF | 1 MB | |||
Reserve für weitere Kategorien | 0x8100.0000 … 0x87FF.FFFF | 112 MB | |||
GPIO Leitungen | XPS General Purpose Input/Output (GPIO) | ||||
xps_gpio | xps_gpio_0 | 0x80FF.0000 … 0x80FF.FFFF | 64 kB | ||
xps_gpio_1 | 0x80FE.0000 … 0x80FE.FFFF | 64 kB | |||
xps_gpio_2 | 0x80FD.0000 … 0x80FD.FFFF | 64 kB | |||
… | |||||
xps_gpio_15 | 0x80F0.0000 … 0x80F0.FFFF | 64 kB | |||
Serial Bus Leitungen | XPS Low Speed, Two Wire, Serial Bus Interface | ||||
xps_iic | xps_iic_0 | 0x80EF.0000 … 0x80EF.FFFF | 64 kB | ||
xps_iic_1 | 0x80EE.0000 … 0x80EE.FFFF | 64 kB | |||
xps_iic_2 | 0x80ED.0000 … 0x80ED.FFFF | 64 kB | |||
… | |||||
xps_iic_15 | 0x80E0.0000 … 0x80E0.FFFF | 64 kB | |||
Reserve für weitere Kategorien | 0x6000.0000 … 0x80DF.FFFF | 526 MB | |||
Linear RAM | Multi-Port Memory Controller (DDR/DDR2/SDRAM) | ||||
mpmc | 1-fache Instantiierung | ||||
mpmc_0 | 0x2000.0000 … 0x5FFF.FFFF | max. 1 GB | |||
2-fache Instantiierung | |||||
mpmc_0 | 0x4000.0000 … 0x5FFF.FFFF | max. 512 MB | |||
mpmc_1 | 0x2000.0000 … 0x3FFF.FFFF | max. 512 MB | |||
4-fache Instantiierung | |||||
mpmc_0 | 0x5000.0000 … 0x5FFF.FFFF | max. 256 MB | |||
mpmc_1 | 0x4000.0000 … 0x4FFF.FFFF | max. 256 MB | |||
mpmc_2 | 0x3000.0000 … 0x3FFF.FFFF | max. 256 MB | |||
mpmc_3 | 0x2000.0000 … 0x2FFF.FFFF | max. 256 MB | |||
8-fache Instantiierung | |||||
mpmc_0 | 0x5800.0000 … 0x5FFF.FFFF | max. 128 MB | |||
mpmc_1 | 0x5000.0000 … 0x57FF.FFFF | max. 128 MB | |||
mpmc_2 | 0x4800.0000 … 0x4FFF.FFFF | max. 128 MB | |||
mpmc_3 | 0x4000.0000 … 0x47FF.FFFF | max. 128 MB | |||
mpmc_4 | 0x3800.0000 … 0x3FFF.FFFF | max. 128 MB | |||
mpmc_5 | 0x3000.0000 … 0x37FF.FFFF | max. 128 MB | |||
mpmc_6 | 0x2800.0000 … 0x2FFF.FFFF | max. 128 MB | |||
mpmc_7 | 0x2000.0000 … 0x27FF.FFFF | max. 128 MB | |||
… | |||||
Reserve für weitere Kategorien | 0x0010.0000 … 0x1FFF.FFFF | 511 MB | |||
BRAM | |||||
Reserve für weitere IP Cores dieser Kategorie | 0x0001.0000 … 0x000F.FFFF | 960 kB | |||
Local Memory Bus (LMB) Block RAM (BRAM) Interface Controller | |||||
dlmb_cntrl ilmb_cntrl | dlmb_cntrl | 0x0000.0000 … 0x0000.FFFF | 64 kB | ||
Maximum: … 0x0000.7FFF | 32 kB | ||||
Medium: … 0x0000.3FFF | 16 kB | ||||
Minimum: … 0x0000.1FFF | 8 kB | ||||
CPU | MicroBlaze Soft Processor | ||||
microblaze | microblaze_15 | ||||
… | |||||
microblaze_2 | |||||
microblaze_1 | |||||
microblaze_0 |
General Purpose I/O Enumeration
Instanz | Ordnung | Zuordnung | typisch |
---|---|---|---|
xps_gpio_0 | primary | System | Reset (per Software) |
xps_gpio_1 | secondary | Kommunikation | Taster (Push Buttons) |
xps_gpio_2 | tertiary | Schalter (DIP Switches) | |
xps_gpio_3 | quaternary | Leuchten (LED Lamps) | |
xps_gpio_4 | quinary | Leuchten (LED Positions) | |
xps_gpio_5 | senary | Peripherie | extern … |
xps_gpio_6 | septenary | erster freier Port | |
xps_gpio_7 | octonary | … | |
xps_gpio_8 | nonary | ||
xps_gpio_9 | denary |
Serial Bus Enumeration
Instanz | Ordnung | Zuordnung | typisch |
---|---|---|---|
xps_iic_0 | primary | System | On-Board (RTC, EEPROM, DIMM) |
xps_iic_1 | secondary | Kommunikation | On-Board (SFP) |
xps_iic_2 | tertiary | Peripherie | extern (DVI) |
xps_iic_3 | quaternary | erster freier Bus | |
xps_iic_4 | quinary | … | |
xps_iic_5 | senary | ||
xps_iic_6 | septenary | ||
xps_iic_7 | octonary | ||
xps_iic_8 | nonary | ||
xps_iic_9 | denary |
Interrupt Priorität
Priorität | angeschlossene Instanzen | Anmerkungen |
---|---|---|
höchste | xps_timer_0 | System Tick |
mpmc_0:sdma_0_rx | DMA Komponenten | |
mpmc_0:sdma_0_tx |
||
xps_central_dma_0 |
||
z.B. PCIe | Bus Bridges | |
z.B. SysACE CF , SATA | Massenspeicher | |
Reserve für höchste Priorität | ||
xps_ether_0 | System Network I/F | |
xps_ether_1 |
||
xps_uart_0 | System UART I/F | |
xps_uart_1 |
||
Reserve für mittlere Priorität | ||
xps_iic_0 | System Serial Bus I/F | |
tiefste | Reserve für tiefste Priorität |
Speicheraufteilung
Linear ROM Mapping (top-down)
Je nach Ausstattung der Evaluierungssysteme mit nicht flüchtigem Speicher (ROM) wird sich die Nutzung an der folgenden Grafik orientieren. Folgende Richtlinien sind immer einzuhalten:
- das ROM Ende liegt unabhängig von seiner Größe immer an der obersten 1 GB Speicheradresse
0xB000.0000
(top-down) - in den letzten 512 MB befindet sich ein 2nd stage boot loader ab Adresse
0xAFF80.0000
, in unserem Fall U-Boot - am ROM Anfang wird immer Platz für die FPGA Konfigurationsdaten gehalten (redundant)
svg@svg:rom-map.svg