Числа без заданного размера
Часть раздела Основы путешествия по Verilog на Coddy — урок 15 из 90.
Безразмерное число — это число, записанное без указания количества бит. Когда вы записываете число без префикса размера, Verilog по умолчанию считает его 32-битным.
a = 'b1010; // Безразмерное: Verilog обрабатывает это как 32 бита
a = 32'b1010; // То же самое, что и выше, но явноЧисла без указания размера используют только формат и значение: [format][value]
<strong>format</strong>— основание системы счисления:bдля двоичной,dдля десятичной,hдля шестнадцатеричной илиoдля восьмеричной<strong>value</strong>— само число (например,1010)
Апостроф ' по-прежнему требуется между форматом и значением, но перед ним не указывается количество бит.
'b1010— 32-битное двоичное 1010'd255— 32-битное десятичное 255'hFF— 32-битное шестнадцатеричное FF'b1— 32-битное двоичное 1 (с 31 ведущим нулем)
Пример кода:
reg [7:0] data;
initial begin
data = 1010; // Без указания размера: 32-битное значение (может вызвать предупреждение)
data = 'd255; // Без указания размера: 32-битное десятичное 255
data = 'hFF; // Без указания размера: 32-битное шестнадцатеричное FF
endБезразмерные и размерные
| Безразмерные | Размерные | |
|---|---|---|
| Пример | 1010 или 'd255 | 8'b1010 или 8'd255 |
| Разрядность | 32 бита (по умолчанию) | Явная (как указано) |
| Апостроф | Требуется при указании формата | Требуется |
| Когда использовать | Простой код тестбенча | Аппаратные присваивания |
Потенциальная проблема
Числа без указания размера могут привести к неожиданному поведению при присваивании регистрам меньшего размера:
reg [3:0] small;
small = 'b1111; // 32-битное значение, но помещается в 4 бита (нормально)
small = 'b10000; // 32-битное значение, но слишком велико! (предупреждение)Во втором примере 32-битное значение 10000 присваивается 4-битному регистру. Сохраняются только младшие 4 бита (0000), что может не соответствовать вашим ожиданиям.
Когда использовать числа без указания размера
Числа без указания размера удобны для:
- Простых чисел в тестбенчах
- Счетчиков циклов
- Инструкций
$display
Для реального назначения сигналов в аппаратуре используйте числа с указанием разрядности, чтобы явно задавать значения и избегать предупреждений.
Задание
В приведенном ниже коде некоторые числа не имеют заданного размера. Измените их на числа с заданным размером (8 бит), чтобы избежать предупреждений.
Что нужно сделать:
- Измените
aна 8-битное двоичное число для 1010 - Измените
bна 8-битное десятичное число для 255 - Измените
cна 8-битное шестнадцатеричное число для FF
Шпаргалка
Числа без указания размера в Verilog по умолчанию имеют размер 32 бита. Синтаксис: '[format][value]
'b1010 // 32-битное двоичное число
'd255 // 32-битное десятичное число
'hFF // 32-битное шестнадцатеричное числоЧисла с указанием размера используют [bits]'[format][value]:
8'b1010 // 8-битное двоичное число
8'd255 // 8-битное десятичное число
8'hFF // 8-битное шестнадцатеричное числоПри присваивании числа без указания размера регистру меньшего размера сохраняются только младшие биты — используйте числа с указанием размера для аппаратных присваиваний, чтобы избежать предупреждений и неожиданного усечения.
Попробуйте сами
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // Измените на значение с указанием размера (8-битное десятичное)
c = 'hFF; // Change to sized (8-bit hex)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %b", c);
$finish;
end
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial