Op 7 september 2007 22:47:40 schreef coco3:
Oh ja: stel ik hang aan alle uitgangen led's. Dan zit ik al gauw aan zeg 80*20mA=~1,5A? Bakt mij chipje dan niet heel erg?

per io groep kan max 130 mA worden gesinkt. Mij is alleen niet helemaal duidelijk hoe de pinnen over de groepen zijn verdeeld. zie http://www.altera.com/literature/an/an286.pdf

"For example, the EPM240 device has six GNDIO pads, which provide six
I/O regions that can sink up to 130 mA. If you need to sink 15 mA for the
outputs, you can have eight outputs per region. With the six regions of
I/O between GNDIO pads, there are 48 possible outputs, each sinking
15 mA."

daarvoor dient nu net de pin planner in quartus.

maak je project aan. kies je component en ga dan naar assignments -> pin planner.

je krijgt grafisch een mooie voorstelling van de chip en met kleurtjes en symbooltjes is proper aangeduid waar de groepen zitten.

je kan ook het handboek van de chip familie downloaden bij altera en het daar gaan uitvlooien in de tabellen. aan u de keuze. ik gebruik de pin planner. daa dient dat ding voor. klikkerdeklik en tis klaar.

Op 8 september 2007 00:14:26 schreef kofi:
per io groep kan max 130 mA worden gesinkt. Mij is alleen niet helemaal duidelijk hoe de pinnen over de groepen zijn verdeeld

Elk stuk tussen 2 VCC/GND paren is een groep.

Nu een praktisch voorbeeldje van een schema entry. De functie is weer vrij eenvoudig, gewoon om iets te kunnen weergeven.

Ingangen zijn:

input clk_50 onze standaard 50Mhz clock.
input knop1 telkens we hier eenmaal drukken verhoogt onze teller
input knop2 reset op ieder ogenblik beide tellers.

Uitgangen voor 8 leds.

We hebben een tien teller gemaakt via de quartus wizard functie en deze teller 2 maal gebruikt . Ook hebben we een prescaler gemaakt via de wizard die deelt door 25.000 dit staat aangegeven binnen in de grafische blok. Een TFF verbonden aan de cary output deelt nog eens door 2 zodat we een clock bekomen van 1 msec. Deze 1 msec gebruiken we als basis clock voor de tellers en de positieve flank detectie van knop1. Deze flankdetectie gaat hier over 2 DFF's zodat we een perfect zuiver signaal bekomen. Meteen is een kleine antidender functie gemaakt.

Het signaal van de knoppen is omgekeerd omdat die in rust hoog zijn. We werken liever met positieve logica!

De uitgangen van de tellers zijn verbonden via 8 x een invertor omdat de leds actief low gestuurd worden. Ook die not8 is gemaakt via de wizard omdat hij dan minder plaats inneemt. Maar we konden evengoed 8 afzonderlijke invertors tekenen.

Ik heb alle nodige files gezipt. Immers een grafische input vergt meer files mede door de aangemaakte files door de wizard. Als je dit wilt compileren maak een map met de naam schema_teller en unzipt alle files erin. Compileer en je hebt alles, inclusief de pinout voor de nano board. Gebruik je een andere board dan moet je de pinnen en de device opnieuw toekennen volgens je beschikbare I/O.
Hier staat de zip file

Hierbij het schema ingegeven via Quartus:

http://users.skynet.be/fotoopa/fpga/schema_teller.png

Ik begin steeds meer respect te krijgen voor dat Quartus.
En voor de inzet van deelnemers.
Het spiekbriefje van free_electron heb ik geprint en ligt onder mijn kussen.
En fotoopa heeft zijn beroep misgelopen.
In het onderwijs (in "Holland") zou hij op handen gedragen worden. Ik zal een flinke kwak moeten lezen. In de komende dagen ga ik proberen mijn eigen "blink a led" te maken.

Hey coco3, een TRS-80 liefhebben? :-) Ik had een coco2 "vroeger".

