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

Ik geef toe de Trenz downloads zijn niet makkelijk te vinden maar het staat er wel.

Op zondag 16 november 2025 19:56:57 schreef free_electron:
Die driver is trouwens niet van hen maar van ARROW.

De "MAX1000 User Guide" op de site is ook van Arrow.

Wie heeft nu wat gemaakt? Trenz of Arrow?

Welk bord je wil mee gaan werken maakt mij niks uit. Vandaar dit ik die twee ontwerpjes van mij ook "public domain" heb gemaakt (onder The unlicense). Al die restricties van andere "open hardware en creative commons" ergeren mij ook alleen maar. Als je iets echt wil vrijgeven , zet dan GEEN restricties.

Anyway, allemaal niet terzake, andere discussie waar ik ook geen zin meer in heb.

Ik ga de twee versie laten maken bij JLCPCB omdat ik experimenteerbordje nodig heb voor de 5M240 voor een ander projectje waar ik die wil gebruiken (Curvetracer). Ik kan niet verder zonder de hardware te kunnen testen.

Op zondag 16 november 2025 20:21:54 schreef Bobosje:
[...]

De "MAX1000 User Guide" op de site is ook van Arrow.

Wie heeft nu wat gemaakt? Trenz of Arrow?

De FTDI eeprom image bevat de string "ARROW" ..... zegt alles

In dit topic zijn er meerdere user met driver problemen. Antwoord van Trenz : wij mogen dat niet verdelen. is eigendom van ARROW.... download hun tool:
https://forum.trenz-electronic.de/index.php?topic=740.0

[Bericht gewijzigd door free_electron op (29%)]

Op zondag 16 november 2025 20:23:44 schreef free_electron:
De FTDI eeprom image bevat de string "ARROW" ..... zegt alles

In dit topic zijn er meerdere user met driver problemen. Antwoord van Trenz : wij mogen dat niet verdelen. is eigendom van ARROW.... download hun tool:
https://forum.trenz-electronic.de/index.php?topic=740.0

Trenz een dozenschuiver dus...

Op zondag 16 november 2025 20:28:14 schreef Bobosje:
[...]

Trenz een dozenschuiver dus...

Ik denk dat de hardware door trenz gemaakt is voor arrow... zijn waarchijnlijk een OEM .

Vond dit : https://www.glgprograms.it/?p=elet/max1000. Op dat bovenste beeld zie je het Trenz board met het ARROW logo in silkscreen.. en het zit in een Arrow doos.

misschien was het een partnership. Allemaal speculatie natuurlijk.

Ik zie dat Arrow er meer dan 300 op vorraad heeft. misschien dat ik er een paar bestel om mee te spelen

Op zondag 16 november 2025 20:33:16 schreef free_electron:
[...]

Ik denk dat de hardware door trenz gemaakt is voor arrow... zijn waarchijnlijk een OEM .

Vond dit : https://www.glgprograms.it/?p=elet/max1000. Op dat bovenste beeld zie je het Trenz board met het ARROW logo in silkscreen.. en het zit in een Arrow doos.

misschien was het een partnership. Allemaal speculatie natuurlijk.

Ik zie dat Arrow er meer dan 300 op vorraad heeft. misschien dat ik er een paar bestel om mee te spelen

Ik snap eigenlijk niet dat er driver issues zijn die Arrow moet oplossen? Dat FPGA bordje wordt toch via een FTDI geprogrammeerd en die driver is dan toch een standaard driver van FTDI zelf?
Misschien dat ik iets mis in deze.

Enerzijds, weet ik nog niet of dat trenz bordje ook een FTDI aan boord heeft. Maar zelfs als dat zo is, dan kan het nog dat ze de pinout net anders hebben gekozen en je dus "iets" met een driver moet doen om eea te kunnen programmeren. Free elektron probeert de pinout van een eigen-bordje-van-altera te reproduceren, zodat je dat gezeik met " er meot met een extern programmatje geprogrammeerd worden" voorkomen wordt.

