Wat leren we vandaag ? Logica maken in CPLD/FPGA met SystemVerilog

Het is niet de bedoeling om als hobbyist met grote cyclone of Zyncs te gaan werken. Ten eerste zitten die dingen in flinke BGA verpakkingen en vereisen ze flink wat kennis om mee te werken. Als je alleen een looplichtje gaat bouwen heb je geen nood aan zo een monster.

Verwacht niet dat dit topic je gaat aanleren om een nieuwe AI processor te bouwen die nvidia ver achter zich laat en je de volgende trillionair gaat worden. Zoals ik al gezegd heb : die kennis hou ik lekker voor mezelf :)

CPLD en FPGA kunnen ook goedkoop zijn. Een kleine MAX V heb je al voor iets meer dan 2$. een gortere voor 5 of 7$. en daar kan je best al wel iets in kwijt.

Veel bedrijven gebruiken CPLD/FPGA in massaproductie. Tesla heeft er verschillende in gebruik in zowel de entertainment als autopiloot. Ze doen daar werk dat anders door een blok discrete logica moet gedaan worden. ( meestal interface translation zoals van MIPI naar iets anders, data serialisatie/deserialisatie , LCDS transport buffer en dergelijke. ) In de originele model S deed een flinke CPLD het werk voor video overlay voor de achteruit camera.

Waar ik nu werk gebruiken we die dingen ook. Ook weer om protocollen om te zetten (camera data serialiseren , i2c mastering en dergelijke). Een processor kan het niet omdat de camera data heel snel is en time-critical is. CPLD to the rescue.

Er zijn veel systemen waar FPGAs in zitten. Al die budget scoops en generatoren (rigol, unit-, siglent, rohde schwarz,) draaien haast allemaal op Zync. Er zijn veel asiatische FPGA makers nu.
Voor kleine volumes is een FPGA nog steeds goedkoper dan een full blown ASIC. En het is field programmable. je kan bugfixes uitsturen. in een ASIC lukt dat niet.

200 euro is voor een klein bedrijfje toch makkelijk te doen ? of het moet een heel klein bedrijfje zijn wat enkel een roestige 250 watt soldeerpook heeft, wat koolstof 5 watt weerstanden met nog een bak lampen in een stoffige hoek.

Als je geld kan uitgeven aan een rpi met touch screen en een ganse bak hats , capes, shoes, shields, en weetikveel wat andere kledingstukken (ik wil ooit een pamper of "zeverlap" (slabbetje) uitbrengen voor die dingen) ze tegenwoordig aan de man brengen, kan je evengoed 100$ uitgeven aan een FPGA devboard van olimex of terasic.

Dat zijn allemaal andere discussies en dragen niks bij aan leren werken met CPLD/FPGA en systemverilog. Gaan we niet meer voeren

en die pSOC chips zijn ook goedkoop. heb je meteen een processor en cpld in een. sommige van de devkits zijn goedkoper dan een arduino !

https://www.digikey.com/en/products/filter/microcontrollers/685?s=N4Ig…

Free_electron, zeer interessant draadje. Ik was al van plan eens het zwaardere werk te gaan doen in plaats van lichte GAL/CPLDs.

Volgens we hier een beetje de lijn van wat je in je boek schreef? Waarbij ik dat boek (nog) niet heb.

Ik keek trouwens even waar je woont: fantastisch weer zeg. Geweldige plek om te wonen.

Op maandag 10 november 2025 16:08:57 schreef benleentje:
[...]Jammer. Ik vraag om een link omdat ik niet weet waar ik naar moet zoeken.
Als ik zoek op cyclone of max dan krijg ik op ali oude meuk te zien wat nog steeds duur is, of het is wat nieuwer maar heel erg duur.
En dan vind jij wel goedkoper producten waar ik dan wel nieuwsgierig naar bent.

Veel goedkoper dan deze kon ik ook niet makkelijk vinden:

https://nl.aliexpress.com/item/1005009019296669.html?pdp_npi=4%40dis%2…&

Dat zijn allemaal andere discussies en dragen niks bij aan leren werken met CPLD/FPGA en systemverilog. Gaan we niet meer voeren

