Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Verilog

Sintaxe Verilog


As convenções lexicais em Verilog são semelhantes a C no sentido de que contém um fluxo de tokens. Um token léxico pode consistir em um ou mais caracteres e os tokens podem ser comentários, palavras-chave, números, strings ou espaços em branco. Todas as linhas devem ser terminadas por um ponto e vírgula ; .

Verilog é diferencia maiúsculas de minúsculas , então var_a e var_A são diferentes.

Comentários


Existem duas maneiras de escrever comentários em Verilog.
  1. Uma linha única o comentário começa com // e diz ao compilador Verilog para tratar tudo após este ponto até o final da linha como um comentário.
  2. Uma linha múltipla o comentário começa com /* e termina com */ e não pode ser aninhado.


No entanto, comentários de linha única podem ser aninhados em um comentário de várias linhas.
  
  
// 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

  

Espaço em branco


Espaço em branco é um termo usado para representar os caracteres de espaços, tabulações, novas linhas e feeds de formulários, e geralmente é ignorado pelo Verilog, exceto quando separa tokens. Na verdade, isso ajuda na indentação do código para torná-lo mais fácil de ler.
module dut;              // 'module' is a keyword, 
                         // 'dut' is an identifier
  reg [8*6:1] name = "Hello!";   // The 2 spaces in the beginning are ignored

No entanto, espaços em branco (espaços) e tabulações (da tecla TAB) não são ignorados em strings. No exemplo abaixo, a string variável chamada addr recebe o valor "Earth" por causa da preservação de espaços nas 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 

Operadores


Existem três tipos de operadores:unários , binário , e ternário ou condicional .
  
  
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

  

Se a expressão (y> 5) for verdadeira, então a variável x obterá o valor em w , senão o valor em z .

Formato numérico


Estamos mais familiarizados com números representados como decimais. No entanto, os números também podem ser representados em binário , octal e hexadecimal . Por padrão, os simuladores Verilog tratam os números como decimais. Para representá-los em uma raiz diferente , algumas regras devem ser seguidas.
16          // Number 16 in decimal
0x10        // Number 16 in hexadecimal
10000       // Number 16 in binary
20          // Number 16 in octal

Tamanho


Os números dimensionados são representados conforme mostrado abaixo, onde tamanho é escrito apenas em decimal para especificar o número de bits no número.
  
  
[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

Letras maiúsculas são válidas para especificação de número quando o formato base é hexadecimal.
16'hcafe;         // lowercase letters Valid
16'hCAFE;         // uppercase letters Valid
32'h1D40_CAFE;    // underscore can be used as separator between 4 letters Valid

Sem tamanho


Números sem um formato_base especificação são números decimais por padrão . Números sem tamanho especificação têm um número padrão de bits dependendo do tipo de simulador e máquina.
  
  
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

  

Negativo


Os números negativos são especificados colocando um menos - sinal antes do tamanho de um número. É ilegal ter um sinal de menos entre base_format e número .
-6'd3;            // 8-bit negative number stored as two's complement of 3
-6'sd9;           // For signed maths
8'd-4;            // Illegal

Cordas


Uma sequência de caracteres entre aspas duplas " " é chamado de cadeia. Ele não pode ser dividido em várias linhas e cada caractere na string leva 1 byte para ser armazenado.
"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

Identificadores


Identificadores são nomes de variáveis ​​para que possam ser referenciadas posteriormente. Eles são compostos de caracteres alfanuméricos [a-z][A-Z][0-9] , sublinha _ ou cifrão $ e diferenciam maiúsculas de minúsculas. Eles não podem começar com um dígito ou um cifrão.
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

Palavras-chave


Palavras-chave são identificadores especiais reservados para definir as construções da linguagem e estão em letras minúsculas. Uma lista de palavras-chave importantes é fornecida abaixo.

Revisões Verilog


A Verilog passou por algumas revisões ao longo dos anos e mais adições foram feitas de 1995 a 2001, conforme mostrado abaixo.

Verilog

  1. Tutorial Verilog
  2. Concatenação Verilog
  3. Atribuições Verilog
  4. Verilog Blocking &Non-Blocking
  5. Funções Verilog
  6. Tarefa Verilog
  7. Gerador de Relógio Verilog
  8. Funções matemáticas Verilog
  9. Formato de hora Verilog
  10. Escopo da escala de tempo da Verilog