Das Serial Peripheral Interface ist in der Elektronik so etwas wie die Brot- und Butter-Schnittstelle zum Anbinden externer Komponenten an einen Logikbaustein. Was beim Realisieren eines SPIs in einem Field Programmable Gate Array oder kurz FPGA zu beachten ist, zeigt dieser Beitrag.
Beim FPGA-Schaltungsdesign geht es darum, die richtigen Puzzleteile wohldurchdacht zusammenzufügen, um eine optimale Funktion, Performance und Platzausnutzung zu erreichen. PLC2 bietet eine kostenlose Grundlagen-Webinar-Reihe für FPGA-Entwickler an.
Eine SPI-Schnittstelle lässt sich im FPGA mit unterschiedlichen Ansätzen realisieren – zum Beispiel mit einer oder zwei Taktdomänen. Wie das geht, zeigt dieser Beitrag. Zudem verdeutlicht er unterschiedliche Vorgehensweisen bei der Entwicklung sowie der Definition der Timing Constraints.
Bei der Implementierung der SPI-Schnittstelle wurden zwei grundsätzlich verschiedene Ansätze zur Implementierung verwendet. Der erste Ansatz beschreibt ein Konzept mit zwei Taktdomänen (Two Clock Domain). Der zweite Ansatz implementiert die Schaltung mit nur einer Taktdomäne (Single Clock Domain).
Implementierung mit zwei Takt-Domänen
Als typischer Vertreter einer SPI-Schnittstelle dient hier der Baustein DAC AD7303 von Analog Devices. Bild 1 zeigt das Timing Diagramm der Schnittstelle sowie die Timing Parameter. In diesem Beispiel wird die SCLK-Frequenz mit 30 MHz gewählt. Die Timing Parameter t4, t5 und t6 müssen bei der Definition der Timing-Anforderungen (Timing Constraints) besonders beachtet werden.
Bild 1: AD7303 Timing-Diagramm und Timing-Anforderungen.
(Bild: PLC2 GmbH)
Bei der Implementierung mit zwei Takt Domänen werden zwei, nicht notwendigerweise synchrone, Takte verwendet. Im vorliegenden Fall sind die Takte 120 MHz und 30 MHz. Die Ablaufsteuerung wird mit 120 MHz getaktet, während die eigentliche SPI FSM mit 30 MHz gesteuert wird.
Wie aus Bild 2 ersichtlich ist daher eine Synchronisationsstufe zwischen den beiden Taktdomänen notwendig (sollten die beiden Taktdomänen zueinander synchron sein, kann die Synchronisationsstufe entfallen). Die Implementierung der SPI-Schnittstelle mit zwei Clock Domains ist in Bild 2 gezeigt.
Bild 2: SPI-Interface-Implementierung mit zwei Clock-Domänen.
(Bild: PLC2 GmbH)
Verwendete Parameter:
Eingangstakt: 100 MHz
Interner Takt CLK_120: 120 MHz
Interner Takt CLK_30: 30 MHz
Generierter Takt dac_sck: 30 MHz
Die PLL_120_30: Die PLL erzeugt aus dem externen Takt CLK (100 MHz) zwei interne, phasensynchrone Takte CLK_120 und CLK_30.
Modul dac_sample_gen: Das Modul dac_sample_gen erzeugt das sample Signal (convert) für die dac_fsm. Das sample Signal initiiert die Übertragung der digitalen Daten zum DAC. Die Einstellung der sample Rate erfolgt über sample_select [1:0] und ist in der dargestellten Tabelle gegeben. Das Block Diagramm von dac_sample_gen ist in Bild 3 gezeigt.
Tabelle 1: Die Einstellung der sample Rate erfolgt über sample_select [1:0].
(Bild: PLC2 GmbH)
Bild 3: Block Diagramm dac_sample_gen.
(Bild: PLC2 GmbH)
Steuersignal mode_select: Das Steuersignal mode_select erzeugt entweder ein Rechtecksignal oder ein dreieckförmiges Signal als Eingangsdaten für den DAC.
Modul sync_stage: Das Modul dac_sample_gen arbeitet mit CLK_120. Die Steuereinheit dac_fsm ist Teil der CLK_30 Domäne. Das Modul sync_stage transportiert das convert Signal von der CLK_120 Domäne in die CLK_30 Domäne. Entsprechende Signale von der dac_fsm werden von der CLK_30 Domäne in die CLK_120 übertragen. Das Block Diagramm von sync_stage ist in Bild 4 gezeigt.
Bild 4: Block Diagramm sync_stage.
(Bild: PLC2 GmbH)
Modul dac_fsm: Das Modul dac_fsm steuert die Erzeugung der Steuer/Data Signale zum DAC. Um die in Bild 1 gegebenen Werte von t4, t5 und t6 einzuhalten arbeitet dac_fsm auf der fallenden Flanke von CLK_30. dac_fsm ist wie in Bild 5 gezeigt als eine State Machine implementiert.
Die Taktsignale CLK_120 und CLK_30 müssen nicht explizit spezifiziert werden, da diese automatisch von der Designsoftware definiert werden. Diese beiden Takte werden auch als „automatically generated clock“ bezeichnet
Das am Port dac_sck angeschlossene Signal ist eine Kopie des internen Taktes CLK_30. Dieses Signal wird vom externen DAC als ein Takt interpretiert. Daher muss dieses Signal auch als ein Takt definiert werden um die Zeitanforderungen t4, t5 und t6 korrekt zu beschreiben. Dieser Takt ist ein sogenannter „manually generated clock“.
Die Zeiten t4, t5 und t6 beschreiben die Setup- / Hold-Anforderungen an den externen Baustein. Diese Anforderungen werden mit dem set_output_delay Constraint beschrieben.
Die Timing Analyse bestätigt die ordnungsgemäße Implementierung des Designs.
Die Timing-Analyse bestätigt die ordnungsgemäße Implementierung des Designs.
(Bild: PLC2 GmbH)
Event-Tipp: FPGA Conference Europe
Guidance to Accelerate your Programmable Solution
Einsatzgebiete für programmierbare Logikschaltung sind so vielfältig wie die verfügbaren Lösungen, mit denen sie sich entwickeln lassen. Ob FPGA, GPU oder Adaptive-Computing-SoC: Jede Technologie hat ihre Berechtigung – ist aber auch erklärungsbedürftig.
Die FPGA Conference Europe - als europaweit wichtigste Plattform für hersteller- und technologieunabhängigen und applikationsübergreifenden Austausch zwischen Experten und Entwicklern - gibt Embedded-Entwicklern Orientierung und praktische Hilfestellungen.
Die Implementierung der Single-Clock-SPI-Schnittstelle ist in Bild 6 gezeigt.
Bild 6: Die Implementierung der Single-Clock-SPI-Schnittstelle.
(Bild: PLC2 GmbH)
Das Konzept der SPI-Implementierung mit einer einzigen Taktdomäne ist der Implementierung mit zwei Taktdomänen ähnlich. Zur Veranschaulichung wird die PLL nicht verwendet. Auch das Modul sync_stage wird nicht benötigt. Wegen des einzelnen Takts wird das Modul clock_generator benötigt, um die fallende Flanke des dac_sck zu signalisieren, die als Triggerbedingung für die Zustandsmaschine dac_fsm verwendet wird.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel Communications Group GmbH & Co. KG, Max-Planckstr. 7-9, 97082 Würzburg einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von redaktionellen Newslettern nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung, Abschnitt Redaktionelle Newsletter.
Modul clock_generator: Das in Bild 7 gezeigte Modul clock_generator erzeugt das Taktsignal dac_clk sowie die Anzeige der fallenden Flanke von dac_sck. Bild 8 zeigt die Beziehung zwischen dac_sclk und edge_low.
Bild 7: Block Diagramm des Moduls clock_generator.
(Bild: PLC2 GmbH)
Bild 8: Zeitbeziehung zwischen dac_sclk und edge_low.
(Bild: PLC2 GmbH)
Modul dac_fsm für die Single-Clock-Implementierung: Das Modul dac_fsm steuert die Erzeugung der Steuer-/Datensignale an den DAC. Um die in Bild 1 angegebenen Werte von t4, t5 und t6 einzuhalten, arbeitet dac_fsm immer an der steigenden Flanke von CLK_120, aber nur dann, wenn das Signal edge_low aktiv. Dac_fsm ist als eine Zustandsmaschine implementiert.
Die Zustandsmaschine dac_fsm hat die gleiche Struktur wie die Zustandsmaschine bei der Implementierung der Lösung mit zwei Takt Domänen. Der einzige Unterschied ist die Auswertung der fallenden Flanke von dac_sck anstatt der Verwendung des Takts clk_30.
Bild 9: Struktur der dac_fsm Zustandsmaschine.
(Bild: PLC2 GmbH)
Nachdem das Umwandlungssignal erkannt wurde, wird der Zähler bit_count mit dem Wert 15 geladen. Die seriellen Daten werden auf der Leitung dac_sdata mit der steigenden Flanke des Taktsignals CLK_120 immer dann ausgegeben, wenn edge_low aktiv ist. Nachdem 16 Datenbits übertragen wurden, signalisiert dac_fsm wieder die Bereitschaft und wartet auf das nächste Konvertierungssignal.
Timing Constraints für die Single-Clock-Domain-Implementierung
Das an den Port dac_sck angeschlossene Taktsignal wird vom clock_generator erzeugt. Die Beziehung zwischen CLK_120 und dac_sck ist geteilt durch 4 (vergleiche dazu Bild 7).
Die Zeitangaben t4, t5 und t6 beschreiben die Setup- / Hold-Anforderungen für den externen DAC AD7303. Diese Anforderungen werden mit dem Constraint set_output_delay beschrieben. Wegen der Single Clock Domain ist zusätzlich ein Multicycle Constraint notwendig.
Bild 10: Wegen der Single Clock Domain ist zusätzlich ein Multicycle Constraint notwendig.
(Bild: PLC2 GmbH)
Timing Analyse
Die Timing Analyse des Designs mit einer Takt Domäne zeigt die gleichen Ergebnisse wie das Design mit zwei Takt Domänen.
Die Timing-Analyse bestätigt die ordnungsgemäße Implementierung des Designs.
(Bild: PLC2 GmbH)
Zusammenfassung
Beide Konzepte können verwendet werden, um SPI-Schnittstellen mit niedriger Geschwindigkeit zu implementieren. Die Zweitaktdomäne hat jedoch einen Vorteil beim Stromverbrauch, da ein Teil des Designs mit geringerer Geschwindigkeit läuft. Auch die Timing Constraints sind leichter zu spezifizieren. Das Konzept einer Taktdomäne verwendet ein einzelnes Taktverteilungsnetzwerk, was ein Vorteil ist, da keine Synchronisier-Stufen benötigt werden. Beide Musterprojekte sind auf Anfrage unter info@plc2.de erhältlich. (me)
Kostenlose Webinar-Reihe zur FPGA-Entwicklung
Schaltungstechnik, Timing Constraints und Co.
Dank der Fortschritte in der Fertigungstechnologie können moderne FPGAs Millionen von Logikzellen beinhalten. Häufig sind zudem weitere IP-Blöcke wie Prozessor-Kerne, KI-Beschleuniger, Speicherblöcke mit mehreren MBits integriert. Um eine nahtlose Designmethodik zu definieren, erfordert diese Komplexität einen gut strukturierten und skalierbaren Designablauf.
Das Hauptziel jeder FPGA-Entwicklung ist der Entwurf sicherer und zuverlässiger Schaltkreise. Dementsprechend sind die wichtigsten Schritte die Einhaltung von Design Richtlinien und die Definition der geltenden Timing-Anforderungen. Viele komplexe Designs scheitern bei der Implementierung genau daran.
Design Richtlinien sind für viele Teilbereiche der FPGA-Entwicklung definiert worden, u.a. – VHDL / Verilog Design Richtlinien – Richtlinien für zur Reduzierung der Leistungsaufnahme – Richtlinien für zur Reduzierung der Fläche – Clock Design – Reset Design – Synchronisation und CDC
Die neue, kostenlose Webinar-Reihe von PLC2 GmbH adressiert die wichtigsten, oben genannten Aspekte der FPGA-Entwicklung. Erfahrene Experten präsentieren in regelmäßigen Abständen ausgesuchte Themen aus diesen Bereichen. Weiterführende Themen werden zusätzlich auf der diesjährigen FPGA Conference Europe präsentiert.