Sorry het was ook niet echt de bedoeling

Ik wil er nog 1 ding over zeggen als laatste.
Zonder een redelijk betaalbaar bordje word het voor ons ook wel lastig om het geleerde in de praktijk te brengen. Gelukkig is er nu door rudig76 er een mooie gevonden en kan de aandacht wat mij betreft weer volledig naar dit mooie topic.

Op maandag 10 november 2025 17:31:16 schreef Hoeben:
Free_electron, zeer interessant draadje. Ik was al van plan eens het zwaardere werk te gaan doen in plaats van lichte GAL/CPLDs.

Volgens we hier een beetje de lijn van wat je in je boek schreef? Waarbij ik dat boek (nog) niet heb.

in grote trekken. het boek gaat dieper in op de materie en behandelt ook VHDL. het "master project" daar is een alarm klok met display sturing.

in dit topic is er geen "master" project. het is meer een jumpstart om je over de drempel te helpen en het verschil te begrijpen tussen een "programma" en "logica". Daar zit het knelpunt. veel mensen kunnen programmeren maar snappen niks van poortjes en flipflops en hoe je daar iets mee bouwt.
Een lijstje instructies opstellen voor ene processor is simpel. Logica maken werkt anders. Daar is geen "lijstje" wat stap voor stap uitgevoerd wordt.

dat is wat ik probeer te verhelpen. Daarom dat ik ook niet meteen in verilog duik met alle toeters en bellen.
Je moet eerst weten hoe de beschrijving van logica omgeet wordt in echte logica (het synthetiseerwerk). Eenmaal je dat begrijpt kan je aan de slag een idee om te zetten naar logica, en dat te beschrijven in verilog.

Verilog is gewoon een vervanger van schematjes tekenen met 74xx en 4xxx familie. met dat verschil dat je veel makkelijker dingen kan doen danmet die losse chipjes. al de bedrading zit binnenin en je bent niet gelimiteerd door wat er voorhanden is. 171 bit teller nodig ? geen probleem. met ttl wordt dat een spaghetti van jewelste.

Ik keek trouwens even waar je woont: fantastisch weer zeg. Geweldige plek om te wonen.

T'is wel verschrikkelijk warm in de zomer. Tot 44 graden. Flinke Airco nodig ( aangedreven door zonnepanelen en powerwalls van Tesla :) )
Nu zitten we volop in de "indian summer". Snacht's daalt het tot 12 graden maar tegen de middag hangen we weer op 26..27 graden. Je kan in de vroege avond, als het nog licht is, lekker buiten op het terras keuvelen. Het zal wel nog tot mid december duren. Januera tot maart zijn dan regen en mistig. Daarna is er weer volop zon. Alles staat hier nu ook nog volop in bloei. De vijgeboom draagt, de citrus is aan het rijpen. De passievrucht staat ook in volle bloei en de druiven zijn geoogst. Zelfs sommige van mijn bananebomen dragen dit jaar. Weet niet of ze nog gaan rijp zijn voor de winter maar ik heb 3 trossen.

goedkope development bordjes :

Altera MAX V CPLD Development Board - UnoProLogic, Earth People. op amazon / digikey/ mouser. 30$ heeft een flinke CPLD en de programmer aan boord.

Misschien dat ik eens een heel klein bordje met alleen een ftdi en een Max V in tqfp moet brouwen. 2 lagen, jlcpcb. alle 144 pin versies zijn volledig pin compatible dus je kan er naar eigen budget eentje opzetten van 3$ tot 15$... hmmm naam van het project : CPLD "Complete programmable logic Diaper". Hat, cape, shield, shoe zijn al in gebruik voor Arduino en rpi toestanden. Tijd om de CPLD gebruiker te "pamperen" met een "diaper".

quick check : lcsc heeft de 5m240in voorraad. is een flinke jongen om mee te beginnen. 3.42 $ ... de 5m570 hebben ze voor net onder de 6$ ...
Verrek. een FTDI2232 kost meer dan de cpld !

