Tutorial: Eerste verilog program met Quartus.

Er zijn al verschillende CO gebruikers die een of andere Altera board hebben aangekocht met de bedoeling te starten met FPGA of CPLD toepassingen. Om vooral de beginners een handje toe te steken bij hun eerste toepassing heb ik een kleine tutorial geschreven bedoeld voor de Altera chips met de Quartus tool.

Deze tutorial tracht de elementaire handelingen te beschrijven om vanaf null een verilog programma aan te maken, te compileren en in de chip te programeren. Ik heb het MAX II boardje gebruikt als voorbeeld maar met enkele wijzigingen van device en pinouts kan dit voor om het even welke board toegepast worden. Het programma opzich stel weinig voor, het is vooral de bedoeling geweest de verschillende stappen op te geven die nodig zijn om je eigen project op te bouwen.

Het "proef1" projectje bevat slechts 8 leds, 4 drukknoppen en 1 clock van 50MHz. 4 leds worden toegekent aan de 4 drukknoppen, de 4 andere leds worden toegekent aan een 4 bit binaire counter. De leds geven de toestand van deze binaire counter weer en er wordt een 1 sec clock gemaakt vanuit de 50MHz clock om die 4 bit binaire teller te sturen.

Ik hoop dat een aantal Altera board bezitters hiermee aaangespoord worden om toch eens te starten.

De tutorial staat Hier

De oudere voorbeelden staan hier

Leuk!

Zelf heb ik nog geen bordje, maar het lijkt mij wel leuk speelgoed om eens mee te beginnen.

Geweldig, ga van het weekeinde er meteen aan beginnen.
Zit er al heel lang tegen aan te hikken omdat ik niet goed weet hoe te beginnen.

Bedankt!

Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....

fotoopa,

Hartstikke bedankt voor die tutorial en die voorbeeld oefeningen. Ik heb hier een MAXII micro kit liggen maar deze blijft helaas in het doosje liggen omdat ik niet weet hoe ik moet beginnen ermee.

Echt waar, bedankt !

En de eerste proef is een succes.

Ik moest na het installeren van Quartus II 8.1 nog wel de driver installeren van de MAXII, maar de pagina http://www.altera.com/support/software/drivers/usb-blaster/dri-usb-bla… was volledig en duidelijk.

Nu heb ik in iedergeval een idee waar ik wat moet zoeken!
:D

Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....

@EdwinNadorp,

Ja Quartus zit hier al 4 jaar op mijn XP systeem, eenmaal hij geactiveerd is moet je bij een update niets meer doen en gaat het vanzelf. Maar ik zie dat je de goede methode gevolgd hebt om deze kleine probleempjes op te lossen.

Eenmaal dat je een basis ontwerp draaiende heb is het veel gemakkelijker om het uit te bereiden naar eigen behoeftig. Maar ik weet dat de eerste stappen met dergelijke onbekende tools altijd wat afschrikken en daarom deze korte tutorial.

Ik ga trachten vandaag eens 1 of 2 zeven segment displays aan te sluiten zonder multiplexen, gewoon ieder segment aan een I/O pin via een 470 ohm weerstand. Dan is er meteen een digitale uitlezing waar wat toepassingen kunnen voor geschreven worden.

Een alternatief is de 6x7 segments display aansluiten van de samenkoop via "MrGAmba" maar ik zelf heb zo geen boardje destijds besteld.

Op de root van mijn FPGA website staat nu ook de eerste toepassing van een AVR ATtiny45 controller. Het is mijn IR detector van mijn setup voor vliegende insecten. Schema en kode staan erop maar natuurlijk altijd assembler :) De communicatie tussen AVR en MAX II board is via SPI met een SPIclk van 2MHz.

Op 9 januari 2009 15:43:56 schreef bassie-:
Leuk!

Zelf heb ik nog geen bordje, maar het lijkt mij wel leuk speelgoed om eens mee te beginnen.

Stuur maar een mailtje, heb er een liggen die ik niet gebruik

