Sipeed Tang FPGA Series

Anläss­lich mei­ner Über­le­gun­gen zur Mes­sung des kom­ple­xen Refle­xi­ons­fak­tors oder all­ge­mei­ner eines Gam­ma-Mess­ge­rä­tes hat­te ich mich auf die Suche nach aktu­el­len CPLDs oder FPGAs bege­ben, die heut­zu­ta­ge für Ama­teur­bud­gets in Ein­zel­stück­zah­len erhält­lich sind. Da man dafür sowie­so nicht beson­ders vie­le Pins braucht, wäre ein wei­te­rer Wunsch, ein klei­nes QFP-Gehäu­se, das man mög­lichst noch von Hand löten kann. Ein 44- oder 64-Pin QFP mit 0,65 mm Pin-Pitch, not­falls 0,5 mm, wäre also bevor­zugt. Am näch­sten kam dem ein 5M160ZE64 von Alte­ra, die inzwi­schen wie­der von Intel geschie­den sind. Es hat aber 0,4 mm Pin­ab­stand und das traue ich mir nicht mehr zu, von Hand zuver­läs­sig zu löten.

Bei die­ser Suche stieß ich auf FPGAs der chi­ne­si­schen Fir­ma Gowin, die mir sehr inter­es­sant erschie­nen. Die eben­falls chi­ne­si­sche Fir­ma Sipeed setzt die­se FPGA auf ihren Tang-Boards ein, die zu sehr gün­sti­gen Prei­sen über die bekann­ten Platt­for­men gekauft wer­den können.

Die benö­tig­ten Ent­wick­lungs­werk­zeu­ge für die Soft­ware- und FPGA-Ent­wick­lung sind kosten­los von der Gowin-Web­site her­un­ter­zu­la­den. Sowohl die­se Werk­zeu­ge wie auch die Daten­blät­ter der Bau­tei­le sind abso­lut „Sta­te-of-the-Art“, geschrie­ben oder gegen­ge­le­sen und kor­ri­giert von eng­li­schen Mut­ter­sprach­lern. Kein Ver­gleich zu dem, was vor 40 Jah­ren aus Japan kam. Die Soft­ware-Tools basie­ren auf Eclip­se und die FPGA-Tools sind selbst geschrie­ben. Wer schon­mal mit Quar­tus gear­bei­tet hat, wird sich schnell zurechtfinden.

Die SW-Tools set­zen auf den GNU-Tools auf und unter­stüt­zen sowohl den ARM Cor­tex als auch die RISC‑V Archi­tek­tur. Die FPGA-Tools unter­stüt­zen Ver­i­log 95, Ver­i­log 2001, System-Ver­i­log 2017 und VHDL.

Ich habe mir die genann­ten Ent­wick­lungs­werk­zeu­ge instal­liert und zwei Tang Nano 4K-Boards, ein Tang Pri­mer 25K Dock Base Board (ent­hält ein Core Board) und dazu ein wei­te­res Core Board besorgt und damit ein paar Wochen herumgespielt.

Zum Ein­stieg will ich nach­fol­gend kurz mei­ne Erfah­run­gen beschrei­ben. Wer sel­ber ein­stei­gen will, wird nicht an der Ori­gi­nal-Doku­men­ta­ti­on der oben ver­link­ten Sei­ten vor­bei­kom­men. Zur Ein­ar­bei­tung wird auch je nach Vor­kennt­nis­sen ein gewis­ser Zeit­auf­wand not­wen­dig sein, den ich nie­man­dem abneh­men kann.

Tang Nano 4K

Tang Nano 4K ist ein Board der Grö­ße 60 mm x 22,86 mm, das als zen­tra­len Chip den GW1NSR-LV4C einsetzt.

Das Board ist offen­sicht­lich ursprüng­lich für Gra­fik­an­wen­dun­gen ent­wickelt wor­den, denn es hat sowohl einen HDMI-Anschluß für einen Moni­tor als auch ein DVP-Inter­face zum Anschluß einer Kame­ra. Außer­dem hat es einen 32 MBit Flash-Spei­cher und ein USB-Inter­face sowie zwei Taster und eine LED. Vie­le Signa­le des GW1NSR-LV4C sind auf eine der bei­den 22-poli­gen Stift­lei­sten her­aus­ge­führt, man muß aber stets dar­auf ach­ten, daß sie nicht schon ander­wei­tig für die Kame­ra oder den Moni­tor benutzt sind. Außer­dem haben sie unter­schied­li­che Signal­pe­gel, mal 1,8 V, mal 2,5 V und mal 3,3 V. Das schränkt die Anwen­dungs­fäl­le erheb­lich ein, aber als Star­ter­board zum Ein­ar­bei­ten in die Ent­wick­lungs­werk­zeu­ge ist es den­noch sehr hilfreich.