Er zijn gewoon toch geen problemen om dit te programmeren. Net zoals je met Altera eenmaal ook de programmer moet installeren moet je het eenmaal doen voor hun driver prog. Verder is er geen verschil, gewoon Quartus prog tool aanklikken en vooruit.

Quartus trekt zich niets aan van wat je fysiek gebruikt om de chip te laden. Die GUI communiceert een bepaald protocol. ( waarscjinlijk is dat gewoon een SVF of JAM player ).
De programmer driver is verantwoordelijk omdat fysiek op de JTAG pinnen te krijgen.
Als je de altera USB blaster gebruikt levert Altera de DLL aan die tegen hun USB blaster praat.
Bij dit Trenz board heb je die ARROW driver nodig.
Bij andere implementaties iets anders.

Die drivers praten op hun beurt allemaal tegen de Dxxx driver van FTDI.
De Altera DLL checkt de eeprom die aan de FTID chip hangt om te kijken of je een echte USB blaster hebt ( daar zit een FT245 in en een kleine CPLD omdat de FT245 geen MPSEE blok heeft dat zelf JTAG kan doen.)
Die ARROW driver checkt dat daar ergens in de eeprom "ARROW" in staat. Verder maakt het geen fluit uit omdat de FD2232H een JTAG motor aan boord heeft. Wat wel belangrijk is om weten is dat op dat Trenz bord de JTAG op het tweede kanaal zit.

Er zijn andere drivers van EarthPeople en anderen.

De interessantste is die van Marsohod ( open source ) https://marsohod.org/downloads/category/16
Die is universeel , heeft geen nood aan de eeprom data , en je kan opgeven op welk kanaal je JTAG poort zit (door middel van een simpele text file waar je opgeeft welk kanaal je gebruikt en wat de gewenste clocksnelheid is.) die driver ondersteunt de FT2232H en FT2242H.
Zo lang je een FT2232 aan je computer hangen hebt werkt het.
Op hun beurt praten al die dingen weer tegen de Dxxxx driver van FTDI zelf.

De Marshohod driver is er ook voor linux (geen idee hoe het daar werkt. zal wel niet met een "dll" zijn)

Toen ik zocht op FT2242H kreeg ik:

The FT2242H is a dual-channel USB-to-serial converter chip from FTDI

van de AI te horen... Hallucinatie: op de FTDI site bestaat ie niet.

Ik heb printjes waar de FT4222H op zit. Die bestaat wel. Die bedoel je denk ik.

Even een vraag.
Kan je een CLPD/FPGA ook gebruiken om een LCD display aan te sturen?
Het gaat dan om een kaal LCD display.

Welke type LCD bedoel?

Een LCD met een of meerdere 7-segments layout of een volledig grafisch (dots in rijen en kolommen) LCD?
Een LCD met of zonder driver-chip op het glas of op het PCB?
Passief of actief LCD (TN TFT etc.)?

In principe kan het maar zul je bij een LCD zonder driver-chip nog analoge electronica erbij moeten hebben om de juiste analoge spanningen te kunnen genereren.

Het is een LCD uit een hometrainer zonder driver chip. Totaal 44 pinnen via een zebrastrip. Zonder verlichting.

nog analoge electronica erbij moeten hebben om de juiste analoge spanningen te kunnen genereren.

Ik dacht dat via een soort van blokkengolven ging die als je steeds wisselt je de juiste spanning kreeg voor een LCD. maar veel meer als dat weet ik er niet van.

De driver chip zit op de PCB maar daar zit ook het hele programma in. Ik had gehoopt dat er een aparte CPU in zou zitten en ik wil zelf mijn eigen data naar het display kunnen sturen
Maar ik wil dit topic niet te veel vervuilen en wil voor nu alleen een ja of nee antwoord.

[Bericht gewijzigd door benleentje op (16%)]

Waarschijnlijk is dat een passief LCD met segmenten.
Een directe aansturing vanuit de FPGA naar dat type LCD is niet mogelijk zonder externe analoge circuits die moeten zorgen voor de juiste spanninglevels voor de "rijen" en "kolommen" van het LCD. Deze spanningslevels komen vrij nauwkeurig en zijn niet simpelweg blokspanningen van wel of geen spanning.
Antwoord, nee.

