Anlässlich meiner Überlegungen zur Messung des komplexen Reflexionsfaktors oder allgemeiner eines Gamma-Messgerätes hatte ich mich auf die Suche nach aktuellen CPLDs oder FPGAs begeben, die heutzutage für Amateurbudgets in Einzelstückzahlen erhältlich sind. Da man dafür sowieso nicht besonders viele Pins braucht, wäre ein weiterer Wunsch, ein kleines QFP-Gehäuse, das man möglichst noch von Hand löten kann. Ein 44- oder 64-Pin QFP mit 0,65 mm Pin-Pitch, notfalls 0,5 mm, wäre also bevorzugt. Am nächsten kam dem ein 5M160ZE64 von Altera, die inzwischen wieder von Intel geschieden sind. Es hat aber 0,4 mm Pinabstand und das traue ich mir nicht mehr zu, von Hand zuverlässig zu löten.
Bei dieser Suche stieß ich auf FPGAs der chinesischen Firma Gowin, die mir sehr interessant erschienen. Die ebenfalls chinesische Firma Sipeed setzt diese FPGA auf ihren Tang-Boards ein, die zu sehr günstigen Preisen über die bekannten Plattformen gekauft werden können.
Die benötigten Entwicklungswerkzeuge für die Software- und FPGA-Entwicklung sind kostenlos von der Gowin-Website herunterzuladen. Sowohl diese Werkzeuge wie auch die Datenblätter der Bauteile sind absolut „State-of-the-Art“, geschrieben oder gegengelesen und korrigiert von englischen Muttersprachlern. Kein Vergleich zu dem, was vor 40 Jahren aus Japan kam. Die Software-Tools basieren auf Eclipse und die FPGA-Tools sind selbst geschrieben. Wer schonmal mit Quartus gearbeitet hat, wird sich schnell zurechtfinden.
Die SW-Tools setzen auf den GNU-Tools auf und unterstützen sowohl den ARM Cortex als auch die RISC‑V Architektur. Die FPGA-Tools unterstützen Verilog 95, Verilog 2001, System-Verilog 2017 und VHDL.
Ich habe mir die genannten Entwicklungswerkzeuge installiert und zwei Tang Nano 4K-Boards, ein Tang Primer 25K Dock Base Board (enthält ein Core Board) und dazu ein weiteres Core Board besorgt und damit ein paar Wochen herumgespielt.
Zum Einstieg will ich nachfolgend kurz meine Erfahrungen beschreiben. Wer selber einsteigen will, wird nicht an der Original-Dokumentation der oben verlinkten Seiten vorbeikommen. Zur Einarbeitung wird auch je nach Vorkenntnissen ein gewisser Zeitaufwand notwendig sein, den ich niemandem abnehmen kann.
Tang Nano 4K
Tang Nano 4K ist ein Board der Größe 60 mm x 22,86 mm, das als zentralen Chip den GW1NSR-LV4C einsetzt.

Das Board ist offensichtlich ursprünglich für Grafikanwendungen entwickelt worden, denn es hat sowohl einen HDMI-Anschluß für einen Monitor als auch ein DVP-Interface zum Anschluß einer Kamera. Außerdem hat es einen 32 MBit Flash-Speicher und ein USB-Interface sowie zwei Taster und eine LED. Viele Signale des GW1NSR-LV4C sind auf eine der beiden 22-poligen Stiftleisten herausgeführt, man muß aber stets darauf achten, daß sie nicht schon anderweitig für die Kamera oder den Monitor benutzt sind. Außerdem haben sie unterschiedliche Signalpegel, mal 1,8 V, mal 2,5 V und mal 3,3 V. Das schränkt die Anwendungsfälle erheblich ein, aber als Starterboard zum Einarbeiten in die Entwicklungswerkzeuge ist es dennoch sehr hilfreich.
Tang Nano 4K ist ohne Kamera für etwa 15 Euro und inklusive HDMI Kamera für etwa 20 Euro über Aliexpress zu beziehen. Wem das zu teuer ist, der kann sich auch den Tang Nano 1K mal anschauen, der etwa 8 Euro kostet.
GW1NSR-LV4C
Der GW1NSR-LV4C ist der zentrale Chip auf dem Tang Nano 4K-Board. Er hat als Hard-Core einen ARM Cortex-M3 an Bord (80 MHz max), sowie ein FPGA mit 4608 LUT4 Zellen. Das sind „look-up Tabellen“ mit jeweils vier Eingängen und einem Ausgang. Sie können vier Eingangssignale in beliebiger Weise verknüpfen und daraus das Ausgangssignal erzeugen. Für weitere Details der Architektur konsultiere man das Datenblatt. Allerdings ist die interne Architektur für den Anwender transparent. Man muß nicht unbedingt wissen, wie der Chip intern funktioniert, die Tools übernehmen das sozusagen auf Knopfdruck.
Weitere interessante Baugruppen auf dem Chip sind 180 kBit SRAM, 256 kBit Flash-Speicher, 64 MBit PSRAM, 64 MBit HyperRAM und 32 MBit NOR Flash. Außerdem hat er 16 18 bit x 18 bit Multiplizierer, zwei PLLs (clkout 480 MHz max) und zwei DLLs eingebaut, sowie einen Oszillator (125 MHz typ.) mit +/-5% Toleranz. Die vier I/O‑Bänke können jeweils mit Spannungen zwischen 1,2 V und 3,3 V betrieben werden.
Hier ein Foto mit angeschlossenem Logikanalysator für Testzwecke.