Wat betreft die tools: ja, het is mooi spul. Maar vergeet niet dat het professionele tools zijn die toevallig ook voor hobby gebruikt kunnen worden. D'r zit jaren lange ontwikkeling en heeeeeel veel geld in. ISE is hetzelfde, maar dan voor Xilinx devices.
Overigens, in de proffessionele wereld wordt vaak nog een aparte synthese tool gebruikt, meestal Symplify. De synthese van Quartus en ISE zijn niet zo goed en hebben minder mogelijkheden. Voor hobby is het prima.

Op 9 september 2007 00:08:17 schreef coco3:
En fotoopa heeft zijn beroep misgelopen.
In het onderwijs (in "Holland") zou hij op handen gedragen worden.

In het onderwijs moeten ze enkel kerels hebben die deftig en zonder taalfouten kunnen schrijven. Ik kan dit niet en zal het ook nooit meer kunnen. Maar na al die jaren maak ik mij daar geen de minste zorgen meer over als mijn schakelingen maar werken ....

Op 9 september 2007 09:58:41 schreef flipflop:
Hey coco3, een TRS-80 liefhebben? :-) Ik had een coco2 "vroeger".

Wat betreft die tools: ja, het is mooi spul. Maar vergeet niet dat het professionele tools zijn die toevallig ook voor hobby gebruikt kunnen worden.

juist. dat is echt prof. spul. als je weet wat een licentie daarvan kost... ( tot voor een paar jaar was dat kopen geblazen... en das was meerdere duizenden euros hoor. )
nu leven ze van de chip sen de IP cores die ze kunnen verkopen en maken ze de tool vrij.

en inderdaad in de 'grote' wereld worden dingen zoals Synopsis (FPGA compiler en Synplify), vericity , specman ( verificatie) gebruikt om te synthetiseren. die zijn nog vele krachtiger , maar daar wil je geneens van weten wat dat kost .... je wordt onpasselijk als je dat prijskaartje ziet )

de backend loopt echter nog steeds door de fitter van altera. ( of xilinx ) alleen de fitter weet hoe de chips intern in elkaar zitten.

Hier nog een voorbeeldje van een 10 bits pwm met rotary encoder om de duty-cycle te regelen.

Opzet was weer een volledige schema entry te maken. Zoals je al weet, ik spaar niet direct op het aantal LE's vandaar dat ik vb de encoder lijnen eerst ga inclokken met telkens 2 DFF's. Nogmaals op deze manier kan er geen signaal verandering komen binnen de sample clock puls waardoor je geen glitches bekomt. De looptijden zijn heel duidelijk gedefinieerd. Net zoals we heden ten dage niet gaan sparen op 1 byte RAM, sparen we ook hier niet op 1 LE. Mocht je toch in de problemen komen dat het krap wordt om een proect in een bepaalde chip te krijgen, dan is er nog tijd om te kijken of je hier of daar nog kunt optimaliseren voor minder LE's.

Nu het schema:

http://users.skynet.be/fotoopa/fpga/pwm.png

Korte beschrijving:

Bovenaan zie je weer een precaler staan. Dit om de vrij hoge 50 Mhz clock eerst te delen door 128. Dit is een 7 bit deler waarvan we de hoogste bit pre[6] als uitgaande clk gebruiken.

Daar rechts van staat een cnt_8bit_ena. Die gebruiken we om een kunstmatige reset te maken voor de volledige schakeling. Zodra er 255 clk verstreken zijn zal de carry_out actief komen en de counter disabelen waardoor hij in deze stand blijft staan. Door deze carry te inverteren bekomen we een actief reset signaal.

Deze reset gaan we gebruiken om de pwm te laten opstarten met een opgelegde duty-cycle. Deze waarde staat in de 10 bits constante die we aangemaakt hebben via de quartus wizard functie en die nu op 511 staat, 50% pwm duty cycle dus. Maar je kunt gerust deze waarde wijzigen en hercompileren.

Het regelen van de pwm waarde gebeurt nu via de rotary encoder te verdraaien. De rotary encorder ingangen worden dubbel geclockt en daaruit wordt de richting (dir) en de enable (ena) afgeleid en naar de cnt_10bit_ld_up_down gestuurd. Dit zijn exclusieve functie's (XOR). Door het verdraaien van de encoder gaan we deze 10 bit teller besturen en wordt de pwm duty-cycle aangepast. Omdat de pwm een 10 bit resolutie heeft is de regeling eerder langzaam want je hebt 1024 pulsen nodig om van min naar max te gaan.

