Числа заданной разрядности
Часть раздела Основы путешествия по Verilog на Coddy. Урок 14 из 90.
В Verilog есть способ объявить число с определённым размером. Оно называется числом заданного размера. Это полезно, потому что предотвращает путаницу относительно количества битов в вашем числе и гарантирует, что ваше аппаратное обеспечение работает именно так, как ожидается.
Число с указанным размером имеет следующий формат: [bits]'[format][value]
<strong>bits</strong>: количество битов (например,8)<strong>'</strong>: апостроф, отделяющий размер от формата (обязателен)
<strong>format</strong>: основание числа:bдля двоичной системы,dдля десятичной,hдля шестнадцатеричной илиoдля восьмеричной<strong>value</strong>: фактическое число (например,1010)
Например:
4'b1010: 4 bits, binary 1010 (decimal 10)8'd255: 8 bits, decimal 255 (binary 11111111)16'hFF: 16 bits, hex FF (binary 0000000011111111)3'b1: 3 bits, binary 001 (левые bits заполняются нулями)
Пример кода:
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Задание
Завершите код, записав правильные числа с указанной разрядностью.
What делать:
- Установите
aв 8-bit binary-число для decimal 170 (binary 10101010) - Установите
bв 4-bit binary-число для decimal 12 (binary 1100) - Установите
cв 16-bit hex-число для decimal 255 (hex 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