ik ga eens knutselen. een simpel breakout bordje waar alle i/o op 2.54mm pinheaders voor een breadbordje zit. en een usb programmertje aan boord moet makkelijk te maken zijn. je kan de 2 chips en wat passieven er laten opzetten bij JLCPCB. de connectors en soldeer je zelf maar.

ik zal eens knutselen. zwier het wel op github

[Bericht gewijzigd door free_electron op (30%)]

Eigenlijk zou Altera's AHDL moeten terugkeren voor beginners, was een heel fijne taal waarmee je heel makkelijk allerhande logica bouwstenen kon gebruiken en met elkaar kon verbinden. Eigenlijk was het het tekenen van een logisch schema met allerhande logische bouwstenen maar dan in een zeer leesbaar tekstformaat.

Als je in HDL programmeert (VHDL, Verilog, whatever) moet je niet meer in gates denken. Je schrijft functioneel op welk gedrag je wilt. Daarbij wel in het achterhoofd wat het _ongeveer_ aan hardware oplevert. Je kunt makkelijk een enorme wolk logica genereren met een paar regels code. Dus "denk hardware", maar begin niet met gates te denken. Dat nivo ben je mijlenver voorbij in HDL.

Op maandag 10 november 2025 17:54:15 schreef free_electron:
quick check : lcsc heeft de 5m240in voorraad. is een flinke jongen om mee te beginnen.

Ik vind dat "te klein" om serieus genomen te worden. Met 240 CLBs is het echt beperkt tot zeg "het vervangen van de losse TTLchips in een C64". Zodra je IETs meer wil zit het vol.

Ik zou eerder richting de 10k elementen willen hebben. Dan kan je dus een AVR d'r in plempen mocht dat nodig zijn. EP4CE10F17C8N met 10k elementen en kosten minder dan een tientje... dat gaat de goede kant op.

De 896 pins SOCs (met hard-ARM) beginnen bij 50 euro. Valt me nog mee. Maarja... een printje maken om dat aan te kunnen is ook een uitdaging.

EP4CE10E22I7N is er voor rond een tientje (12) in QFP144.

Op maandag 10 november 2025 20:13:23 schreef rew:
[...]Ik vind dat "te klein" om serieus genomen te worden. Met 240 CLBs is het echt beperkt tot zeg "het vervangen van de losse TTLchips in een C64". Zodra je IETs meer wil zit het vol.

Je wilt dus direct met een ferrari rijden ?
De meesten kunnen geneens kruipen of met de fiets rijden ! en jij wilt dat ze direct een AVR core (waar ga je die trouwens halen ? die core is geen open-source) induwen.

Zo werkt het niet.

De bedoeling van dit topic is inderdaad beginnen met wat TTL ic'tjes te vervangen en zo stapsgewijs te ontdekken hoe het werkt.

Eerst "hello world" leren programmeren. Een cursus maken waar ze als eerst programma een 3D virtual reality animatie maken op een array van nvidia kaarten heb je niks aan !

Trouwens, een processor core emuleren in een FPGA is helemaal onnozel. Je offert tonnen macrocellen op voor iets wat al kant en klaar bestaat. Hang hem er gewoon aan !

Op maandag 10 november 2025 20:31:36 schreef free_electron:
Trouwens, een processor core emuleren in een FPGA is helemaal onnozel. Je offert tonnen macrocellen op voor iets wat al kant en klaar bestaat. Hang hem er gewoon aan !

Mee eens, daar is een grote FPGA veel te duur voor.

Toch zou ik wel graag een keer een simpele CPU of ALU zelf willen maken in een FPGA. Gewoon om ervan te leren hoe een state machine werkt.
En ik denk je vandaag de dag dat je ook best een wat grotere FPGA kan nemen. Niet omdat je perse een Ferrari wilt maar omdat ik denk dat het kan zonder dat het duur word.