De pwm uitgang heb ik verbonden aan een led. Een copy is gemaakt ( via een wire blokje) om de scoop aan een tweede uitgang te verbinden waardoor je het signaal kunt bekijken.

Er is geen voorziening gemaakt om de min. of max. grenzen te bevriezen waardoor je van 0 naar max overslaat bij het overschreden van die grenzen of omgekeerd. Maar niets weerhoud je om via een comparator die grenzen te beperken.

De pwm freq is dus 20nsec * 128= 2560 nsec of 2.56usec ongeveer 400 Khz, de pwm periode is 1024 maal langer of 2.62 msec of ong. 400 Hz.
Het volledige project kan je hier downloaden . Best weer een map aanmaken onder de naam pwm en alles unzippen en via open project het project openen en compileren (CTRL L).

Morgen eens op me gemak wat meer lezen over quartus en verilog.

Vanavond wel met het terasic bord gespeeld. maar nog niet echt veel succes gehad met mijn blink a led. Ook niet in de schematic entry ...

Op 10 september 2007 22:33:07 schreef jovak:
Vanavond wel met het terasic bord gespeeld. maar nog niet echt veel succes gehad met mijn blink a led. Ook niet in de schematic entry ...

Vergeet niet de pinout na compilatie na te zien of die overeenkomt met deze van je nano boardje anders zal niets werken. Geef ook aan of je de programmer kunt opstarten en of die juist geconfigureerd is volgens de device "EPM2210F324C3" en als hardware USB0.

Altijd eerst je boardje aansluiten aan de USB van de PC vooraleer de programmer te starten anders ziet hij de hardware niet en moet je die opnieuw instellen via de "hardware TAB" Indien nodig kan ik daarvan wel een paar screenshots geven.

Voor het MAX II nano boardje ga je best de laatste versie van de manual gaan downloaden op hun site: hier klikken Hoewel de datum op hun site nog dezelfde is werd de manual deze nacht gewijzigd naar versie 1.31. Ik had een paar fouten ontdekt in hun pinout tekening en die gisteren avond per email opgestuurd. Deze morgen is de manual reeds aangepast en op hun web beschikbaar.

Ik heb ook een vraag gesteld over het aantal keren dat je de device moogt herprogrammeren maar daarover wacht ik nog op een bevestiging.

Op 11 september 2007 07:25:17 schreef fotoopa:
[...]
Vergeet niet de pinout na compilatie na te zien of die overeenkomt met deze van je nano boardje anders zal niets werken. Geef ook aan of je de programmer kunt opstarten en of die juist geconfigureerd is volgens de device "EPM2210F324C3" en als hardware USB0.

Altijd eerst je boardje aansluiten aan de USB van de PC vooraleer de programmer te starten anders ziet hij de hardware niet en moet je die opnieuw instellen via de "hardware TAB" Indien nodig kan ik daarvan wel een paar screenshots geven.

De programmer wordt gezien. Als ik een start opdrcht geef in zie je de leds uitgaan en de programeerled gaan branden.

Als ik de schema teller als project inlaad en programmeer werkt dat wel.

EPM2210F324C3 heb ik als device staan. Ik zal vanavond eens proberen om nog een keer te kijken of de pinnen na compileren nog wel de zelfde zijn.

Anders zet ik de project files wel in een bestand en dat anderen er even naar kunnen kijken wat ik fout doe :)

Gisteravond ook nog even gestoeid met de simulator, maar daar moet ik echt weer even tijd in investeren. Mijn hele afstudeer project is gesimuleerd in MAX Plus maar dat is ook al weer 10 jaar geleden en blijkbaar is het batterijtje van mijn langetermijngeheugen in de hersenpan leeg :+

Als je via de menu -> assignments -> pins aanklikt bekom je een lijst van alle I/O pinnen die je programma gebruikt. In de onderste helft staat de tabel, in de bovenste staat je chip. In de tabel kan je zien onder location als die pinnen ingevuld zijn en of die kloppen met je hardware manual. Zijn die niet ingevuld ( moet de eerste keer zelf manueel gedaan worden gezien ik geen pinout file meegestuurd heb) dan moet je ze zelf eerst invullen en HERCOMPILEREN. Invullen kun je door dubbekklikken op de location van de row per pin. Daar in scrollen met het muiswiel tot je de gewenste pin ziet en aanklikken.

