FPGA-Design

Eine unserer wesentlichen Kernkompetenzen ist das FPGA-Design (FPGA-Konzeption und FPGA-Programmierung). In fast jedem unserer Projekte ist ein FPGA oder SoC enthalten.

Die Vorteile von FPGAs liegen auf der Hand:

  • hohe Performance,
  • hohe Flexibilität,
  • hohe Betriebssicherheit (FPGAs werden bei Zertifizierungen i.d.R. wie Hardware zertifiziert) und
  • lange Verfügbarkeit sowie
  • relativ einfacher Ersatz bei Abkündigung

Unsere Leistungen im Überblick

  • Erfassen und Strukturieren Ihrer Anforderungen, Schreiben eines Pflichtenheftes
  • Entwicklung eines FPGA-Designs inklusive Verifikations-Konzept
  • Implementierung des Designs, am liebsten in VHDL, aber auch Verilog ist uns nicht fremd
  • Verifikation des FPGA-Designs entwicklungsbegleitend im Simulator
  • Verifikation des FPGA-Designs in der Hardware

Unsere Erfahrung

Unterstützte FPGA- und SoC-Hersteller

Wir arbeiten mit den meisten FPGA- und SoC-Herstellern zusammen und haben es auch zum Xilinx Alliance Partner geschafft.

   
     

Einige Kerntechnologien

Doch was ist ein FPGA ohne die Kompetenz des Entwicklers, Schaltungsteile via "Hardware description language" in diesem zu implementieren.

In einer Vielzahl von Projekten haben wir beriets einiges an Technologien verwendet. Im Folgenden ein repräsentativer Auszug davon.

AXI

AXI ist ein "Advanced eXtensible Interface Bus" der Advanced Microcontroller Bus Architecture (AMBA). Er wird verwendet, um

  • ARM-Prozessoren an ihre Peripherie anzubinden
  • Xilinx ipCores miteinander zu verbinden
  • Altera/Intel ipCores miteinander zu verbinden

Wir haben einen AXI-Lite-Slave-Core und einen AXI-Master-Core entwickelt, über welchen wir unsere Logik an diese Busse anbinden können.

Zum Einsatz kommen diese Module auf Xilinx-Zynq-SoCs, Intel-SoCs und PCIe-Systemen.

Clock-Management

Ein Clock-Management ist Bestandteil eines jeden FPGAs.

Wir haben Erfahrung mit DLLs, PLLs, Fractional PLLs, mit festen Frequenzen aber auch mit dynamisch eingestellen Frequenzen und Phasen, auf Xilinx-FPGAs und Altera/Intel-FPGAs.

"Clock Domain Crossing"-Techniken beherrschen wir souverän und setzen diese Techniken seit Jahren erfolgreich ein.

DDR3-SDRAM,
DDR4-SDRAM

DDR-SDRAM ist ein kostengünstiger, dynamischer RAM-Speicher.

Wir haben im Rahmen von Mehreren Projekten Erfahrung mit DDR-Speicher sammeln können. Die Anbindung an den FPGA erfolgte dabei über

  • den Memory interface generator (MIG) von Xilinx im Vivado als auch über
  • das Enhanced Memory Interface  (EMIF) von Altera/Intel

In allen Projekten ging es darum, die Speicherzugriffe durch bestmögliche Ausnutzung der Controller-Kommandotiefe unter Berücksichtigung der Refreshraten von 7,8 us und 3,9 us zu optimieren, um die maximal möglich Datentransferrate zu erzielen.

DisplayPort

DisplayPort (DP) ist ein durch VESA genormter Verbindungsstandard für die Übertragung von digitalen Bild- und Tonsignalen.

Wir haben auf einem Altera/Intel-Arria10-SoC erfahrung mit dem DisplayPort-Core von Altera und Bitec sammeln können. Sowohl DP-Eingang als DP-Ausgang wurden dabei mit Auflösungen von 640 x 480 Pixeln bis 3840 x 2160 Pixeln betrieben.

Ethernet

Ethernet ist eine Übertragungstechnik, die Datenübertragung auf verschiedenen Ebenen ermöglicht.

Daher ist unsere Erfahrung mit Ethernet im FPGA auch sehr vielseitig. Wir haben

  • 100 MBit-Ethernet für eine FPGA interkommunikation verwendet, indem wir den Physical Layer (MII-Interface) mit einem eigenen Protokoll direkt verwendet haben
  • Tripple-Speed-Ethernet mit UDP-Protokoll verwendet, indem wir UDP-Pakete im FPGA erzeugt und über einen Altera-PCS-Core in ein SFP-Modul (Glasfaser und Kupfer) geschrieben haben.
  • 10 G-Ethernet mit UDP-Protokoll und erzeugung der UDP-Pakete im FPGA für einen selbst darin erfahrenen Kunden konzeptioniert und geplant, jedoch noch nicht realisiert.
Ethernet-Switch

Ein Ethernet-Switch stellt eine Kopplungseinheit zwischen mehreren Ethernet-Netzwerk-Semgenten dar.