Waarschijnlijk krijg je er wel soort van beeld op, maar niet optimaal. Zo'n custom chip is een microcontroller met uitgangen die specifiek gemaakt zijn om LCD aan te sturen. Zo had je ze ook voor VFD.

Als het puur een passief LCD is en de spanningslevels zijn te hoog dan worden alle segmenten zwart (aan toestand) of bij te weinig spanning blijven alle segmenten helder (uit toestand).
Bij puur passieve LCD's gaat het erom dat een willekeurig segment in de display in de tijd gezien exact de juiste RMS spanning moet krijgen voor een aan toestand of voor een uit toestand en die RMS spanning moet worden opgebouwd over een volledige multiplex over alle "rijen". De benodigde RMS spanningen voor een segment aan of een segment uit liggen heel kort bij elkaar en zijn afhankelijk van het gebruikte type LC materiaal en de cel-gap in de display.
Verder mag je geen blijvende DC opbouwen in de segmenten en moeten de "rij" en "kolom" signalen per volledige multiplex worden geinverteerd om dit te voorkomen.
Zomaar een blokspanning van bijv. 3,3V erop zetten gaat bij dit type LCD's niet werken.

De LCD driver chips hebben dus naast dat ze de polariteit van de segmenten steeds omwisselen ook een generator aan boord om de +/- 10V gatespanning te maken. Die +/- is dubbelzinnig: Zowel "ongeveer" als "Zowel plus als min 10V".

Je kan tegenwoordig voor ongeveer een euro een full color IPS display kopen op aliexpress (klein maar fijn). Waarom dat bestaande ding willen hergebruiken?

Waarom dat bestaande ding willen hergebruiken?

Het leek me een leuke uitdaging voor om te doen. Meer niet. en dit display past precies in de behuizing om een andere even goed passende te vinden is ook niet makkelijk.
En ik hergebruik dan liever een behuizing dat dat ik alles nieuw moet maken.

(klein maar fijn)

70 x 135mm.

Maar ik ga nu een anders passend display zoeken en dit draadje is voor mij nu afgesloten.

Hier staat het mooi uitgelegd :
https://www.pacificdisplay.com/lcd_multiplex_drive.htm

Je hebt per pin een analoge multiplexer nodig die een van de biasspanningen kan zetten. ( voor een display met 4 commons zijn er al 5 analoge waardes nodig). dat wordt een warboel van 4052 chipjes...

Ik heb een project aangemaakt. Ik heb het "test1" genoemd en aangegeven dat m'n toplevel "test1" heet.

Dan heb ik de volgende verilog geschreven.



module test1 (clk, out);
input clk;
output [31:0]out;

counter ctr (clk, out);

endmodule



module counter (  input clk,               // Declare input port for clock to allow counter to count up               input rstn,              // Declare input port for reset to allow the counter to be reset to 0 when required
                output reg[31:0] out);   // Declare 32-bit output port to get the counter values

  // This always block will be triggered at the rising edge of clk (0->1)
  // Once inside this block, it checks if the reset is 0, if yes then change out to zero
  // If reset is 1, then design should be allowed to count up, so increment counter
  always @ (posedge clk) begin
			out <= out + 1;
  end
endmodule

Ik click dan op "compile" en krijg "0 warnings 0 errors". Klinkt goed.

En als ik dan de outputs zo wil assignen dat ik out20...28 ergens uitkomen waar ik leds op kan zetten, dan zou ik verwachten dat ik bij de "nodes" mijn clk en "out" kan vinden. Maar niets van dat alles!

Als ik dan google op wat dit zou kunnen zijn is de enige hulp die ik kan vinden: maak je design file toplevel van het ontwerp en voila! het werkt! ... Nou bij mij dus mooi niet.

Wat doe ik verkeerd?

(Als ik het goed heb, dan heb ik een 50M clock op pins 24 en 25).

hoe heb je dat pin assignment gedaan ?