Ik vermoed dat dit niet correct was in je toepassing.

Hallo,
Ik ben ook juist begonnen met de quartus tool. Vind hem prachtig!

Nu heb ik het volgende: een blok hardware in VHDL geschreven. Dit zit in een top level board file. In die hardware zit een state machine. Hoe kan ik aan die interne signalen aan tijdens een simulatie? Ik zou graag de status van de state machine willen zien. Dat lukt mij nog niet zo goed

[Bericht gewijzigd door stecj366 op (15%)]

Gewoon een paar extra pinnen bijplaatsen tot op het top niveau. Die komen dan automatisch in je simulatie lijst. Dit worden testpinnen zowel voor de simulator maar ook te gebruiken om een LA of scoop aan te hangen.

Je moet daarvoor vaak een wat ingewikkeldere naam geven omdat Quartus anders niet intern kijkt. Het makkelijkst is bij de simulator tijdens het toevoegen van een node/bus de knop 'node finder' te kiezen. Vul dan bovenin bij 'named' je signaal in (eventueel met *wildcards*) en zorg dat filter rechts op 'Design entry (all names)' staat.

Kijk dan in de resultaten of je je signaal kan vinden en zet die in het rechter lijstje. Twee keer OK en ze staan er in.

Interne signalen komen soms in meerdere vormen voor, gewoon even proberen wat werkt. Het kan ook zijn dat sommige interne signalen weg geoptimaliseerd zijn of samengevoegd met een ander signaal dus dan moet je misschien hetzelfde signaal pakken vanuit een ander verbonden punt.

Ok, bedankt, dit lukt nu wel.

Om nu een goede simulatie te doen, moet ik dan alle pins ook connecteren? Want ik heb de indruk dat de synthetiser nogal is wat laat vallen... Ik wil eigenlijk een gewone functionele simulatie doen van mijn blokje (om te testen of het we kan wat ik geschreven heb)

Waar mogelijk stonden vroeger op mijn projecten altijd een extra plug waar direct een LA kon worden aangesloten. Als je dan ergens problemen had op een lager niveau moest je maar gewoon zorgen dat via een wire verbinding die signalen tot op het toplevel kwamen en aan de LA aansluitingen lagen. Wel moet je het geheel eerst even hercompileren. Ik gebruikte veel meer de LA metingen dan de simulator omdat je daan de echte realtime toestanden kunt bekijken. Ik had zelfs een testboard waar 48 kanalen konstant aan verbonden waren.

Best zo snel mogelijk alle pins die je hardware zal gebruiken eerst vastleggen, anders kan Quartus die pinnen zelf gebruiken of aan de gnd leggen. Door alle pinnen op te nemen ontdek je soms heel vroeg dat er in je design ontbreken.

