Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Ingebed

Verilog 101: Je Eerste Hardware Description Modules Bouwen

In dit artikel bestuderen we de basistructuur van een Verilog module, bekijken we voorbeelden van het gebruik van het Verilog "wire" datatype en de vectorvorm, en raken we kort enkele verschillen tussen VHDL en Verilog aan.

Verilog en VHDL zijn twee talen die veel gebruikt worden om digitale schakelingen te beschrijven. AAC heeft een serie technische artikelen over de basisonderdelen van VHDL. Dit artikel werkt als startpunt voor onze serie over Verilog.

Heb Ik Zowel Verilog als VHDL Nodig?

Voordat we onze discussie starten, laten we een voor de hand liggende vraag aanpakken: hebben we echt beide talen nodig?

Zowel Verilog als VHDL zijn krachtige tools die gebruikt kunnen worden om een complexe digitale schakeling te ontwerpen. Hoewel er enkele verschillen zijn tussen deze twee HDLs, ben je vrij om er één te kiezen om te meesteren en te gebruiken. Ik geloof echter dat op een gegeven moment je profiteert van ten minste een basisonderstanding van beide talen. Soms hebben we als ontwerpers een voorbeeldcodesegment nodig om een idee te krijgen over het coderen van een project. We surfen urenlang op het net en vinden uiteindelijk wat we nodig hebben, maar het maakt geen zin voor ons – het is geschreven in de HDL die ons volledig onbekend is. Zonder een basisonderstanding van de taal, kunnen we de technieken mogelijk niet volledig begrijpen.

Verilog Evolutie

Verilog werd in het begin van 1984 ontworpen door Gateway Design Automation (ongeveer drie jaar nadat VHDL geïnitieerd was door het US Department of Defense). Met de steun van het DoD werd VHDL een IEEE-standaard in 1987. Verilog maakte het pas in 1995 naar de scène. Vandaag zijn zowel VHDL als Verilog populaire HDLs en FPGA-ontwerptools ondersteunen meestal beide talen.

Het woord "Verilog" is een portmanteau van de woorden "verification" en "logic" omdat de taal eerst voorgesteld werd als een simulatie- en verificatie-tool. Laten we beginnen met Verilog concepten en syntaxis.

Voorbeeld 1

Als eerste voorbeeld, laten we de Verilog-code schrijven voor de schakeling afgebeeld in Figuur 1.

 

Verilog 101: Je Eerste Hardware Description Modules Bouwen

Figuur 1. Circuit_1
 

Er zijn twee ingangen en één uitgang. De poorten zijn allemaal één bit breed. De functionaliteit van de schakeling is om de twee ingangen te AND-en en het resultaat op de out1 poort te zetten.

Een mogelijke Verilog-beschrijving voor de Circuit_1 module is:

Verilog 101: Je Eerste Hardware Description Modules Bouwen

Regels 1 en 8

Deze twee regels gebruiken de keywords "module" en "endmodule" om aan te geven dat de regels ertussen (regels 2 tot 7) allemaal een schakeling beschrijven genaamd "Circuit_1". Deze naam is willekeurig en stelt ons in staat om later naar deze schakeling te verwijzen.

Regels 2 tot 6

Deze regels specificeren de interface van "Circuit_1" met de omgeving. De in- en uitgangspoorten worden beschreven met de keywords "input" en "output". Deze keywords worden gevolgd door een ander keyword "wire" en dan de naam van de poort (zie Figuur 1). Wat specificeert het keyword "wire"? "Wire" is een Verilog datatype dat een fysieke draad in het ontwerp vertegenwoordigt. We zullen de Verilog datatypen in een toekomstig artikel in meer detail bespreken, maar voor nu weten we dat er drie draden zijn genaamd a, b, en out1 in onze module en aangezien deze gespecificeerd zijn in de poortdeclaratie, corresponderen ze met de module-interface.

Regel 7

Deze regel gebruikt de bitwise AND-operator, namelijk &, om de functionaliteit van de schakeling te beschrijven. Het keyword "assign" zet a&b op de uitgangspoort out1. Dit type toewijzing heet een continue toewijzing. Het heet zo omdat de toewijzing altijd actief is wanneer een operand aan de rechterkant verandert, a&b geëvalueerd wordt en aan out1 toegewezen. We kunnen een continue toewijzing voorstellen als een combinatorische schakeling wiens uitgang continu bijgewerkt wordt afhankelijk van de ingangen. In ons voorbeeld is deze combinatorische schakeling een simpele AND-poort. Er zijn ook procedurele toewijzingen in Verilog HDL die in toekomstige artikelen besproken zullen worden.

Nu kunnen we een softwarepakket zoals Xilinx ISE gebruiken om de bovenstaande code te verifiëren. Je kunt een Verilog-gebaseerde tutorial van deze software hier vinden (PDF).

Voorbeeld 1 Vergelijken met de VHDL Code

Figuur 2 toont de Verilog en VHDL beschrijvingen voor de Circuit_1 module.

 

Verilog 101: Je Eerste Hardware Description Modules Bouwen

Figuur 2. Vergelijking van Verilog en VHDL beschrijvingen voor Circuit_1.

 

Zoals je kunt zien, moeten we sommige libraries includeren bij coderen in VHDL. Deze libraries geven de definitie voor de datatypes en operatoren. Rekening houdend met de toevoeging van deze libraries en het algemene formaat van VHDL, observeren we dat de VHDL-code meer verbose is. Deze verbositeit is echter niet zonder voordelen. Bijvoorbeeld, het library management feature van VHDL kan nuttig zijn bij het modelleren van hogere systemen. In toekomstige artikelen zullen we af en toe de voor- en nadelen van deze twee HDLs bespreken.

