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

Освоение синтаксиса Verilog: ключевые правила и лучшие практики

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

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

Комментарии

Два способа написать комментарии в Verilog:

  1. Однострочный начинается с // и говорит компилятору считать всё до конца строки комментарием.
  2. Многострочный начинается с /* и заканчивается */, вложение недопускается.

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

// Это однострочный комментарий
integer a; // Создаёт int переменную a, всё справа от // — комментарий
/* Это многострочный или блоковый комментарий */
/* Это /* недопустимый вложенный блоковый комментарий */ */
/* Однако // этот вариант допустим */
// Это тоже допустимо
///////////// И это тоже допустимо

Пробелы (Whitespace)

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

module dut; // 'module' — ключевое слово, 'dut' — идентификатор
reg [8*6:1] name = "Hello!"; // 2 пробела в начале игнорируются

Но пробелы и табы не игнорируются в строках. В примере ниже строковая переменная addr получает значение "Earth " из-за сохранения пробелов в строках.

// В начале этой строки нет пробела, но он есть в строке
reg [8*6:1] addr = "Earth ";
endmodule

Операторы

Три типа операторов: унарные, бинарные и тернарные (условные).

x = ~y; // ~ — унарный, y — операнд
x = y | z; // | — бинарный, y и z — операнды
x = (y > 5) ? w : z; // ?: — тернарный, (y>5), w, z — операнды

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

Форматы чисел

Привычны десятичные числа, но Verilog поддерживает двоичные, восьмеричные и шестнадцатеричные. По умолчанию симуляторы traktируют числа как десятичные. Для другого основания (radix) нужны специальные правила.

16       // 16 в десятичной
0x10     // 16 в шестнадцатеричной
10000    // 16 в двоичной
20       // 16 в восьмеричной

Числа с указанием размера (Sized)

Формат: [size]'[base_format][number], где size — только в десятичной, задаёт количество бит.

3'b010;     // размер 3, бинарный, значение 2
3'd2;       // размер 3, десятичный, значение 2
8'h70;      // размер 8, хекс, 0x70 = 112 десятичное
9'h1FA;     // размер 9, хекс, 0x1FA = 506 десятичное
4'hA = 4'd10 = 4'b1010 = 4'o12 // 10 в четырёх форматах
8'd234 = 8'D234 // регистр базы не важен
32'hFACE_47B2; // подчёркивание для читаемости (группы по 16 бит)

Заглавные буквы допустимы для шестнадцатеричных чисел.

16'hcafe; // строчные — допустимо
16'hCAFE; // заглавные — допустимо
32'h1D40_CAFE; // подчёркивание как разделитель — допустимо

Числа без размера (Unsized)

Числа без base_format — десятичные по умолчанию. Без size — ширина по умолчанию зависит от симулятора и машины.

integer a = 5423;      // десятичное 5423
integer a = 'h1AD7;    // размер не указан, a — int (32 бита), значение 32'h0000_1AD7

Отрицательные числа

Указываются минусом - перед размером. Минус между base_format и number недопустим.

-6'd3;    // 8-битное отрицательное (дополнение до двух для 3)
-6'sd9;   // для знаковой арифметики
8'd-4;    // Недопустимо

Строки

Последовательность символов в двойных кавычках " ". Не может быть разбита на несколько строк. Каждый символ — 1 байт.

"Hello World!"           // 12 символов -> 12 байт
"x + z"                  // 5 символов
"How are you feeling today ?" // Недопустимо: строка разбита на несколько строк

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

Идентификаторы — имена переменных для ссылки на них. Состоят из алфавитно-цифровых символов [a-z][A-Z][0-9], подчёркиваний _ или доллара $. Чувствительны к регистру. Не могут начинаться с цифры или доллара.

integer var_a;    // буквы и подчёркивание — OK
integer $var_a;   // начинается с $ — НЕДОПУСТИМО
integer v$ar_a;   // содержит $ — OK
integer 2var;     // начинается с цифры — НЕДОПУСТИМО
integer var23_g;  // алфавитно-цифровые и _ — OK
integer 23;       // только цифры — НЕДОПУСТИМО

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

Ключевые слова — зарезервированные идентификаторы в нижнем регистре для языковых конструктур. Важные ключевые слова показаны на изображении.

Ревизии Verilog

Verilog проходил несколько ревизий с 1995 по 2001 год, показано на изображении.

Verilog

  1. Освоение Verilog: полное руководство по проектированию цифровых схем
  2. Освоение конкатенации в Verilog: практическое руководство
  3. Понимание назначений в Verilog: типы, синтаксис и лучшие практики
  4. Блокирующие и неблокирующие назначения в Verilog: ключевые различия
  5. Мастерство функций в Verilog для эффективного RTL дизайна
  6. Понимание задач (Tasks) в Verilog: отличия от функций, синтаксис и применение
  7. Генератор тактового сигнала в Verilog: проектирование и реализация
  8. Мастерство математических функций Verilog для эффективного аппаратного дизайна
  9. Мастерство $timeformat в Verilog: точность и контроль отображения времени
  10. Понимание и печать timescale в Verilog в любой области видимости