Ja, ik ben ook van plan de LA te gaan gebruiken, maar aangezien ik nu nog moet wacten op mijn bord en op de LA, kan ik nu niet veel anders doen dan simuleren, jammer genoeg :(

Op 11 september 2007 09:56:27 schreef madwizard:
bus de knop 'node finder' te kiezen. Vul dan bovenin bij

das een manier om het te doen. probleem is soms dat een node die je zelf getekend hebt verdwenen is na synthese ( weggeminimaliseerd )

het simpelste is in je verilog of VHDL wat tijdelijke nodes aan te maken ( ik zet die in de module pinlist via een ifdef )

 

// 'define debug

module blabla ( input a,
                input b,
                'ifdef debug
                 output debug_node1,
                'endif
            
                output c
              );

endmodule

door nu de comment voor debug weg te halen komen de internes signalen tevoorschijn.
in je finaal product commentarier je weg. als ik het goed voorheb kan je ergens een top 'macro' module definieren die van toepassing is op alle files in je project.

daar zet je dan de 'define in.

Intussen ook terug een bevestiging ontvangen vanuit Taiwan. ze hebben idd de manual aangepast dit binnen de 12 uur na de melding!

Ook hebben ze geantwoord over het aantal keren dat een CPLD van de reeks MAX II kan geprogrammeerd worden. Ze bevestigen idd de beperking aangegeven door Altera maar zeggen ook dat dit een minimale verwachting is, het echte aantal keren kunnen ze ook niet voorspellen. Ironisch eigenlijk stellen ze voor gezien de extreem lage prijs in het geval je heel veel experimenten moet doen om een reserve boardje extra te nemen. Als dat geen fijne verkopers zijn!

Ik ga in ieder geval steeds mijn eerste boardje herprogrammeren voor iedere test. ik wil echt eens weten wanner ik in de problemen kom. Gezien ik reeds een reserve boardje heb maakt het mij niet veel uit, maar ik vermoed dat het toch vrij lang kan duren eer het mij voorvalt (hoop ik)

tegen die tijd zal xantus ook wel zijn boardjes uitgeleverd hebben.

Op 11 september 2007 10:10:07 schreef stecj366:
Om nu een goede simulatie te doen, moet ik dan alle pins ook connecteren? Want ik heb de indruk dat de synthetiser nogal is wat laat vallen...

Begrijp ik nou goed dat je op de netlist aan het simuleren bent?

If (yes) ask(why-on-earth-do-you-do-that?); 

Ach: als mijn bordje na 100 keer herprogrammeren (en ik heb het idee dat ik halfweg ben) door de knieen gaat, dan ga ik met jovak mee.

Op 6 september 2007 23:16:26 schreef jovak:
[...]
Als de altera op het terasic bordje niet meer te programeren is, heb ik nog altijd de bitblaster functie van het bordje. Die waarde blijft het behouden. bestel ik wel een paar andere FPGA's en programeer die.
.

Ik moet een behoorlijke hoop moeite in verilog steken en dat loont zich niet voor gegarandeerd 100 keer.
Maar de voordelen van een CPLD/FPGA (ook om simpele LED's te sturen) zijn overtuigend. Mijn uiteidelijke doel is om die domme LED's interactief met hun omgeving (de tuin) te maken, compleet met regen/geluid/temperatuur/windsnelheid/richting-sensoren + afstandsbediening voor voorkeuren van gedrag.

Op 9 september 2007 09:58:41 schreef flipflop:
Hey coco3, een TRS-80 liefhebben? :-) Ik had een coco2 "vroeger".
.

Heerlijk. Niks TRS-80. Het was de parkiet die Coco heette
Voorafgaand hadden we Willem en Fredje.

Mijn status: het is me vanavond gelukt om via het schema entry ledjes aan te sturen. Zonder foutmeldingen!
Knipperen ervan is de volgende stap. Ik heb ooit eens gelezen dat elke leek die zich twee uur per dag gedurende 10 jaar ergens in verdiept, uiteindelijk de kunde van een professional ontwikkelt. Welnu: ik heb nog (10*52)-1 weken te gaan.
Morgen ga ik eens uitzoeken wat een glitch is. Lijkt me iets glibberigs.

Op 11 september 2007 21:46:21 schreef coco3:
Heerlijk. Niks TRS-80. Het was de parkiet die Coco heette
Voorafgaand hadden we Willem en Fredje.

Hehe, da's dan weer jammer :-) http://www.coco3.com ik wordt oud... On topic: leuk om zo'n ding in een FPGA te stoppen. Beetje analoog spul eromheen.

Op 11 september 2007 19:13:01 schreef flipflop:
[...]
Begrijp ik nou goed dat je op de netlist aan het simuleren bent?

If (yes) ask(why-on-earth-do-you-do-that?); 

2 dingen
- pinnen die je niet connecteert wordne weggeminimaliseerd .... soms met bizarre resultaten.

je moet ALTIJD op netlist niveau simuleren ! alle andwere simulatie is stierepoep. ik heb een paar paginas eerder een voorbeeld gegeven waarom. een klad perfect code die perfect simuleert en die na synthese totaal niet blijkt te werken door een race conditie. ( de flifplops worden ge-enabled na dat de clock al gepasseerd is .... )

dergelijke miserie kan je alleen vinden als je op netlist simuleert. Al de rest is volksverlakkerij.