Voor een "Ferrari" heb je wel iets meer dan die 240 CLBs nodig he. Daarvoor zit ik meer aan een dikke Virtex te denken :-) In die zin ben ik het wel met rew eens, daarmee kun je niet veel bouwen. Als je een beetje wilt pielen is het wel ok, maar als je echt iets wilt maken dan kom je al gauw te kort.
Maar wel eens, waarom wil iedereen toch zo nodig een micro in een FPGA programmeren? Daar zit 'm helemaal de kracht van FPGAs niet. Het kan handig zijn in een systeem waar je een micro kunt besparen, als je de FPGA toch al hebt, maar pak anders gewoon de micro zelf (met een kleinere FPGA ernaast).

@benleentje: ik weet niet wat je met statemachine bedoelt, maar mijn statemachines (FSMs) zijn echt geen microcontrollers, terwijl sommige best complex zijn.

[Bericht gewijzigd door flipflop op (12%)]

Op maandag 10 november 2025 20:51:50 schreef benleentje:
Toch zou ik wel graag een keer een simpele CPU of ALU zelf willen maken in een FPGA. Gewoon om ervan te leren hoe een state machine werkt.
En ik denk je vandaag de dag dat je ook best een wat grotere FPGA kan nemen. Niet omdat je perse een Ferrari wilt maar omdat ik denk dat het kan zonder dat het duur word.

Als je nog nooit een state machine hebt gemaakt en niet weet hoe dat moet begin dan heel simpel en niet heel complex met een state machine voor een CPU...

Ik begrijp het voorstel van free met die 5m240 om mee te beginnen!
Als kind stap je ook niet meteen op een elektrische fiets om op te leren fietsen. Om de basisbeginselen van CPLDs en FPGAs te leren (en te onderzoeken of het echt wel iets voor je is om je verder in te verdiepen), heb je geen dikke chip nodig. Toen je met elektronica begon, was dat ook met 'maar' fietslampjes en batterijen. Wat later kwamen daar weerstanden, condensatoren een LEDs bij. En daarna pas ICs. Beginnen met iets nieuws is beginnen in het klein. Als je de basis onder de knie hebt, kun je opschalen. Volgens mij is dát de gedachte achter het voorstel van free.
En dan kun je wel zeggen: "met een grotere chip kan ik later meteen veel meer", maar weet je nu dan al dat dat later ook gaat komen? (Wat betreft interesse, ontwikkeling in begrip van de materie, ....)

Op maandag 10 november 2025 20:12:58 schreef flipflop:
Als je in HDL programmeert (VHDL, Verilog, whatever) moet je niet meer in gates denken. Je schrijft functioneel op welk gedrag je wilt. Daarbij wel in het achterhoofd wat het _ongeveer_ aan hardware oplevert. Je kunt makkelijk een enorme wolk logica genereren met een paar regels code. Dus "denk hardware", maar begin niet met gates te denken. Dat nivo ben je mijlenver voorbij in HDL.

Dat abstractie nivo van denken vormt juist het probleem bij beginners. Je kunt de syntax van een HDL taal wel leren en snappen en daarmee je logica functioneel omschrijven maar daarmee maak je nog geen werkende logica zoals je die voor ogen had. Bij VHDL is dat helemaal een drama als je niet weet aan welke VHDL constructies je je moet houden om er synthetiseerbare (FPGA) logica van te maken, als je de vertaalslag van VHDL naar de onderliggende correcte (FPGA) logica niet beheerst dan gaat het niet werken en wordt het niks. Bij Verilog is dat probleem kleiner omdat die taal korter bij de logica staat en je makkelijker weet wat dat aan (FPGA) logica na synthese oplevert.

Voor beginners is een taal als AHDL een instap taal om logische componenten makkelijk aan elkaar te kunnen knopen en een gevoel te krijgen hoe een FPGA werkt. Wat je in AHDL aan logica opschrijft krijg je ook als logica in de FPGA, er is geen abstractie nivo.

Voor degene die eens een simpele state machine wil maken adviseer ik neem een kleine GAL en probeer daar eens simpel looplichtje mee te maken als dat lukt stap dan over op een FPGA...

Op maandag 10 november 2025 20:51:50 schreef benleentje:
Toch zou ik wel graag een keer een simpele CPU of ALU zelf willen maken in een FPGA. Gewoon om ervan te leren hoe een state machine werkt.