Ondertussen staat proef2 ook online. Deze proef bevat een extern aangesloten 2 digits 7 segments display. Verbinding loopt via een 40 polige flatcable naar de breadbord. Door de juiste pinkeuze is de aansluiting van 16 weerstanden van 220 ohm rechtdoor en eenvoudig. Er is geen externe voeding nodig want alles gaat over de USB. Alle routines zitten in een archieffile. Hierdoor moet je enkel het project restoren om te kunnen gebruiken. Alle modules zitten erin, ook de bcd secondenteller en de omzetting naar de 7 segment display's. stuur je 4 bit binair dan is de uitlezing als hex waarde. De gebruikte display's zijn comon cathode, met gemeenschappelijke GND en iedere I/O pin stuurt over een 220 ohm weerstand een segment. Ook DP is ondersteunt.

Link naar de proef2 tutorial staat hier

bedankt! Als je nog een proef gaat verzinnen met een ADC houd ik me aanbevolen.

Voor een ADC moet je minstens iets bijplaatsen want een CPLD zelf bevat opzicht niets. Ik heb het wel al gedaan via een PWM naar een opamp en dan een comparator terug binnen.

Gemakkelijker gaat het met een bestaande ADC met SPI of I2C. Ook 1wire gaat maar telkens moet je een chip bijplaatsen. Daarom heb ik op mijn CPLD toepassingen een AVR controllertje (8 pins) 1 weerstand en 1 C 'tje om de DAC te maken. Dit staat ook al op mijn web. DAC via een AVR kost ongeveer 1 euro

free_electron

Silicon Member

@foto_opa gebruik je al Quartus 8.1 ? ik heb een bizar probleme daarmee. de graphics viewer werkt niet of half. Als ik een schema open krijg ik ene transparante venster ( ik zie mijn windows desktop) maar geen schema. hetzelfde mankement zit in de netlist viewers. heel vreemd.
soms werkt het. soms niet. soms half ( ik krijg half schemr en thats it. )

Ik draai wel in hoge resolutie (3360 x 1050). Ik heb 7.2 geinstalleerd en die werkt perfect....

- edit- Opgelost. in nView (nVidia controle paneel) heb ik de 'transparency when dragging window' afgezet. (wanneer je Een venster verplaatst wordt dat venster half transparant zodat je ziet wat er achter zit) Dat lost het probleem op.
Nu draait het correct. Blijkbaar ene bug in hun renderer.

Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM

@free_electron,

Idd, versie 8.1 en voorlopig zonder problemen op winXP. Maar ik zie dat je het al opgelost hebt.
Ik zou normaal ook een groter scherm gebruiken samen met een nieuwe computer maar gezien ze die nog enkel met Vista willen leveren wacht ik nog wat langer. Ik ben over die Vista niet direct te spreken.

@Sjees,

Proef4 zal waarschijndelijk een 4 ch ADC input zijn op het MAX II boardje. Ik heb dit al gemaakt met een ATtiny26. Het plaatsen op de breadboard zal vrij eenvoudig zijn. Maar eerst komt proef3. Dit zal een LCD display zijn op de MAX II board. Anders kan ik de resultaten van proef4 met 4 analoge waarden niet goed weergeven. De display zal eerst het 4x20 char zijn, gewoon omdat ik geen 2x16 char meer beschikbaar heb. Maar downscalen van 4x20 naar 2x16 is veel gemakkelijker dan omgekeerd.

Ik heb ook nog de rotary encoders. Die routines zijn al geschreven geweest in verilog. Ik ga eens zien in welke proef ik ze erbij kan plaatsen. Maar eigenlijk vind ik de oplossing met een AVR controllertje en potmeters beter geschikt voor bepaalde regel instellingen. Voordeel van een potmeter is dat hij zijn laaste instelling behoud zonder dat je daar iets moet voordoen. Met een ATtiny26 kan tot 11 channels ADC omzetten en kost slechts 1.67 euro. Communicatie naar MAX II boardje via 3 pinnen (SPI). In de CPLD board is dit kinderspel om de data binnen te nemen.

free_electron

Silicon Member

Op 12 januari 2009 08:02:55 schreef fotoopa:
@free_electron,
Idd, versie 8.1 en voorlopig zonder problemen op winXP.

