Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Verilog

Syntaxe Verilog

Les conventions lexicales de Verilog sont similaires à C dans le sens où il contient un flux de jetons. Un jeton lexical peut consister en un ou plusieurs caractères et les jetons peuvent être des commentaires, des mots-clés, des nombres, des chaînes ou des espaces blancs. Toutes les lignes doivent être terminées par un point-virgule ; .

Verilog est sensible à la casse , donc var_a et var_A sont différents.

Commentaires

Il existe deux façons d'écrire des commentaires dans Verilog.

  1. Une ligne unique le commentaire commence par // et indique au compilateur Verilog de traiter tout ce qui se trouve après ce point jusqu'à la fin de la ligne comme un commentaire.
  2. Un multiligne le commentaire commence par /* et se termine par */ et ne peut pas être imbriqué.

Cependant, les commentaires sur une seule ligne peuvent être imbriqués dans un commentaire sur plusieurs lignes.

  
  
// 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

  

Espace blanc

L'espace blanc est un terme utilisé pour représenter les caractères des espaces, des tabulations, des retours à la ligne et des sauts de page, et est généralement ignoré par Verilog, sauf lorsqu'il sépare les jetons. En fait, cela aide à l'indentation du code pour le rendre plus facile à lire.

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

Cependant, les blancs (espaces) et les tabulations (à partir de la touche TAB) ne sont pas ignorés dans les chaînes. Dans l'exemple ci-dessous, la chaîne la variable appelée addr prend la valeur "Earth" en raison de la préservation des espaces dans les chaînes.

   // 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 

Opérateurs

Il existe trois types d'opérateurs :unaire , binaire , et ternaire ou conditionnel .

  
  
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

  

Si l'expression (y> 5) est vraie, alors la variable x obtiendra la valeur en w , sinon la valeur en z .

Format des nombres

Nous sommes plus familiers avec les nombres représentés sous forme de décimales. Cependant, les nombres peuvent également être représentés en binaire , octal et hexadécimal . Par défaut, les simulateurs Verilog traitent les nombres comme des décimales. Afin de les représenter dans une base différente , certaines règles doivent être respectées.

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

Taille

Les nombres dimensionnés sont représentés comme indiqué ci-dessous, où taille est écrit uniquement en décimal pour spécifier le nombre de bits dans le nombre.

  
  
[size]'[base_format][number]

  

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

Les lettres majuscules sont autorisées pour la spécification numérique lorsque le format de base est hexadécimal.

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

Non dimensionné

Nombres sans base_format les spécifications sont des nombres décimaux par par défaut . Nombres sans taille spécification ont un nombre de bits par défaut en fonction du type de simulateur et de 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

  

Négatif

Les nombres négatifs sont spécifiés en plaçant un moins - signe avant la taille d'un nombre. Il est illégal d'avoir un signe moins entre base_format et numéro .

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

Chaînes

Une séquence de caractères entre guillemets doubles " " s'appelle une chaîne. Il ne peut pas être divisé en plusieurs lignes et chaque caractère de la chaîne prend 1 octet pour être stocké.

"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

Identifiants

Identifiants sont des noms de variables afin qu'ils puissent être référencés ultérieurement. Ils sont composés de caractères alphanumériques [a-z][A-Z][0-9] , souligne _ ou signe dollar $ et sont sensibles à la casse. Ils ne peuvent pas commencer par un chiffre ou un signe dollar.

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

Mots clés

Les mots-clés sont des identificateurs spéciaux réservés pour définir les constructions du langage et sont en minuscules. Une liste de mots-clés importants est donnée ci-dessous.

Révisions Verilog

Verilog a subi quelques révisions au fil des ans et d'autres ajouts ont été effectués de 1995 à 2001, comme indiqué ci-dessous.


Verilog

  1. Tutoriel Verilog
  2. Concaténation Verilog
  3. Affectations Verilog
  4. Verilog bloquant et non bloquant
  5. Fonctions Verilog
  6. Tâche Verilog
  7. Générateur d'horloge Verilog
  8. Fonctions mathématiques Verilog
  9. Format d'heure Verilog