Geduld .. state machienes komen nog aan bod hier....

eerst tellertjes maken, en schuifregistertjes , en die dan controleren met een statemachiene. en dan een dynamische statemachiene waar er subcycles in zitten. ( zie dit als subroutines : een mini state machine in een andere. ideaal om instructiesets te maken. vergelijk het met microcode )

komt allemaal nog ....
geduld....

maar tegen dan zul je een FPGA nodig hebben. Die dingen lukken niet meer in een CPLD.

Een ALU is niet moeilijk : een tipje van de sluier



case (rom_data_in)
op_NOP : ALU_reg <=ALU_reg ;
op_AND : ALU_reg <=Alu_reg & B_reg;
op_OR :  ALU_reg <=Alu_reg | B_reg;
op_SHL : ALU_reg[7:0] <= {ALU_reg [6:0],0}
op_SHR : ALU_reg[7:0] <= {0,ALU_reg [7:1]}
op_ADD : ALU_reg <= Alu_reg + B_reg
op_JMP : rom_ADDR_bus[15:0] <= {ALU_reg,B_reg}
op_LDA :  ALU_reg <= rom_data_in;
op_LDB : B_reg <=rom_data_in;
op_STOR : begin
                    data_out <=ALU_reg;
                    write <=1;
                    end
op_DPTR : ram_ADDR_bus[15:0] <= {ALU_reg,B_reg}
  default : write <=0;            
endcase
rom_addr_bus <=rom_addr_bus +1

