www.mikrocontroller.net

FPGA Soft Core

Inhaltsverzeichnis

[bearbeiten] Einleitung

Ein soft core (engl. weicher Kern) ist ein Prozessor bzw. Mikrocontroller, welcher sich in einem FPGA befindet. Im Gegensatz zum hard core (engl. harter Kern) besteht er aus reiner Anwenderlogik im FPGA und ist nicht fest auf dem Chip platziert.

Vorteile:

  • Flexible Anwendung, das FPGA kann bei Bedarf mit einem SoftCore versehen werden; es wird keine Chipfläche für einen eventuell ungenutzen Hard Core verschwendet (Kosten!)
  • Einige Softcore sind sehr flexibel konfigurierbar (16/32 Bit Datenpfade, Zusatzmodule, Spezielle Anwenderbefehle etc.)
  • Kleine Softcores können mehrfach im FPGA parallel platziert und verwendet werden, dadurch erhöht sich die Datenverabreitungskapazität (z.B. ein RX Prozessor und ein TX-Prozessor)

Nachteile:

  • Geringere Geschwindigkeit als Hard Cores

Ein soft core wird gern für etwas komplexere Aufgaben verwendet, bei denen es nicht auf allerhöchste Geschwindigkeit ankommt, z.B. eine Displayansteuerung.

Die Taktfrequenzen sind stark vom FPGA-Typ und der FPGA-Auslastung (freie Logikressourcen) abhängig.

Eine große Anzahl frei verfügbarer Soft-CPUs gibt es auf OpenCores.org. Die vorhandene Palette reicht von Nachbauten vorhandener Prozessoren, wie des AVR, PIC oder MIPS, bis hin zu eigenen Entwicklungen, wie dem "16 Bit Microcontroller" (c16), der speziell für FPGAs optimiert ist und mit einem eigenen RTOS kommt. Ein anderer ist z.B. der 32-bit OpenRisc 1000, für den eine Version der GNU Tools für die Software Entwicklung zur Verfügung stehen.

Hier soll ein kleiner Überblick über vorhandene Softcores entstehen, für welche Softwarunterstützung existiert und welche Leistungen zu erwarten sind. Es nützt einem oft der tollste Softcore nicht, wenn er sich nicht entsprechend programmieren läßt. Für LatticeMico32, MicroBlaze und NIOS ist jeweils ein Systembuilder verfügbar. Damit lassen sich leicht und übersichtlich Prozessor und Peripherie konfigurieren.

[bearbeiten] 8 Bit Soft Cores

Name optimiert für Quellcode max. Programmspeicher Programmierung Toolchain Leistung Lizenz/Preis Weblink
AX8 entfällt ja, VHDL 2k (8k) asm, C, Basic, Ada... GCC/WinAVR, ... wie AT90S2313 mit 30-50MHz OpenCores
T51 entfällt ja, VHDL 64k asm, Basic, C, ... sdcc, MCS-Basic, ... single cycle 8051, z.B. 40 MHz auf Spartan3 OpenCores
T51-Core
8051 IP Core entfällt ja, VHDL 64k asm, Basic, C, ... sdcc, MCS-Basic, ... 1-4 cycle 8051 open IP-Core Oregano Systems
LatticeMico8 Lattice ja, Verilog & VHDL asm open IP-core Lattice
PicoBlaze Xilinx ja, VHDL 2k (1024 Befehle) asm (DOS/ dosbox) lt. Xilinx 100 MIPS Xilinx Reference Design License Xilinx
PacoBlaze entfällt ja, Verilog wie PicoBlaze asm (geschrieben in Java) KCAsm wie Picoblaze modifizierte BSD Lizenz PacoBlaze

[bearbeiten] Picoblaze

Dabei handelt es sich um einen sehr kleinen, aber dennoch sehr leistungsfähigen Microprozessor.

Eigenschaften:

  • nur 76-93 Slices Ressourcenbedarf
  • 16 8-Bit Register
  • 1024 Befehle Programmspeicher (Version für Spartan-II nur 256 Befehle)
  • 18-Bit Befehle, RISC (Version für Spartan-II hat 16-Bit Befehle)
  • Alle Befehle dauern zwei Takte
  • Interruptunterstützung
  • 8-Bit IO-Bus
  • Indirekte Addressierung möglich
  • Programmspeicher duch Bankumschaltung erweiterbar
  • Assembler als Kommandozeilenprogramm verfügbar
  • Entwicklungsumgebung pBlazeIDE verfuegbar mit integriertem Assembler
  • Schneller Programmdownload über JTAG während der Entwicklung
  • 37..102 MIPS, abhängig von der FPGA-Familie

[bearbeiten] AX8

Der AX8-Core entspricht fast einem Atmel AT90S2313. Ihm fehlen noch Hardwareeinheiten wie EEPROM, Watchdog und die verschiedenen Powerdown-Modi.

  • Ressourcenbedarf: ~ 1400 Xilinx-Slices
  • erreichbare Geschwindigkeit auf einem Spartan3-1000: 50 MHz
  • als Toolchain kann problemlos WinAVR o.ä. verwendet werden

