Числа заданной разрядности
Часть раздела Основы путешествия по Verilog на Coddy. Урок 14 из 90.
В Verilog можно объявить число определённой разрядности. Такое число называется числом заданной разрядности. Это полезно, потому что позволяет избежать путаницы с количеством битов в числе и гарантирует, что ваше аппаратное обеспечение будет работать именно так, как ожидается.
Число с заданной разрядностью записывается в следующем формате: [bits]'[format][value]
bits: количество битов (например,8)': апостроф, отделяющий размер от формата (обязателен)
format: основание числа:bдля двоичной системы счисления,dдля десятичной,hдля шестнадцатеричной илиoдля восьмеричнойvalue: само число (например,1010)
Например:
4'b1010: 4 бита, двоичное число 1010 (десятичное число 10)8'd255: 8 бит, десятичное число 255 (двоичное число 11111111)16'hFF: 16 бит, шестнадцатеричное число FF (двоичное число 0000000011111111)3'b1: 3 бита, двоичное число 001 (старшие разряды дополняются нулями)
Пример кода:
reg [7:0] data;
data = 8'b10101010; // 8 bits, binary 10101010
data = 8'd170; // 8 бит, десятичное число 170
data = 8'hAA; // 8 bits, hex AAВсе три примера присваивают одно и то же значение data.
Почему размер имеет значение
Без указания размера:
reg [7:0] data;
data = 1; // Что это означает? 1 бит? 8 бит?Verilog по умолчанию считает, что небольшие числа имеют размер 32 бита, что может привести к проблемам.
С указанием размера:
reg [7:0] data;
data = 8'b00000001; // Clear: 8-bit value 1Дополнение нулями
Когда вы присваиваете меньшее значение более широкому вектору, Verilog заполняет старшие биты нулями:
reg [7:0] data;
data = 4'b1010; // Becomes 8'b00001010Задание
Дополните код, записав числа с правильной разрядностью.
Что нужно сделать:
- Присвойте
a8-битное двоичное число, соответствующее десятичному числу 170 (двоичное 10101010) - Присвойте
b4-битное двоичное число, соответствующее десятичному числу 12 (двоичное 1100) - Присвойте
c16-битное шестнадцатеричное число, соответствующее десятичному числу 255 (шестнадцатеричное FF)
Попробуйте сами
module sized_challenge;
reg [7:0] a;
reg [3:0] b;
reg [15:0] c;
initial begin
a = ______; // 8-битное двоичное представление числа 170 (10101010)
b = ______; // 4-битное двоичное представление числа 12 (1100)
c = ______; // 16-битное шестнадцатеричное представление числа 255 (FF)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %h", 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
Проверьте перевод: Конвертер систем счисления