Корзина

0 Товары - 0.00 RUB
В корзину

Курсы Валют

Курсы Валют  Дата ЦБ
Нал.USD
22.09 66.25
Нал.EUR
22.09 78.08
Нал.CNY
22.09 96.86

Оплата

visa

Реклама

Статьи

Verilog

Лексические соглашения.

Лексические соглашения

Основные лексические обозначения, используемые в языке Verilog HDL (Hardware Design Language - язык проектирования устройств) аналогичны используемым в языке программирования на C. Verilog HDL – язык, чувствительный к регистру символов. Все ключевые слова представляются строчными символами.

 

Пробельные символы

Пробельные символы могут содержать символы пробелов, табуляции, символ разрыва / перевода строки и символ прогона страницы. Эти символы игнорируются, кроме случаев, когда они служат для разделения маркёров. Однако символы пробелов и табуляции имеют существенное значение в строках.

Символы пробелов:

  •  Пустые пробелы
  • Табуляция
  • Символ возврата каретки
  • Символ разрыва строки / Новая строка
  • Символ прогона страницы.

Примеры пробельных символов

функционально эквивалентный код.

Плохой код: Никогда не пишите код как этот:

Verilog Code:
  1. module addbit(a,b,ci,sum,co);
  2. input a,b,ci;output sum co;
  3. wire a,b,ci,sum,co;endmodule

Удачная структура кода: Так надо писать код.

Verilog Code:
  1. module addbit (
  2. a,
  3. b,
  4. ci,
  5. sum,
  6. co);
  7. input a;
  8. input b;
  9. input ci;
  10. output sum;
  11. output co;
  12. wire a;
  13. wire b;
  14. wire ci;
  15. wire sum;
  16. wire co;
  17. endmodule

 Комментарии

 Имеется две формы введения комментариев.

  • Однострочные комментарии начинаются с метки // и заканчивается символом возврата каретки.
  • Многострочные комментарии начинаются с метки /* и заканчивается меткой */

 Примеры комментариев

Verilog Code:
  1. /* Это пример
  2. многострочного
  3. комментария*/
  4. module addbit (
  5. a,
  6. b,
  7. ci,
  8. sum,
  9. co);
  10.  
  11. // Входные порты, однострочный комментарий
  12. input a;
  13. input b;
  14. input ci;
  15. // Выходные порты
  16. output sum;
  17. output co;
  18. // Типы данных
  19. wire a;
  20. wire b;
  21. wire ci;
  22. wire sum;
  23. wire co;
  24.  
  25. endmodule

Чувствительность к состоянию регистра

Verilog HDL – язык, чувствительный к состоянию регистра.

  • Символы нижнего регистра отличаются от символов верхнего регистра.
  • Все ключевые слова языка Verilog представляются строчными символами /символами нижнего регистра/.
Verilog Code:
  1. input //Ключевое слово языка Verilog
  2. wire //Ключевое слово языка Verilog
  3. WIRE //Уникальное имя (не ключевое слово)
  4. Wire //Уникальное имя (не ключевое слово)

ПРИМЕЧАНИЕ: Никогда не используйте ключевые слова в качестве уникальных имен, даже в другом регистре.

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

Идентификаторы – это имена, используемые для обозначения объектов, таких как регистры или функции или модули, имя, на которое можно ссылаться из других частей программы в описание.

  • Идентификаторы должны начинаться с алфавитного символа или символа подчёркивания (a-z A-Z _ )
  • Идентификаторы могут содержать буквы, числа, символ подчёркивания и знак доллара (a-z A-Z 0-9 _ $ ).
  • Идентификаторы могут содержать до 1024 символов.

Примеры стандартных идентификаторов

data_input mu

clk_input my$clk

i386 A

Экранированные идентификаторы

Verilog HDL позволяет использовать любые символы в описании идентификатора путем его экранирования. Экранированные идентификаторы это средство, позволяющее включать в идентификаторы любые символ в коде ASCII (десятичные значения 33 до 126 или 21 до 7Е в шестнадцатеричной системе исчисления)

  • Экранированные идентификаторы начинаются с "обратной косой" ( \ ).
  • Весь идентификатор заканчивается "обратной косой".
  • Экранированный идентификатор прерывается пробельными символами (такие символы как запятые, скобки, двоеточия становятся частью экранированных идентификаторов если только перед ними нет пробельных символов) 
  • Экранированные идентификаторы должны прерываться чтобы символы, следующие за ними, не включались в его структуру.

Примеры экранированных идентификаторов

Verilog не позволяет идентификатору начинаться с числового символа. Поэтому, если Вы все же желаете начать идентификатор с числа, то используйте экранирующий символ, как показано ниже.

