Числа без указания разрядности
Часть раздела Основы путешествия по Verilog на Coddy. Урок 15 из 90.
Число без указанной разрядности — это число, записанное без указания количества битов. Если записать число без префикса, задающего разрядность, Verilog по умолчанию считает его 32-битным.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // То же, что и выше, но указано явноЧисла без указания размера содержат только формат и значение: [format][value]
format: основание числа:bдля двоичной системы,dдля десятичной,hдля шестнадцатеричной илиoдля восьмеричнойvalue: само число (например,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; // Unsized: 32-bit decimal 255
data = 'hFF; // Без указания разрядности: 32-битное шестнадцатеричное значение FF
endБез указания размера и с указанием размера
| Без указания размера | С указанием размера | |
|---|---|---|
| Пример | 1010 или 'd255 | 8'b1010 или 8'd255 |
| Ширина в битах | 32 бита (по умолчанию) | Явная (как указано) |
| Апостроф | Обязателен при указании формата | Обязателен |
| Когда использовать | Простой код тестового стенда | Присваивания аппаратуре |
Возможная проблема
Числа без указанной разрядности могут привести к неожиданному поведению при присваивании их регистрам меньшей разрядности:
reg [3:0] small_reg;
small_reg = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small_reg = 'b10000; // 32-битное значение, но слишком большое! (предупреждение)Во втором примере 32-битное значение 10000 присваивается 4-битному регистру. Сохраняются только младшие 4 бита (0000), и результат может оказаться не таким, как вы ожидаете.
Когда использовать числа без заданной разрядности
Числа без заданной разрядности удобны для:
- Простых чисел в тестовых стендах
- Счётчиков циклов
- операторов
$display
Для реальных аппаратных назначений используй числа с указанием разрядности, чтобы не оставлять двусмысленности и избежать предупреждений.
Задание
В приведённом ниже коде некоторые числа не имеют заданной разрядности. Измените их на числа с заданной разрядностью (8 бит), чтобы избежать предупреждений.
Что нужно сделать:
- Измените
aна 8-битное двоичное число, соответствующее 1010 - Измените
bна 8-битное десятичное число, соответствующее 255 - Измените
cна 8-битное шестнадцатеричное число, соответствующее FF
Попробуйте сами
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Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog
Проверьте перевод: Конвертер систем счисления