Die ROM-Beschreibung muss angepasst werden, damit XST einen BlockRAM generieren kann (ein passendes hex2rom gibts hier: hex2rom).

Der Core lässt sich leicht mit Speicher (8KByte ROM), einem EEPROM (bis zu 64KByte), zwei Ports und einem Watchdog erweitern. Damit entspricht der AX8 dann einem AT90S8535, bis auf die anderen Timer/Counter und die fehlende SPI-Schnittstelle.

Für Entwicklungszwecke lässt sich der ROM-Inhalt - wie beim Picoblaze - per JTAG-Schnittstelle updaten. Somit kann neue Software getestet werden, ohne das Design neu zu synthetisieren. Dafür benötigt man die Werkzeuge hex2svf, svf2xsvf und xsvfplayer. Im FPGA füllt dann eine State-Machine am JTAG-Port einen DualPort-RAM (ROM :-))

Für modernere Controller, wie dem ATMega8, fehlen dem AX8-Core Befehle, wie CALL, JMP, MOVW, MUL und FMUL. Außerdem fehlen Hardwareeinheiten, wie I2C und erweiterte Timer.


[bearbeiten] 16 Bit Soft Cores

Name optimiert für Quellcode Programmierung Toolchain Leistung Lizenz/Preis Weblink
NIOS II Altera Nein asm, C, C++ GCC, SOPC, EDS mit Nios II Eval-Kit ab $400, oder $3000 Altera
TG68 Ja, VHDL asm, C, C++, .. GCC, (68k-compatible) LGPL OpenCores.org

[bearbeiten] TG68

  • 68000 kompatible
  • Recourcenbedarf: ~2700 Xilinx Slices, ~4000 LC's auf Altera Cyclone II

[bearbeiten] 32 Bit Soft Cores

Name optimiert für Quellcode Programmierung Toolchain Leistung Lizenz/Preis Weblink
LatticeMico32 Lattice, siehe aber soc-lm32 ja, Verilog asm, C, C++ GCC, MSB open IP-core Lattice
Leon Ja, VHDL asm, C, C++ GCC (SPARC-compatible) GPL Gaisler Research
MicroBlaze Xilinx Nein asm, C GCC, EDK EDK $500/Jahr Xilinx
MicroBlaze bei Wikipedia
NIOS II Altera Nein asm, C, C++ GCC, SOPC, EDS mit Nios II Eval-Kit ab $400, oder $3000 Altera
OpenRISC Ja, Verilog asm, C, C++, .. GCC OpenCores
Plasma Ja, VHDL asm, C, C++ GCC (MIPS-compatible) GPL OpenCores.org

Einen ersten Eindruck von derLeistungsfähigkeit der 32 Bit SoftCores gibt z.B. die Master-Arbeit "Evaluation of synthesizable CPU cores" aus dem Jahr 2004. Diese Vergleicht den Leon 2, MicroBlaze und OpenRISC 1200 miteinander.

[bearbeiten] Lattice Mico32 und soc-lm32

Mico32 ist eine 32 Bit pipelined RISC CPU. Die steht unter einer OpenSource Lizenz und liegt komplett im Verilog Quelltext vor. Sowohl die CPU Architektur als auch der Resourcenbedarf ist vergleichbar mit dem MicroBlaze von Xilinx.

  • Recourcenbedarf: ~1600 Xilinx Slices
  • Erreicht ca. 100 MHz auf Spartan3 Generation FPGAs
  • Konfigurierbare D- und I-Caches (aus BRAM)
  • 2 Wishbone-Interfaces: Für Daten-Load&Store und Instruction-Fetch
  • Kompletter GNU Toolchain aus binutils, gcc und gdb

Neben dem Original, das man von Lattice herunterladen kann, und dessen Toolchain erstmal auf Windows mit Lattice FPGAs ausgelegt ist, gibt es noch soc-lm32. soc-lm32 ist eine Portierung auf Altera und Xilinx Bausteine und benutzt einen Makefile-basierten Workflow.

Eine von Lattice in Auftrag gegebene Portierung von uC-Linux ist verfügbar (http://www.theobroma-systems.com/mico32/).

Nachteile: bis jetzt gibt es keine Version mit FPU (kann über Wishbone als Peripherie angeflanscht werden) oder MMU.

[bearbeiten] Leon

Dieser Prozessorkern ist komplett SPARC V8 kompatible -- belibige SPARC Compiler können verwendet werden (z.B. bcc, ). Neben dem Kern selber steht auch eine breite Auswahl an Peripherie als VHDL Komponenten zur Vefügung. Als On-Chip Interconnect kommt AMBA (AHB + APB) zum Einsatz.

  • Recourcenbedarf: ~4000 Xilinx Slices, 10 BRAMs (minimal-konfiguration)
  • Erreicht ca. 50 MHz auf Spartan3 Generation FPGAs

[bearbeiten] MicroBlaze & Nachbauten

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net