Win 7 he Win 7. ik heb hem draaien op 2 machienes. tot nu toe zonder vodden.

Probleme met quartus is nog maar half opgelost. Als ik 2 of 3 schemas openzet gaat het nog fout. Ik vermoed dat het een probleem is met de driver van de grafische kaart (8800GTX ik heb er 2 1680x1050 22 inch monitoren op hangen)

Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM

Ik gebruik hier 1 scherm op 1680x1050 pixels. Videokaart weet ik niet juist, het is een medion computer, nu bijna 4 jaar oud, maar die doet nog steeds wat hij moet doen.
Ik hoop echt dat win 7 het beter gaat doen maar eerst zien want de basis is en blijft toch Vista. Nieuwe aankoop zal vermoedelijk maar begin 2010 zijn tenzij deze configuratie mij in de steek zou laten.

goed bezig!

Moet wel even wachten totdat ik thuis ben om de code te restoren en te bekijken. :(

Vond van proef 1 die over-type oefening juist handig, uiteraard type fouten gemaakt, maar je bent daardoor wel meer met de code bezig en het hoe en waarom.

Gelukkig heb ik wel de bordjes van MrGamba liggen, moet alleen die header nog op m'n maxII solderen dus kan (bijna) direct verder!

Ik begrijp dat de weerstand gekozen is om max 15mA door de led van het segment te laten gaan (3,3V en 220 Ohm). Ik meen dat je op de poort van de MAX kan aangeven dat hij 16 of 8 mA moet kunnen leveren. Kan iemand mij vertellen of die 8mA en of 16mA een limiet is wat geleverd wordt of moet er rekening gehouden worden dat je niet meer afneemt?

Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....

De stroom is geen 15mA maar lager. Je moet nog de ledsegment spanning aftrekken. Ik vermoed dat voor de rode leds dit rond de 1.7V zal zijn, de max stroom wordt dus 3.3 - 1.7 = 1.6V met 220 ohm wordt dit ongeveer 7 mA.

Iedere I/O pin mag max 25 mA trekken maar er is ook nog een beperking voor de totale stroom per groep. Je kunt de drive strenght ook opgeven en dan is de stroom lager voor een gegarandeerde output level. Deze beperking is niet instelbaar voor bepaalde I/O settings zoals PCI I/O standaard juist omdat die standaard op 20 mA gegarandeerd is. Een lagere stroom instellen verminderd je noise op de chip maar verlaagd ook de flanksteilheid van het signaal (trager).

Het is de moeite om die 40 pins header op te solderen. Die is trouwens compatieble met de DE1 board. Degenen die ook deze board bezitten kunnen dezelfde hardware aansluiten op de flatkabel.

Ik heb zopas de 4x20 charater LCD display verbonden, het programma hiervoor aangepast, alle teksten voorzien maar ook een voledige uurklok op het display gezet. Tijd wordt aangegeven in uren, minuten en seconden en met de 4 drukknoppen kun je het uurwerk ook snel juist zetten.

Er zit nu ook een nieuwe clockmodule in die alle timings maakt per decade vanaf 10 Mhz tot 1 sec. Hierdoor kun je snel over een vaste clock beschikken. Ik weet dat er weer discutie's kunnen zijn over het clockdomein onderling maar dat heb ik hier niet opgelost. Eerste bedoeling is zoveel mogelijk werkende en praktische voorbeelden te geven.

Het intypen van de source voor kleine voorbeelden kan wel nuttig zijn maar de display versie is heel wat uitgebereider met meerdere extra modules en dat typen aleen zou al een hele zware karwei zijn. We spreken dan nog niet om het allemaal te laten werken.

De vroegere functie's zoals de 2 digit 7 segments zitten ook nog in het program en kunnen eveneens verder gebruikt worden. De LCD display komt volledig op de andere rij pinnen van dezelfde flatkabel.

Deze avond ga ik de proef3 tutorial schrijven en proberen online te zetten. Maar het vergt al heel wat meer type werk en tijd voor het maken van afbeelden, schema's enz.

ik waardeer uw inspanningen enorm, als ik kan helpen hoor ik het graag. Het geeft mij echter nu al weer een hoop plezier om hiermee bezig te zijn.

Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....

En ondertussen is proef3 online:

op mijn web

en ziet er zo uit:

http://farm4.static.flickr.com/3373/3191995504_42c98b7ca7_o.jpg

De archieffile is ook terug beschikbaar als volledig project met kant en klare sources.

We doen verder met de toevoeging van een DS18B20 temperatuur sensor van DALLAS. Dit in het proef4.

http://farm4.static.flickr.com/3466/3193248267_722c491b7f_o.jpg

En proef4 vind je hier

Ondertussen zijn er weer 2 tutorials bijgekomen. Om een beter overzicht te hebben van alle functie's die er nu gezamelijk inzitten heb ik een blokschema getekend van de laatste tutorial proef6:

http://users.skynet.be/fotoopa/quartus/functies_proeven6.png

Alle functie's blijven beschikbaar. In proef5 was de DALLAS temperatuur sensor DS18B20 erbij gekomen en in proef6 is er ook nog de TSOP1736 IR detector bijgekomen voor het dekoderen van de bevelen uit afstandsbedieningen die werken met het RC5 protocol. Een meer closeup van de uitlezing staat hieronder:

http://users.skynet.be/fotoopa/quartus/proef6_002.jpg
SP geeft de waarde van de rotary encoder weer
RC5 is de afstandsbedienings code
Temp is de temperatuur via de DS18B20
Tijd is de ingebouwde klok in: uren min sec.

Led1 op het boardje heeft een extra functie bijgekregen, dit knippert als er iets ontvangen wordt via de TSOP1736 of blijft branden zolang je knop1 ingedrukt houd. Hierdoor kun je tenminste zien of er een code uitgestuurt wordt mocht je bediening een ander dan de RC5 code sturen.

Deze laatste tutorial is direct accesbaar via Deze link

Ik heb de archief file ook beschikbaar gesteld en voor de niet Altera gebruikers zijn alle verilog modules samengebundeld in 1 zipfile voor downloading. Ondertussen hebben we 728 LE's in gebruik van de 2210 beschikbare LE's of 33% bezetting.

@fotoopa: Ik ga hier maar best verder wat ik in het show-topic ben begonnen.

Zijn dat gewone HEX file's, zonder overhead?
Dan kan ik deze wel importeren naar CEO files voor Xilinx.

We zijn die jaar begonnen met bordje van Xilinx op school. Op mijn aanraden van de leerkracht. Vroeger waren dat nog ISPgals. Op die Xilinx bordjes zit een VGA interface. Het is gewoon om vrij vlug wat tekst op een monitor te zetten.

Bedankt voor al de hulp al. Geweldige foto's.

Robin

Ja dat HEX formaat is een standaard. Ik heb ze zelf eerst moeten aanmaken als character generator. Of ze nu in ram vliegen of in flash maakt niets uit.
Ik heb de files gezipt en zijn Hier te downloaden

Maar er zitten enkele functie's in die je niet direct kunt overnemen zoals een PLL gemaakt via de Quartus wizard functie. Die ga je moeten herschrijven volgens de xilinx mogelijkheden. Ik denk dat de files werken want ik kan het nu niet direct meer testen. Er zit ook een include file bij. Ik hoop dat je die ook zo kunt overnemen. Die bevat de vele parameters volgens het display type. De include file is eigenlijk gemaakt om het even welke display aan te sturen en heb ik origineel geschreven voor een ps2 display van 480x272x24 bit. Dus voor 3x8 RGB kleuren.

Hoeveel volt kan/mag een MAX hebben qua input?

Voor de TSOP wordt er een zener gebruikt om het signaal naar 3.3V te trekken, ik heb echter alleen zeners van 3,9V (en hoger).

Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....
free_electron

Silicon Member

Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM

Idd 3.3V maar je kunt altijd 4 gewone silicium diodes inde andere richting plaatsen 4x0.7 = 2.8V vb 1N4148 diodes.