Tang Nano 4K ist ohne Kame­ra für etwa 15 Euro und inklu­si­ve HDMI Kame­ra für etwa 20 Euro über Ali­ex­press zu bezie­hen. Wem das zu teu­er ist, der kann sich auch den Tang Nano 1K mal anschau­en, der etwa 8 Euro kostet.

GW1NSR-LV4C

Der GW1NSR-LV4C ist der zen­tra­le Chip auf dem Tang Nano 4K-Board. Er hat als Hard-Core einen ARM Cor­tex-M3 an Bord (80 MHz max), sowie ein FPGA mit 4608 LUT4 Zel­len. Das sind „look-up Tabel­len“ mit jeweils vier Ein­gän­gen und einem Aus­gang. Sie kön­nen vier Ein­gangs­si­gna­le in belie­bi­ger Wei­se ver­knüp­fen und dar­aus das Aus­gangs­si­gnal erzeu­gen. Für wei­te­re Details der Archi­tek­tur kon­sul­tie­re man das Daten­blatt. Aller­dings ist die inter­ne Archi­tek­tur für den Anwen­der trans­pa­rent. Man muß nicht unbe­dingt wis­sen, wie der Chip intern funk­tio­niert, die Tools über­neh­men das sozu­sa­gen auf Knopfdruck.

Wei­te­re inter­es­san­te Bau­grup­pen auf dem Chip sind 180 kBit SRAM, 256 kBit Flash-Spei­cher, 64 MBit PSRAM, 64 MBit Hyper­RAM und 32 MBit NOR Flash. Außer­dem hat er 16 18 bit x 18 bit Mul­ti­pli­zie­rer, zwei PLLs (clkout 480 MHz max) und zwei DLLs ein­ge­baut, sowie einen Oszil­la­tor (125 MHz typ.) mit +/-5% Tole­ranz. Die vier I/O‑Bänke kön­nen jeweils mit Span­nun­gen zwi­schen 1,2 V und 3,3 V betrie­ben werden.

Hier ein Foto mit ange­schlos­se­nem Logik­ana­ly­sa­tor für Testzwecke.

Die Kom­mu­ni­ka­ti­on mit dem PC erfolgt über die USB-Buch­se auf der rech­ten Sei­te, die gleich­zei­tig die Span­nungs­ver­sor­gung des Boards bereitstellt.

Tang Pri­mer 25K

Viel inter­es­san­ter als der Tang Nano ist für mich der Tang Pri­mer 25K. Dabei han­delt es sich um zwei sepa­ra­te Lei­ter­plat­ten, das „Dock Base Board“ und das auf­ge­steck­te „Core Board“. Das Core Board ent­hält das eigent­li­che FPGA vom Typ GW5A-LV25MG121NC1/I0, einen 50 MHz Quarz­os­zil­la­tor, die Span­nungs­ver­sor­gung und ein 64 MBit NOR-Flash zum Spei­chern des FPGA-Inhalts inklu­si­ve gege­be­nen­falls des Codes für eine im FPGA imple­men­tier­te Soft­co­re-CPU. Auch die Tang Pri­mer Boards sind über Ali­ex­press bestell­bar. Der aktu­el­le Preis (2025) liegt bei etwa 20 Euro für das Core-Board und bei etwa 30 Euro für das Basis­board inklu­si­ve einem Core-Board.

Tang Pri­mer 25K Core-Board

Das Core-Board hat eine Grö­ße von nur 23 mm x 18 mm. Hier ein Grö­ßen­ver­gleich mit einer SMA-Buchse:

