Stap 12: VM 3.0: Modulair ontwerp
Door nu u moet zitten kundig voor eenvoudige logica functies gebruiken basisoperators Verilog implementeren (|, &,...) en krijgen om met succes uitvoeren op uw FPGA-board. Als u niet helemaal om dat stadium bent, kunt u beginnen met VM 2.0.
In "VM 2.0: mijn eerste Verilog Project" introduceerde ik het concept van "modules" en "modulaire" code; nu zijn er enkele nuances van modules die je weten moet om een bedreven 'modulaire designer'. Maar eerst moeten wij bespreken "What's modulaire ontwerp?"
Als u de oefening "hello_world" voltooid, waren u ingevoerd om de Verilog trefwoord "module". Elke Verilog-bronbestand bevat slechts één module-definitie. Dus hoe kunnen we complexe projecten die betrekking hebben op veel kleinere modules maken? Laten we gecontroleerde nemen het voorbeeld van het bouwen van een timer LED circuit. Wat zouden we moeten in onze schakeling maken een LED knipperen elke seconde als sommige schakelaar een logica een was en we alleen een 50MHz klok hadden?
Breken wat we nodig hebben in drie typen: ingangen, uitgangen en interne onderdelen.
Ingangen: fysieke signaalbronnen zoals een oscillator ("klok"), schakelaars, knoppen, datapoorten, enz...
Uitgangen: fysieke uitgangen die zal worden aangedreven door het circuit zoals LEDs, datapoorten, displays, enz...
Interne onderdelen: onderdelen die het nemen van de staat van de ingangen voor het genereren van een gewenste output; niet alle van deze hebben om te worden aangesloten op een poort van de "hoogste niveau", maar uiteindelijk moet alles "route".
Lees deze classificaties opnieuw; het is van vitaal belang dat u de verschillen kennen! Merk ook op de nieuwe woordenschatwoorden: "hoogste niveau" en "route".
Denk na over wat deze termen zou kunnen betekenen... Ik zal deze formeel definiëren in een minuut.
Deze drie soorten onderdelen vergelijken met een algebraïsche vergelijking, de ingangen zijn de onafhankelijke variabelen, de uitgangen zijn de afhankelijke variabelen en de interne componenten vertegenwoordigen de feitelijke vergelijking. Remembering deze analogie zal u helpen beslissen wanneer bezig met projecten als een bepaald onderdeel een input, output, of interne component is.
In het geval van het LED knipperen circuit is hier wat we hebben op een zeer hoog niveau:
Ingangen: 50 MHz klok, switch
Uitgangen: LED
Internals: een 50 MHz tot 1 Hz klok scheidingslijn, een en-poort (omdat LED moet pas op als beide de verdeelde klok en de switch zijn logica een)
Hoe zou u, op een zeer hoog niveau (wat betekent meestal "zwarte dozen" te vertegenwoordigen componenten in plaats van poort patronen), blok diagram dit circuit? Herinneren dat je een scheidingslijn klok maken kunt door het aansluiten van een aantal D-Flip Flops (DFFs) samen samen met sommige omvormers.
Zie het bijgevoegde-diagram voor het antwoord.
Uitdaging: In werkelijkheid hadden we een fysieke knop die alle DFFs in de klok scheidingslijn zou herstellen. Kunt u de herkomst en de bestemming van een knopje "Eerste" over dit blokdiagram tekenen?
Blokdiagrammen uitzien zijn de eerste stap om te helpen die u erachter te komen hoe een programma van Verilog, te schrijven zoals elke doos in het diagram als een exemplaar van een module in uw code eindigen zal. Merken hebben wij een groot blok waarin een aantal kleinere blokken; We noemen dit de "top"-module. De "top"-module is wat zorgt ervoor dat alle interne componenten van het circuit verbinden met fysieke in- en uitgangen.
Binnen deze bijzondere top module zijn twee dingen: een klok divider en een en-poort. Maar merk dat de klok scheidingslijn blok bevat ook een aantal kleinere blokken (DFFs). We DO NOT moet maken van alle deze DFFs in onze top module; We kunnen maken een aparte klok scheidingslijn module waarin alle de DFFs en maakt een instantie van dat klok scheidingslijn in onze top module.
Zoals u kan hebben geraden, we moeten ook een DFF module die we kunt instantiëren een aantal keren in de scheidingslijn van de klok. Dit kan we alleen bepalen het gedrag van een D-Flip Flop eens en vervolgens meerdere exemplaren van dat DFF instantiëren. Alles wat we moeten doen in onze Verilog code is elk exemplaar van de DFF verbinden door de juiste poorten (d.w.z. Verbind de inputs en outputs), maar meer op module instantiëren later.
Opmerking: Probeer niet om de code van dit knipperende LED project enkel nog; Er zijn een paar meer dingen die we moeten om te dekken.
Het punt van deze module is om u blootstellen aan modulair ontwerp; ziet u waarom ik deze tutorials "modules" noemen? Dit idee moet worden ingebakken in je geest als u doorgaat met leren en het gebruik van Verilog.