Die Kommunikation mit dem PC erfolgt über die USB-Buchse auf der rechten Seite, die gleichzeitig die Spannungsversorgung des Boards bereitstellt.
Tang Primer 25K
Viel interessanter als der Tang Nano ist für mich der Tang Primer 25K. Dabei handelt es sich um zwei separate Leiterplatten, das „Dock Base Board“ und das aufgesteckte „Core Board“. Das Core Board enthält das eigentliche FPGA vom Typ GW5A-LV25MG121NC1/I0, einen 50 MHz Quarzoszillator, die Spannungsversorgung und ein 64 MBit NOR-Flash zum Speichern des FPGA-Inhalts inklusive gegebenenfalls des Codes für eine im FPGA implementierte Softcore-CPU. Auch die Tang Primer Boards sind über Aliexpress bestellbar. Der aktuelle Preis (2025) liegt bei etwa 20 Euro für das Core-Board und bei etwa 30 Euro für das Basisboard inklusive einem Core-Board.
Tang Primer 25K Core-Board
Das Core-Board hat eine Größe von nur 23 mm x 18 mm. Hier ein Größenvergleich mit einer SMA-Buchse:


Die Verbindung mit dem Basisboard oder einem selbst zu bauenden Applikationsboard erfolgt über zwei jeweils 60-polige Subminiatur Steckverbinder aus der DF40-Serie von Hirose. Sie haben einen Pinabstand von 0,4 mm und damit ist ein zuverlässiges „Selberlöten“ nicht mehr möglich. Man wird also auf einen Bestücker zurückgreifen müssen und glücklicherweise hat JLCPCB die passenden Sockel in seinem Lagerbestand.
Das Core-Board benötigt eine Versorgungsspannung von 3,6 V bis 5,5 V und erzeugt daraus mit mehreren Schaltreglern alle benötigten weiteren Spannungen: 0,9 V, 1,2 V, 1,8 V, 2,5 V und 3,3 V. Die 0,9 V und die 1,2 V werden nur zur Versorgung des FPGAs benötigt und die 1,8/2,5/3,3V werden auf die Steckverbinder geführt. Auch die I/O‑Spannungsversorgungen der sechs GPIO-Bänke werden auf die Steckverbinder geführt, so daß das Basisboard diese Bänke über Leiterbahnbrücken mit der benötigten Spannung versorgen kann, ohne sie selbst erzeugen zu müssen.
Tang Primer 25K Base-Board
Das Tang Primer Base-Board stellt eine handhabbare Hardware-Entwicklungsumgebung zur Verfügung.

Über die USB-Buchse auf der rechten Seite wird das Board mit einem Host-PC verbunden und mit der Betriebsspannung versorgt. Über diese USB-Buchse ist das FPGA direkt programmierbar und alternativ kann der Bitstream in den Flash-Speicher geladen werden, aus dem das FPGA sich nach dem Einschalten selbst konfiguriert.
Außerdem sind viele Signale des FPGAs auf 100-mil-Stift- und Buchsenleisten herausgeführt. Damit sind Testaufbauten wie dieser hier leicht möglich.

