Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

Verilog-syntaxis

Lexicale conventies in Verilog zijn vergelijkbaar met C in die zin dat het een stroom tokens bevat. Een lexicale token kan bestaan ​​uit een of meer karakters en tokens kunnen opmerkingen, trefwoorden, cijfers, strings of witruimte zijn. Alle regels moeten worden afgesloten met een puntkomma ; .

Verilog is hoofdlettergevoelig , dus var_a en var_A zijn verschillend.

Opmerkingen

Er zijn twee manieren om opmerkingen te schrijven in Verilog.

  1. Een enkele regel opmerking begint met // en vertelt de Verilog-compiler om alles na dit punt tot het einde van de regel als commentaar te behandelen.
  2. Een meerregelig opmerking begint met /* en eindigt met */ en kan niet worden genest.

Opmerkingen van één regel kunnen echter worden genest in een opmerking van meerdere regels.

  
  
// This is a single line comment

integer a;   // Creates an int variable called a, and treats everything to the right of // as a comment

/*
This is a 
multiple-line or
block comment
*/

/* This is /*
an invalid nested 
block comment */
*/

/* However,
// this one is okay
*/

// This is also okay
///////////// Still okay

  

Witruimte

Witruimte is een term die wordt gebruikt om de tekens voor spaties, tabs, nieuwe regels en formulierinvoeren weer te geven, en wordt meestal genegeerd door Verilog, behalve wanneer het tokens scheidt. In feite helpt dit bij het inspringen van code om het gemakkelijker te lezen te maken.

module dut;              // 'module' is a keyword, 
                         // 'dut' is an identifier
  reg [8*6:1] name = "Hello!";   // The 2 spaces in the beginning are ignored

Spaties (spaties) en tabs (van de TAB-toets) worden echter niet genegeerd in strings. In het onderstaande voorbeeld is de tekenreeks variabele genaamd addr krijgt de waarde "Earth" vanwege het behoud van spaties in strings.

   // There is no space in the beginning of this line, 
   // but there's a space in the string
   reg [8*6:1] addr = "Earth ";     
endmodule 

Operators

Er zijn drie soorten operators:unair , binair , en ternair of voorwaardelijk .

  • Unaire operatoren verschijnen links van hun operand
  • Binaire operatoren verschijnen tussen hun operanden
  • Voorwaardelijke operators hebben twee afzonderlijke operators die drie operanden scheiden
  
  
x = ~y;                // ~ is a unary operator, and y is the operand
x = y | z;             // | is a binary operator, where y and z are its operands
x = (y > 5) ? w : z;   // ?: is a ternary operator, and the expression (y>5), w and z are its operands

  

Als de uitdrukking (y> 5) waar is, dan is variabele x krijgt de waarde in w , anders de waarde in z .

Getalnotatie

We zijn het meest bekend met getallen die worden weergegeven als decimalen. Getallen kunnen echter ook worden weergegeven in binair , octaal en hexadecimaal . Standaard behandelen Verilog-simulators getallen als decimalen. Om ze in een andere radix weer te geven , moeten bepaalde regels worden gevolgd.

16          // Number 16 in decimal
0x10        // Number 16 in hexadecimal
10000       // Number 16 in binary
20          // Number 16 in octal

Formaat

Maatnummers worden weergegeven zoals hieronder weergegeven, waarbij maat wordt alleen in decimalen geschreven om het aantal bits in het getal te specificeren.

  
  
[size]'[base_format][number]

  
  • base_format kan ofwel decimaal ('d of 'D), hexadecimaal ('h of 'H) en octaal ('o of 'O) zijn en specificeert met welk grondtal het getal deel vertegenwoordigt.
  • nummer wordt gespecificeerd als opeenvolgende cijfers van 0, 1, 2 ... 9 voor decimaal formaat en 0, 1, 2 .. 9, A, B, C, D, E, F voor hexadecimaal.

3'b010;     // size is 3, base format is binary ('b), and the number is 010 (indicates value 2 in binary)
3'd2;       // size is 3, base format is decimal ('d) and the number is 2 (specified in decimals)
8'h70;      // size is 8, base format is hexadecimal ('h) and the number is 0x70 (in hex) to represent decimal 112
9'h1FA;     // size is 9, base format is hexadecimal ('h) and the number is 0x1FA (in hex) to represent decimal 506

4'hA = 4'd10 = 4'b1010 = 4'o12	// Decimal 10 can be represented in any of the four formats
8'd234 = 8'D234                 // Legal to use either lower case or upper case for base format
32'hFACE_47B2;                  // Underscore (_) can be used to separate 16 bit numbers for readability

Hoofdletters zijn toegestaan ​​voor nummerspecificatie wanneer het basisformaat hexadecimaal is.

16'hcafe;         // lowercase letters Valid
16'hCAFE;         // uppercase letters Valid
32'h1D40_CAFE;    // underscore can be used as separator between 4 letters Valid

Niet groot

Getallen zonder base_format specificatie zijn decimale getallen door standaard . Nummers zonder maat specificatie hebben een standaard aantal bits, afhankelijk van het type simulator en machine.

  
  
integer a = 5423;       // base format is not specified, a gets a decimal value of 5423
integer a = 'h1AD7;     // size is not specified, because a is int (32 bits) value stored in a = 32'h0000_1AD7

  

Negatief

Negatieve getallen worden gespecificeerd door een min - . te plaatsen teken voor de grootte van een getal. Het is illegaal om een ​​minteken te hebben tussen base_format en nummer .

-6'd3;            // 8-bit negative number stored as two's complement of 3
-6'sd9;           // For signed maths
8'd-4;            // Illegal

Tekenreeksen

Een reeks tekens tussen dubbele aanhalingstekens " " heet een string. Het kan niet worden opgesplitst in meerdere regels en elk teken in de string duurt 1 byte om te worden opgeslagen.

"Hello World!"        // String with 12 characters -> require 12 bytes
"x + z"               // String with 5 characters

"How are you
feeling today ?"      // Illegal for a string to be split into multiple lines

ID's

ID's zijn namen van variabelen, zodat er later naar kan worden verwezen. Ze bestaan ​​uit alfanumerieke tekens [a-z][A-Z][0-9] , onderstreept _ of dollarteken $ en zijn hoofdlettergevoelig. Ze mogen niet beginnen met een cijfer of een dollarteken.

integer var_a;        // Identifier contains alphabets and underscore -> Valid
integer $var_a;       // Identifier starts with $ -> Invalid
integer v$ar_a;       // Identifier contains alphabets and $ -> Valid
integer 2var;         // Identifier starts with a digit -> Invalid
integer var23_g;      // Identifier contains alphanumeric characters and underscore -> Valid
integer 23;           // Identifier contains only numbers -> Invalid

Zoekwoorden

Trefwoorden zijn speciale identifiers die zijn gereserveerd om de taalconstructies te definiëren en zijn in kleine letters. Hieronder vindt u een lijst met belangrijke zoekwoorden.

Verilog-revisies

Verilog heeft in de loop der jaren een aantal revisies ondergaan en tussen 1995 en 2001 zijn er meer toegevoegd, zoals hieronder weergegeven.


Verilog

  1. Verilog-zelfstudie
  2. Verilog-aaneenschakeling
  3. Verilog-opdrachten
  4. Verilog blokkeren en niet-blokkeren
  5. Verilog-functies
  6. Verilog-taak
  7. Verilog-klokgenerator
  8. Verilog wiskundige functies
  9. Verilog Tijdnotatie
  10. Verilog Tijdschaalbereik
  11. Verilog File IO-bewerkingen