Verilog Code:
  1. //Пробельный символ необходимо поместить после
  2. //строки, содержащей экранирующий символ
  3. module \1dff (
  4. q, // Q выход
  5. \q~ , // Q_out выход
  6. d, // D вход
  7. cl$k, // CLOCK вход
  8. \reset* // Reset вход
  9. );
  10.  
  11. input d, cl$k, \reset* ;
  12. output q, \q~ ;
  13.  
  14. endmodule

Числа в языке Verilog

В языке Verilog постоянные числа могут задаваться в десятичной, шестнадцатеричной, восьмеричной или двоичной форматах. Отрицательные числа представляются в дополнительном (2's) коде В языке Verilog, знак вопроса (?) в числовом ряду является альтернативой символа z. Символ подчеркивания (_) действителен в числовом ряду, кроме случая, когда он ставиться на первое место, в этом случае он игнорируется.

Целые числа

Verilog HDL позволяет определять целые числа в виде:

  • Ограниченные или неограниченные числа (размер неограниченных чисел 32 разряда)
  • По двоичному, восьмеричному, десятичному или шестнадцатеричному основаниям
  • Цифры оснований и символы шестнадцатеричных чисел (a,b,c,d,e,f) - чувствительны к состоянию регистра
  • между "размером", "основанием" и "значением" допустимы пропуски

Синтаксис: <size>'<radix><value>;

Пример целых чисел

Целое число

Записывается как

1

00000000000000000000000000000001

8'hAA

10101010

6'b10_0011

100011

'hF

00000000000000000000000000001111

Verilog расширяет значение <value> дополняя нехватку в соответствии в "размером" <size> подставляя значения справа налево

  • В случае если <size> меньше значения <value>, то левые крайние разряды <value> отбрасываются
  • В случае если <size> больше значения <value>,то левые крайние разряды заполняются, в соответствии со значением крайнего левого разряда <value>.
    • Крайний левый разряд '0' или '1' дополняется '0'
    • Крайний левый разряд 'Z' дополняется 'Z'
    • Крайний левый разряд 'X' дополняется 'X'

Примечание: X означает неизвестное; Z – высокоимпедансное состояние; 1 – высокий логический уровень, 1; или 1 и 0 – низкий логический уровень, 0.

Пример целых чисел

Целое число

Записывается как

6'hCA

001010

6'hA

001010

16'bZ

ZZZZZZZZZZZZZZZZ

8'bx

xxxxxxxx

Действительные числа

  • Язык Verilog работает с действительными значениями констант и переменных.
  • Verilog конвертирует действительные значения в целые округлением.
  • Действительные числа не могут содержать 'Z' и/или 'X'
  • Действительные числа могут представляться либо десятичные, либо в экспоненциальном представлении.
  • < value >.< value >
  • < mantissa >E< exponent >
  • При присваивании действительному числу значения целого, оно округляется до ближайшего целого числа.

Пример действительных чисел

Действительное число

Десятичное представление

1.2

1.2

0.6

0.6

3.5E6

3,500000.0

Знаковые и беззнаковые числа

Язык Verilog поддерживает оба типа чисел, но с некоторыми ограничениями. Как и в языке С у нас нет "int" (ключевое слово C++, используемое для объявления объекта целого типа) and "unint", указывающего является ли число знаковым, или беззнаковым целым числом.

Любое число не имеющее знака отрицательной приставки считается положительным. Или косвенно считается "Unsigned" / Беззнаковым.

Отрицательные числа отмечаются знаком минус перед размером (size) для констант, и, таким образом, становятся знаковыми числами. Verilog, внутренними средствами, представляет отрицательные числа в дополнительном (2's) коде. Спецификатор знаковых чисел может быть добавлен в систему, в качестве дополнительной опции для арифметических операций над числами со знакам.

Пример знаковых и беззнаковых чисел

Число

Описание

32'hDEAD_BEEF

Беззнаковое или знаковое положительное число

-14'h1234

Знаковое отрицательное число

Ниже показано как Verilog работает со знаковыми и беззнаковыми числами.

Verilog Code:
  1. module signed_number;
  2.  
  3. reg [31:0] a;
  4.  
  5. initial begin // инициализация
  6. a = 14'h1234;
  7. $display ("Текущее значение a = %h", a);
  8. a = -14'h1234;
  9. $display ("Текущее значение a = %h", a);
  10. a = 32'hDEAD_BEEF;
  11. $display ("Текущее значение a = %h", a);
  12. a = -32'hDEAD_BEEF;
  13. $display ("Текущее значение a = %h", a);
  14. #10 $finish;
  15. end
  16.  
  17. endmodule

Текущее значение a = 00001234

Текущее значение a = ffffedcc

Текущее значение a = deadbeef

Текущее значение a = 21524111

Перевод

Вход

Или классический вход:

Время

Ссылки

Карта сайта Визуальная электроника Полезные ссылки сайта Визуальная электроника


Пользуясь настоящим веб-сайтом, вы даете свое согласие на использование файлов cookies.
Подробнее. Ok