Verilog Heeft een Vier-Waarden Systeem

Er zijn vier baswaarden gebruikt in de meeste Verilog datatypes. De draden gedefinieerd in Listing 1 kunnen een van de volgende waarden aannemen:

  • 0: voor een logic low of een false conditie
  • 1: voor een logic high of true conditie
  • z: voor de high-impedance staat (kan gebruikt worden om de uitgang van een tri-state buffer te beschrijven)
  • x: voor een don't-care of onbekende waarde (wanneer een input niet geïnitialiseerd is of twee of meer conflicterende outputs samen verbonden zijn).

Het VHDL std_logic datatype kan negen verschillende waarden aannemen maar de veelgebruikte waarden zijn '0', '1', 'Z', en '-' ('-' duidt een don't-care aan).

Voorbeeld 2

Als ander voorbeeld, laten we de Verilog-code schrijven voor de schakeling (die we Circuit_2 zullen noemen) getoond in Figuur 3.

 

Verilog 101: Je Eerste Hardware Description Modules Bouwen

Figuur 3. Circuit_2

 

De volgende Verilog-code beschrijft deze schakeling:

Verilog 101: Je Eerste Hardware Description Modules Bouwen

De elementen in de bovenstaande code zijn vergelijkbaar met die in Voorbeeld 1, behalve dat een intern signaal gedefinieerd is in regel 10 van de code. Het keyword "wire" wordt gebruikt om het datatype van deze verbinding te specificeren. Zoals hierboven besproken, zou het "wire" datatype vertalen naar een fysieke draad in het ontwerp.

De bovenstaande code gebruikt ook enkele nieuwe Verilog bitwise operatoren: ~ voor NOT en | voor OR-operatie. Een andere nuttige bitwise operator is ^ voor de XOR-operatie. Figuur 4 toont zowel de Verilog als VHDL beschrijvingen voor de Circuit_2 module. Zulke vergelijkingen kunnen je helpen de verschillen en overeenkomsten tussen deze twee talen te zien.

Verilog 101: Je Eerste Hardware Description Modules Bouwen

Figuur 4. Vergelijking van Verilog en VHDL beschrijvingen voor Circuit_2.

Voorbeeld 3

Voor ons derde en laatste voorbeeld zullen we de Verilog-code geven voor het schema getoond in Figuur 5.

 

Verilog 101: Je Eerste Hardware Description Modules Bouwen

Figuur 5. Schema voor voorbeeld 3.

 

Zoals je kunt zien, is er een bepaalde relatie tussen de blauwe invoerpoorten en de rode: de corresponderende ingangen worden gecombineerd met de AND-operator. Het resultaat wordt aan een uitgangspoort toegewezen. In dergelijke gevallen kunnen we de signalen groeperen en ze als een vector behandelen. Dit maakt de code compact en leesbaar.

Met het vectorconcept in Verilog kunnen we de code in Listing 1 eenvoudig uitbreiden om de bovenstaande schakeling te beschrijven (zie de code in Listing 3 hieronder).

Verilog 101: Je Eerste Hardware Description Modules Bouwen

Let op dat het indexbereik van de vectoren oplopend ([0:2] zoals hierboven gebruikt) of aflopend ([2:0]) kan zijn. Hoewel het oplopende formaat hierboven gebruikt is, is het meestal minder foutgevoelig om de aflopende vorm te gebruiken. Dit komt doordat de aflopende stijl overeenkomt met onze perceptie dat de linkerste positie van een binair getal de hoogste index heeft. Let op dat vectoren ook in VHDL gebruikt worden.

Figuur 6 toont een ISE simulatie van de code in Listing 3.

Verilog 101: Je Eerste Hardware Description Modules Bouwen

Figuur 6. ISE simulatie van Voorbeeld 3's code.

 

In dit artikel bespraken we dat het een goed idee is om zowel VHDL als Verilog te leren, we bestudeerden de basistructuur van een Verilog-module, en maakten we kennis met het Verilog "wire" datatype en de vectorvorm. We raakten ook kort enkele verschillen tussen VHDL en Verilog aan. Het volgende artikel in onze Verilog-serie zal combinatorische schakelingen in Verilog bespreken.

Ingebed

  1. Cat® Machines Optimaliseren: De Ultieme My.Cat.com Gids
  2. Aan de slag met TJBot: Bouw, Configureer en Stem-bedien Je Eigen AI-robot
  3. Stap-voor-stap Handleiding om een RAK 831 LoRa-gateway op Raspberry Pi 3 te Deployen
  4. Bouw een LoRa Gateway met de RAK831 Module op Raspberry Pi 3 – Stap-voor-Stap Gids
  5. Ontdek de Eagle Group: Uw Partner voor Kwalitatieve Metaalproductie
  6. Een Praktische Gids voor Ceramisch 3D-printen: Technieken, Materialen, en Ontwerptips
  7. AI in verzekeringen: Een praktische startergids voor real-world implementatie
  8. Edge AI Inferencing meesteren: Een praktische gids voor actionable insights
  9. Node-RED op PLCnext deployen met Docker: Stap-voor-stap handleiding
  10. Je eerste Go-applicatie bouwen op PLCnext: Een beginnergids
  11. Code-Ready Containers: Een Praktische Gids voor Cloud-Native Procesautomatisering met Red Hat OpenShift