Ik maak mijn toplevel altijd een schema. Daar plaats ik de input en output pinnen en gebruik dan de pin planner om de effectieve pinnen en type / drivestrength / bushold toe te kennen.

En waarom maak je een "wrapper" round die counter module ? smijt al die tussenstappen daar eens uit.
de comments psreken ook over "reset", waar is dat signaal ? AI gegenereerde rotzooi ?

[Bericht gewijzigd door free_electron op (30%)]

Ik heb het gewoon zo even geschreven:


module test1
(
input 	        clk,	// clock input
output [7:0]	leds	// 8 leds output
);
reg[31:0] out;
assign leds = out[27:20];

always @ (posedge clk) 
begin
	out <= out + 1;
 end
endmodule

en compileren
resultaat:


Flow Status	Successful - Mon Nov 24 19:28:46 2025
Quartus Prime Version	25.1std.0 Build 1129 10/21/2025 SC Lite Edition
Revision Name	test1
Top-level Entity Name	test1
Family	Cyclone IV E
Device	EP4CE6E22C8
Timing Models	Final
Total logic elements	28 / 6,272 ( < 1 % )
Total registers	28
Total pins	9 / 92 ( 10 % )
Total virtual pins	0
Total memory bits	0 / 276,480 ( 0 % )
Embedded Multiplier 9-bit elements	0 / 30 ( 0 % )
Total PLLs	0 / 2 ( 0 % )

In de pin planner zie je de pinnen, die kun je nu een andere pin locatie aangeven en even hercompileren..

Op maandag 24 november 2025 19:21:23 schreef free_electron:
hoe heb je dat pin assignment gedaan ?

Ehhh..... weet ik veel? ik heb quartus opgestart, nieuw project gemaakt. Directory aangegeven, project test1 genoemd en dit verilog ding zitten typen.

Ik maak mijn toplevel altijd een schema. Daar plaats ik de input en output pinnen en gebruik dan de pin planner om de effectieve pinnen en type / drivestrength / bushold toe te kennen.

Tja, ik heb een toplevel verilog ding. Maar goed. Ik zou dus een toplevel schema kunnen maken en dan die "test1" module wegmikken?

En waarom maak je een "wrapper" round die counter module ?

Ehh. Ja zo had ik het eerst. Dat werkte niet. Niet dat dit verbetering brengt, maar je probeert zo eens wat.

smijt al die tussenstappen daar eens uit.
de comments psreken ook over "reset", waar is dat signaal ? AI gegenereerde rotzooi ?

Nee, ergens een "verilog example" uit een blog gepeuterd.

Ik heb besloten dat ik het vooralsnog eenvoudiger vind zonder de "reset", dus die heb ik er uitgehaald. Ik kan hem wel weer terugzetten als dat nuttig is, maar ik denk niet dat het iets uitmaakt voor het huidige probleem.

OK. Reset terug ingevoerd, wrapper verwijderd:


module test1 (  input clk,               // Declare input port for clock to allow counter to count up               input rstn,              // Declare input port for reset to allow the counter to be reset to 0 when required
                intput rst, 
                output reg[31:0] out);   // Declare 32-bit output port to get the counter values

  // This always block will be triggered at the rising edge of clk (0->1)
  // Once inside this block, it checks if the reset is 0, if yes then change out to zero
  // If reset is 1, then design should be allowed to count up, so increment counter
  always @ (posedge clk) begin
     if (rst) 
	      out <= 0;
		else
			out <= out + 1;
		endif
  end
endmodule

(het origineel had een nrst, ik heb "eigen fantasie" er nu een rst van gemaakt.)

@fotoopa: Ik heb even een nieuw project aangemaakt, test2. (ik heb dit keer "systemverilog" oid aangegeven.
Ik heb dan new-Verilog gedaan, jou code er in geplakt en op compile geclickt.

Ik zie dan:

maar niet de uitvoer die jij ziet. Waar moet die komen?

Ik heb ook een tabje: "compilation report - test2" en daar staat in "data not available".

tools/assignments/Pin_Planner

aanklikken.