Hier ist ein Steckboard mit zwei aufgesteckten SMA-Buchsen gezeigt, das jeweils einen 50 Ω Abschlußwiderstand enthält und dann mit möglichst kurzen Drähten an die Stiftleiste verbunden wird. Auf die SMA-Buchsen sind BNC-Adapter aufgeschraubt, an die ein Signalgenerator angeschlossen wird. Auch der oben schon gezeigte Logikanalysator wird hier wieder verwendet. Das Kabel, das nach rechts oben abgeht, führt zu einem USB-RS232-Konverter. Er ist einer der simplen Art, der nur RxD, TxD und +5V zur Verfügung stellt. Er funktioniert gleichwohl hervorragend und wird regelmäßig problemlos mit 115 kBd betrieben.
Das GW5A-LV25MG121NC1/I0-FPGA
Das hier verwendete Gowin-FPGA vom Typ GW5A hat 23040 logische Einheiten, bestehend aus jeweils einer Lookup-Tabelle mit vier Eingängen und einem Flipflop. Außerdem sind 56 SRAM-Blöcke mit insgesamt 1008 KBit und zusätzlich noch 180 KBit verteiltes SRAM implementiert. Darüberhinaus gibt es 28 DSP-Blöcke, jeweils bestehend aus mehreren Hardware-Multiplizierern und ‑Addierern sowie einer 48-bit-ALU. Sechs PLLs sorgen für verschiedene benötigte Taktraten. Die Referenzeingangsfrequenz muß zwischen 19 MHz und 800 MHz liegen und die VCO-Frequenz liegt zwischen 800 MHz und 1600 MHz. Aus der eingestellten VCO-Frequenz wird durch Frequenzteiler die benötigte Ausgangsfrequenz erzeugt.
FPGA-Entwicklung
Als Software-Entwicklungsumgebung wird das weitverbreitete Eclipse mit GNU-Tools eingesetzt. Das soll hier nicht weiter besprochen werden, detaillierte Hilfe gibt es im Internet. Wer, so wie ich, bisher noch nicht damit gearbeitet hat, wird sich schnell zurechtfinden, sollte aber „ein paar Tage“ zur Einarbeitung veranschlagen. Die Gowin-Dokumentation ist auch hier sehr hilfreich, insbesondere wenn es um die Konfiguration für die verwendete Zielarchitektur geht, also ARM Cortex oder RiscV.
Der Gowin FPGA-Designer unterstützt Verilog 95, Verilog 2001, System-Verilog 2017 und VHDL. Die Logiksynthese läuft sehr schnell, Placement und Routing (P&R) braucht naturgemäß etwas länger. Ein kompletter Durchlauf für ein Design mit einem PicoRV32-Softcore, UART und Wishbone-Bus, einer PLL und einiger 32-bit Register und Glue-Logik dauert etwa 1 Minute. Ein Simulator ist nicht vorhanden, aber man kann auf kostenlose Simulatoren anderer Entwicklungswerkzeuge ausweichen. In meinem Fall ist das Modelsim, das bei der Intel/Altera Entwicklungsumgebung dabei ist.
Der IP Core Generator soll noch kurz erwähnt werden. Er ist Teil des Gowin FPGA Designers und gestattet die Konfiguration einiger vordefinierter Bausteine. Damit wird beispielsweise der RiscV-Softcore, die PLLs oder die DSPs konfiguriert. Hier die Konfiguration des CPU-Cores:

Für den RiscV-Core wählt man außer dem Befehlssatz auch die anzuschließenden Speicher und das Bus-Interface (AHB oder Wishbone). Außerdem sind einige für Microcontroller typische Peripherals wählbar: GPIOs, UART, I2C-Master, SPI Master oder Slave oder SPI-Flash-Interface. Das sieht dann so aus:

Ich habe damit jetzt einige Wochen herumgespielt und bin außerordentlich zufrieden. Die Tools arbeiten sehr stabil und zuverlässig, keinerlei unerklärliches Fehlverhalten, das dann nach Neustart des PCs genauso unerklärlich wieder weg ist. Das bin ich bei anderen Embedded Entwicklungsumgebungen anders gewohnt, irgendwas ist ja immer. Auch das Herunterladen des Bitstreams zum FPGA funktioniert zuverlässig und ohne Murren. Wenn etwas schiefging, wusste ich bisher immer, woran es lag, meistens an mir.
Mit dem oben schon gezeigten Testaufbau habe ich einen digitalen Phasenvergleicher gebaut, der mit den zugegeben sauberen Signale eines Testgenerators Phasenverschiebungen zwischen zwei Signalen von 0,1° auflösen kann. Die Abweichung vom tatsächlichen Wert lag nach meinen Beobachtungen zwischen 1° und 2°, was an dem provisorischen Aufbau liegen kann. Eine Anwendung für diesen Phasenmesser könnte ein Gamma-Meßgerät sein, dessen Prototyp ich hier schonmal vorgestellt, aber bisher nicht verwirklicht habe.
Ich werde noch etwas optimieren, sowohl Verilog- als auch C‑Code noch etwas bereinigen und dann die Ergebnisse hier vorstellen.