zie je het al komen ? de instructieset is niks anders dan een grote select case die, afhankelijk van het byte dat op rom_data_in staat dingen gaat doen in A en B register. (dit is een klassieke architectuur zoals ene 6502 of 8051, geen register based ding zaols een ARM. het is ook een HARVARD machine met gescheiden ROM en RAM space.

er komt nog wel wat ander spul bij kijken maar het is heus niet complex. er komt alleen nog een tweede case die beslist of we ram_address_bus moeten incrementeren of niet na het operand. (alleen bij STOR of READ opdrachten)

Op maandag 10 november 2025 21:52:39 schreef MNM(tm):
En dan kun je wel zeggen: "met een grotere chip kan ik later meteen veel meer", maar weet je nu dan al dat dat later ook gaat komen? (Wat betreft interesse, ontwikkeling in begrip van de materie, ....)

De nagel op de kop. Je koopt toch ook geen ferrarie om te leren rijden ? Een ouwe roestbak werkt even goed en je scheurt er je broek niet aan als je hem in de sloot rijdt.

We gaan geen ontwikkel bord van 500$+ kopen voor iets waar je misschien nooit iets gaat mee doen omdat je het te moeiljijk vindt.

De instapdrempel moet laag zijn. Het bordje wordt goedkoop , en , aangezien al die tqfp100 verpakking van de MAX V pin compatibel zijn kan je er zelf op zetten wat je wilt. De goedkoopste CPLD met 80 flipflops kost net geen 3$ ... de grootste heeft 500+ flipflops. en er zijn verschillende tussenstappen , elk met een oplopende prijs.

het naakte bord bij JLCPCB wordt spotgoedkoop. ik mik op iets wat 1/4 eurokaart wordt.
Standaard pinheadertjes dat je op een breadboard kan prikken , of met van die dupont draadjes kan werken
Standaard USB connectortje met FTDI aan boord om de CPLD te kunnen laden.
8 drukknopjes en 8 ledjes. een clock oscillator en een rotary encoder om mee te prutsen.(die prikken niet makkelijk op een breadboard)

ik gebruik een ft2232. het eerste kanaal hangt aan de JTAG van de CPLD. het tweede kanaal staat in MPSSE mode en emuleert een 8051 bus. ( address/data/read/write). zo kan je de cpld lezen en schrijven vanuit de computer. Er kan iemand een visual basic of qbasic of iets anders maken om bytes te lezen en schrijven. Graag iets interpreted maar geen python. ik wil geen gefoefel met case sensitivity en whitespace sensitivity. t'moet simpel zijn. der zijn genoeg gratis basic intepreters die met DLL's omweg kunnen

voorlopig schema volgt zo dadelijk

Op maandag 10 november 2025 20:31:36 schreef free_electron:
en jij wilt dat ze direct een AVR core (waar ga je die trouwens halen ? die core is geen open-source) induwen.

Ehh. jawel, die kan je zo downloaden. Nee, niet van atmel (nu microchip), maar er is wel een "voldoende compatible" ding dat je code met de avr-gcc kan compileren en in je FPGA kan stoppen.

Op dinsdag 11 november 2025 03:53:11 schreef free_electron:
ik gebruik een ft2232. het eerste kanaal hangt aan de JTAG van de CPLD. het tweede kanaal staat in MPSSE mode en emuleert een 8051 bus. ( address/data/read/write). zo kan je de cpld lezen en schrijven vanuit de computer.

Is een Altera ByteBlaster o.i.d. niet handiger in gebruik i.c.m. Quartus?

Dan zit je weer met een losse programmer. En dat is gedoe. En de box-header die je dan voor de JTAG verbinding nodig hebt, neemt zowat net zo veel ruimte op de PCB in beslag als een FTDI 2232 en een USB connector. (Maar is wel veel hoger!)
En als je dat development bordje in de kast knikkert, omdat je er weer ff klaar mee bent, en die dan na maanden weer eens tegenkomt en denkt: "oh ja, daar ga ik weer eens mee verder!", dan kun je vervolgens weer het lazerus gaan lopen zoeken naar die losse k#t-programmer.
Vooral een development bordje moet m.i. gewoon all-in zijn. Niks geen externe zooi om er wat mee te kunnen doen. Als je proof-of-concept code op het development bordje klaar is, kun je de boel in de FPGA van het uiteindelijke project(je) stoppen. Dat je dáár dan alleen maar een box-header JTAG op hebt, is prima. Als het goed is, hoef je dan toch maar één keer te proggen. (Ik zou dan zelfs heel die box-header achter wege laten en alleen maar een test-pad array op de PCB designen.)

[Bericht gewijzigd door MNM(tm) op (32%)]

Is een Altera ByteBlaster o.i.d. niet handiger in gebruik i.c.m. Quartus?

Ach de ByteBlaster, ik heb hem zoveel gebruikt!

https://live.staticflickr.com/65535/53542390687_43ebb955a2_c.jpgcyclone EP1C3T144 LCD4x40 by Frans, on Flickr

Hier is hij ook nodig om een losse PLCC chip te testen:

https://live.staticflickr.com/65535/54248271458_394ebb861a_c.jpgEPM7064AELC44-10 test pcb by Frans, on Flickr

Dit boardje heeft ook de ByteBlaster nodig om hem te programeren:

https://live.staticflickr.com/65535/54039659743_0f15289f2c_c.jpgMAX10-eval-kit by Frans, on Flickr

Ik heb heel veel soorten boardjes gekocht en deels zitten ze nog in mijn toepassingen. Zelfs met het Lego protocol erin geflapt om zo heel veel diverse modules aan te sturen. Hierbij de werkende proefopstelling:

Eentje met de cyclone10 versie:

https://live.staticflickr.com/65535/53673247194_a90dae972b_c.jpgFischertechnik + Lego + FPGA by Frans, on Flickr

Eentje met de DE10Nano versie:

https://live.staticflickr.com/65535/53842859086_c3f5872c75_c.jpgDE10-nano + up to 8 Lego devices by Frans, on Flickr

Het is dank zij "free_electron " vele jaren geleden, dat ik toen overgeschakeld heb op Verilog. Ervoor was het schema entry. Ik heb hier al een schat aan boards liggen....
Dank U free_electron!

Met de ByteBlaster kun je de FPGA programmeren maar ook de werkende FPGA debuggen / signalen proben in de chip en die binnenhalen in Quartus als waveform toch?
Ik zou dat niet willen missen bij een ontwikkeling...

Zou het niet gewoon mogelijk zijn om dat ook gewoon via een FTDI 2232 in MPSSE mode te doen?