Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Verilog

Синтаксис Verilog

Лексические соглашения в Verilog аналогичны C в том смысле, что он содержит поток токенов. Лексическая лексема может состоять из одного или нескольких символов, а лексемы могут быть комментариями, ключевыми словами, числами, строками или пробелами. Все строки должны заканчиваться точкой с запятой ; .

Verilog чувствителен к регистру , поэтому var_a и var_A разные.

Комментарии

Есть два способа писать комментарии в Verilog.

  1. одна строка комментарий начинается с // и указывает компилятору Verilog рассматривать все после этой точки до конца строки как комментарий.
  2. A многострочный комментарий начинается с /* и заканчивается на */ и не может быть вложенным.

Однако однострочные комментарии могут быть вложены в многострочный комментарий.

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

  

Пробел

Пустое пространство — это термин, используемый для представления символов пробелов, табуляции, новой строки и перевода страницы, и обычно Verilog игнорирует его, за исключением случаев, когда он разделяет токены. На самом деле, это помогает делать отступы в коде, чтобы его было легче читать.

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

Однако пробелы (пробелы) и табуляции (от клавиши TAB) не игнорируются в строках. В приведенном ниже примере строка переменная с именем addr получает значение "Земля" из-за сохранения пробелов в строках.

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

Операторы

Существует три типа операторов:унарные , двоичный и тройное или условное .

  
  
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

  

Если выражение (y> 5) истинно, то переменная x получит значение в w , иначе значение в z .

Числовой формат

Мы больше всего знакомы с числами, представленными в виде десятичных дробей. Однако числа также могут быть представлены в двоичном формате. , восьмеричный и шестнадцатеричный . По умолчанию симуляторы Verilog обрабатывают числа как десятичные дроби. Чтобы представить их в другом основании счисления , необходимо соблюдать определенные правила.

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

Размер

Числа с размерами представлены, как показано ниже, где размер записывается только в десятичном виде, чтобы указать количество битов в числе.

  
  
[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

Буквы верхнего регистра допустимы для указания числа, если базовый формат — шестнадцатеричный.

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

Без размера

Числа без base_format спецификация - десятичные числа по по умолчанию . Числа без размера спецификация имеет количество битов по умолчанию в зависимости от типа симулятора и машины.

  
  
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

  

Отрицательно

Отрицательные числа указываются минусом - знак перед размером числа. Недопустимо иметь знак минус между base_format и номер .

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

Строки

Последовательность символов, заключенная в двойные кавычки " " называется строкой. Его нельзя разбить на несколько строк, и каждый символ в строке занимает 1 байт для хранения.

"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

Идентификаторы

Идентификаторы - это имена переменных, чтобы на них можно было ссылаться позже. Они состоят из буквенно-цифровых символов [a-z][A-Z][0-9] , подчеркивание _ или знак доллара $ и чувствительны к регистру. Они не могут начинаться с цифры или знака доллара.

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

Ключевые слова

Ключевые слова — это специальные идентификаторы, зарезервированные для определения языковых конструкций и написанные в нижнем регистре. Список важных ключевых слов приведен ниже.

Версии Verilog

За прошедшие годы Verilog претерпел несколько изменений, и в период с 1995 по 2001 год были внесены дополнительные дополнения, как показано ниже.


Verilog

  1. Учебник Verilog
  2. Конкатенация Verilog
  3. Верилог Задания
  4. Блокировка и неблокировка Verilog
  5. Верилог-функции
  6. Верилог Задача
  7. Генератор часов Verilog
  8. Математические функции Verilog
  9. Формат времени Verilog
  10. Охват шкалы времени Verilog