Die Ver­bin­dung mit dem Basis­board oder einem selbst zu bau­en­den Appli­ka­ti­ons­board erfolgt über zwei jeweils 60-poli­ge Sub­minia­tur Steck­ver­bin­der aus der DF40-Serie von Hiro­se. Sie haben einen Pin­ab­stand von 0,4 mm und damit ist ein zuver­läs­si­ges „Sel­ber­lö­ten“ nicht mehr mög­lich. Man wird also auf einen Bestücker zurück­grei­fen müs­sen und glück­li­cher­wei­se hat JLCPCB die pas­sen­den Sockel in sei­nem Lagerbestand.

Das Core-Board benö­tigt eine Ver­sor­gungs­span­nung von 3,6 V bis 5,5 V und erzeugt dar­aus mit meh­re­ren Schalt­reg­lern alle benö­tig­ten wei­te­ren Span­nun­gen: 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 wer­den nur zur Ver­sor­gung des FPGAs benö­tigt und die 1,8/2,5/3,3V wer­den auf die Steck­ver­bin­der geführt. Auch die I/O‑Spannungsversorgungen der sechs GPIO-Bän­ke wer­den auf die Steck­ver­bin­der geführt, so daß das Basis­board die­se Bän­ke über Lei­ter­bahn­brücken mit der benö­tig­ten Span­nung ver­sor­gen kann, ohne sie selbst erzeu­gen zu müssen.

Tang Pri­mer 25K Base-Board

Das Tang Pri­mer Base-Board stellt eine hand­hab­ba­re Hard­ware-Ent­wick­lungs­um­ge­bung zur Verfügung.

Über die USB-Buch­se auf der rech­ten Sei­te wird das Board mit einem Host-PC ver­bun­den und mit der Betriebs­span­nung ver­sorgt. Über die­se USB-Buch­se ist das FPGA direkt pro­gram­mier­bar und alter­na­tiv kann der Bit­stream in den Flash-Spei­cher gela­den wer­den, aus dem das FPGA sich nach dem Ein­schal­ten selbst konfiguriert.

Außer­dem sind vie­le Signa­le des FPGAs auf 100-mil-Stift- und Buch­sen­lei­sten her­aus­ge­führt. Damit sind Test­auf­bau­ten wie die­ser hier leicht möglich.

Hier ist ein Steck­board mit zwei auf­ge­steck­ten SMA-Buch­sen gezeigt, das jeweils einen 50 Ω Abschluß­wi­der­stand ent­hält und dann mit mög­lichst kur­zen Dräh­ten an die Stift­lei­ste ver­bun­den wird. Auf die SMA-Buch­sen sind BNC-Adap­ter auf­ge­schraubt, an die ein Signal­ge­nera­tor ange­schlos­sen wird. Auch der oben schon gezeig­te Logik­ana­ly­sa­tor wird hier wie­der ver­wen­det. Das Kabel, das nach rechts oben abgeht, führt zu einem USB-RS232-Kon­ver­ter. Er ist einer der simp­len Art, der nur RxD, TxD und +5V zur Ver­fü­gung stellt. Er funk­tio­niert gleich­wohl her­vor­ra­gend und wird regel­mä­ßig pro­blem­los mit 115 kBd betrieben.

Das GW5A-LV25MG121NC1/I0-FPGA

Das hier ver­wen­de­te Gowin-FPGA vom Typ GW5A hat 23040 logi­sche Ein­hei­ten, bestehend aus jeweils einer Look­up-Tabel­le mit vier Ein­gän­gen und einem Flip­flop. Außer­dem sind 56 SRAM-Blöcke mit ins­ge­samt 1008 KBit und zusätz­lich noch 180 KBit ver­teil­tes SRAM imple­men­tiert. Dar­über­hin­aus gibt es 28 DSP-Blöcke, jeweils bestehend aus meh­re­ren Hard­ware-Mul­ti­pli­zie­rern und ‑Addie­rern sowie einer 48-bit-ALU. Sechs PLLs sor­gen für ver­schie­de­ne benö­tig­te Takt­ra­ten. Die Refe­renz­ein­gangs­fre­quenz muß zwi­schen 19 MHz und 800 MHz lie­gen und die VCO-Fre­quenz liegt zwi­schen 800 MHz und 1600 MHz. Aus der ein­ge­stell­ten VCO-Fre­quenz wird durch Fre­quenz­tei­ler die benö­tig­te Aus­gangs­fre­quenz erzeugt.

FPGA-Ent­wick­lung