Für einen Altera/Intel-Arria10-SoC haben wir einen Level-3-Switch mit IP/ARP/UDP-Filter-Funktionen entwickelt, um den gemeinsamen Zugriff aus dem Prozessor und dem FPGA auf bis zu 16 Ethernet-Stränge zu ermöglichen und den Prozessor von eingehenden Paketen zu entlasten.

Framebuffer

Ein Framebuffer ist ein Bildspeicher, welcher für die Graifkausgabe direkt beschrieben wird.

Im Rahmen von Projekten haben wir einen eigenen Framebuffer auf einem CycloneV-SoC und einem Arria10-Soc impelementiert. Die Implementation bestand aus einem Linux-Treiber im HPS und einem DMA-Mechanismus sowie einem VSync-HSync-Signal-Generator im FPGA. Das Bild wurde auf einem VGA-Ausgang bzw. einem DisplayPort-Ausgang ausgegeben.

Gigabit-Transceiver, PMA, PCS

Ein Gigabit-Transceiver im FPGA dient der Umsetzung eines parallelen Datenstroms in einen schnellen, seriellen Datenstrom. Dieser ist i.d.R. 8b10b codiert. Die Bausteine eines Gigabit-Transceivers sind das PMA (physical medium attachment) und das PCS (physical coding sublayer).

Wir haben sowohl bei Ethernet als auch bei der Entwicklung eines Glasfaser-Extenders Erfahrungen mit einem direkt genutzten Gigabit-Transceiver sammeln können. Teile der Projektumfänge waren:

  • Entwicklung einer Link-State-Machine (LSM)
  • Eines Multiplexer-Mechanismusses für drei Kanäle (USB, I2C und Ethernet)
  • Entwicklung einer Fehlerschutzcodierung
  • Versenden von im FPGA codierten UDP-Paketen
I2C

I2C steht für Inter-Integrated-Circuit und ist ein Bus, welcher meistens für die langsamere Inter-Chip-Kommunikation mit 100 kBd bzw. 400 kBd eingesetzt wird.

Wir haben bereits mehrere Implementationen des I2C-Busses im FPGA implementiert, vom reinen I2C-Monitor über einen I2C-Master zum I2C-Slave.

PCIe, PCI, PXI

PCI ist ein "Peripheral Component Interconnect"-Bus, welcher breite Verwendung in nahezu allen Branchen gefunden hat. Er erlaubt das einblenden von Speicherbereichen der Hardware in den allgemeinen Speicher-Adressraum und den direkten Zugrif (DMA) von der Hardware aus in den Arbeitsspeicher.

Wir haben bereits mehrere Projekte unter Verwendung von PCI oder PCIe auf Xilinx FPGAs realisiert:

  • Konfiguration des FPGAs über Register, welche über BARs angesprochen wurden
  • Datentransfer von Messdaten über mehrere DMA-Kanäle
  • Einbindung des FPGAs über einen eigenen PCI-Treiber in Linux-Systeme

Aktuell verwenden wir den PCI-ipCore von Xilinx und nutzen das AXI-Interface des ipCores, um die FPGA-Logik mit den eigenen, oben genannten AXI-Lite- und AXI-Master-Modulen an den ipCore anzubinden.

Softcore Prozessoren

Ein Softcore-Prozessor ist die Verschaltung von FPGA-Logik zu einem Prozessor, auf welchem wiederum eine Software läuft. Wir haben Erfahrung mit dem

  • Xilinx PicoBlaze-Prozessor, für welchen wir eine Entwicklungsumgebung anbieten und den wir in vielen Applikationen Ressourcenschonend einsetzen.
  • Altera/Intel NIOS2-Prozessor, mit welchem wir einen DisplayPort-Core gesteuert und überwacht haben
SPI

SPI ist ein serielles peripheral interface, welches bei der Interchip-Kommunikation häufig Anwendung findet. Das SPI-Protokoll ist von der Datenübertragung her sehr vielseitig. Da pro Chip jedoch immer nur eine Methode benötigt wird, ist die Implementierung so einfach und schnell erledigt, dass wir jeden Chip individuell mit seinen Erfordernissen anbinden.

Wir haben inzwischen weit über 30 SPI-Interfaces implementiert.

UART

UART ist ein universelles asynchrones Protokoll für die bidirektionale Datenübertragung. Es ist eines der am weitesten verbreiteten Protokolle. Nahezu jeder Microcontroller hat ein bis mehrere UART-Schnittstellen, es gibt Brücken von UART in neuere Technologien wie z.B. USB.

Wir verwenden UART sehr häufig für Kommunikationen mit geringen Baudraten bis 3 MBaud zwischen FPGA und PC. Bei Kommunikationen zwischen zwei FPGAs haben wir es mit 16 MBaud und einer Übertragungsstrecke von 100 m stabil in Betrieb gehabt.

Ein UART-Interface ist in VHDL schnell geschrieben, so dass es sich nicht lohnt, ipCores von anderen Herstellern einzusetzen. Wir verfügen über mehrere UART-Implementationen mit fester und einstellbarer Baudrate.

VGA

VGA ist ein Computergrafik-Standard, der das analoge Ansteuern von Bildsinken ermöglicht.

Wir haben im Rahmen eines Projektes einen VGA-Ausgang im FPGA realisiert.

Werfen Sie ruhig auch einen Blick auf unsere Projekt-Referenzen.