Als Soft­ware-Ent­wick­lungs­um­ge­bung wird das weit­ver­brei­te­te Eclip­se mit GNU-Tools ein­ge­setzt. Das soll hier nicht wei­ter bespro­chen wer­den, detail­lier­te Hil­fe gibt es im Inter­net. Wer, so wie ich, bis­her noch nicht damit gear­bei­tet hat, wird sich schnell zurecht­fin­den, soll­te aber „ein paar Tage“ zur Ein­ar­bei­tung ver­an­schla­gen. Die Gowin-Doku­men­ta­ti­on ist auch hier sehr hilf­reich, ins­be­son­de­re wenn es um die Kon­fi­gu­ra­ti­on für die ver­wen­de­te Ziel­ar­chi­tek­tur geht, also ARM Cor­tex oder RiscV.

Der Gowin FPGA-Desi­gner unter­stützt Ver­i­log 95, Ver­i­log 2001, System-Ver­i­log 2017 und VHDL. Die Logik­syn­the­se läuft sehr schnell, Pla­ce­ment und Rou­ting (P&R) braucht natur­ge­mäß etwas län­ger. Ein kom­plet­ter Durch­lauf für ein Design mit einem PicoR­V32-Soft­co­re, UART und Wish­bo­ne-Bus, einer PLL und eini­ger 32-bit Regi­ster und Glue-Logik dau­ert etwa 1 Minu­te. Ein Simu­la­tor ist nicht vor­han­den, aber man kann auf kosten­lo­se Simu­la­to­ren ande­rer Ent­wick­lungs­werk­zeu­ge aus­wei­chen. In mei­nem Fall ist das Model­sim, das bei der Intel/Altera Ent­wick­lungs­um­ge­bung dabei ist.

Der IP Core Gene­ra­tor soll noch kurz erwähnt wer­den. Er ist Teil des Gowin FPGA Desi­gners und gestat­tet die Kon­fi­gu­ra­ti­on eini­ger vor­de­fi­nier­ter Bau­stei­ne. Damit wird bei­spiels­wei­se der RiscV-Soft­co­re, die PLLs oder die DSPs kon­fi­gu­riert. Hier die Kon­fi­gu­ra­ti­on des CPU-Cores:

Für den RiscV-Core wählt man außer dem Befehls­satz auch die anzu­schlie­ßen­den Spei­cher und das Bus-Inter­face (AHB oder Wish­bo­ne). Außer­dem sind eini­ge für Micro­con­trol­ler typi­sche Peri­pherals wähl­bar: GPI­Os, UART, I2C-Master, SPI Master oder Slave oder SPI-Flash-Inter­face. Das sieht dann so aus:

Ich habe damit jetzt eini­ge Wochen her­um­ge­spielt und bin außer­or­dent­lich zufrie­den. Die Tools arbei­ten sehr sta­bil und zuver­läs­sig, kei­ner­lei uner­klär­li­ches Fehl­ver­hal­ten, das dann nach Neu­start des PCs genau­so uner­klär­lich wie­der weg ist. Das bin ich bei ande­ren Embedded Ent­wick­lungs­um­ge­bun­gen anders gewohnt, irgend­was ist ja immer. Auch das Her­un­ter­la­den des Bit­streams zum FPGA funk­tio­niert zuver­läs­sig und ohne Mur­ren. Wenn etwas schief­ging, wuss­te ich bis­her immer, wor­an es lag, mei­stens an mir.

Mit dem oben schon gezeig­ten Test­auf­bau habe ich einen digi­ta­len Pha­sen­ver­glei­cher gebaut, der mit den zuge­ge­ben sau­be­ren Signa­le eines Test­ge­ne­ra­tors Pha­sen­ver­schie­bun­gen zwi­schen zwei Signa­len von 0,1° auf­lö­sen kann. Die Abwei­chung vom tat­säch­li­chen Wert lag nach mei­nen Beob­ach­tun­gen zwi­schen 1° und 2°, was an dem pro­vi­so­ri­schen Auf­bau lie­gen kann. Eine Anwen­dung für die­sen Pha­sen­mes­ser könn­te ein Gam­ma-Meß­ge­rät sein, des­sen Pro­to­typ ich hier schon­mal vor­ge­stellt, aber bis­her nicht ver­wirk­licht habe.

Ich wer­de noch etwas opti­mie­ren, sowohl Ver­i­log- als auch C‑Code noch etwas berei­ni­gen und dann die Ergeb­nis­se hier vorstellen.