Числа с заданным размером
Часть раздела Основы путешествия по Verilog на Coddy — урок 14 из 90.
В Verilog существует способ объявить число определенного размера. Это называется числом с указанием размера. Это полезно, поскольку предотвращает путаницу по поводу того, сколько бит содержит ваше число, и гарантирует, что ваше оборудование будет работать именно так, как ожидается.
Число с явно указанным размером имеет следующий формат: [bits]'[format][value]
<strong>bits</strong>— количество бит (например,8)<strong>'</strong>— апостроф, который отделяет размер от формата (обязателен)
<strong>format</strong>— основание системы счисления:bдля двоичной (binary),dдля десятичной (decimal),hдля шестнадцатеричной (hexadecimal) илиoдля восьмеричной (octal)<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 (старшие биты дополняются нулями)
Пример кода:
reg [7:0] data;
data = 8'b10101010; // 8 bits, binary 10101010
data = 8'd170; // 8 бит, десятичное 170
data = 8'hAA; // 8 bits, hex AAВсе three примера присваивают одно и то же значение переменной data.
Почему размер имеет значение
Без указания размера:
reg [7:0] data;
data = 1; // Что это значит? 1 бит? 8 бит?Verilog по умолчанию считает небольшие числа 32-битными, что может вызвать проблемы.
С размером:
reg [7:0] data;
data = 8'b00000001; // Clear: 8-bit value 1Zero Padding
When you assign a smaller value to a larger vector, Verilog fills the left bits with zeros:
reg [7:0] data;
data = 4'b1010; // Becomes 8'b00001010Задание
Дополните код, записав правильные числа с указанием размерности.
Что нужно сделать:
- Установите
aв значение 8-битного двоичного числа для десятичного 170 (двоичное 10101010) - Установите
bв значение 4-битного двоичного числа для десятичного 12 (двоичное 1100) - Установите
cв значение 16-битного шестнадцатеричного числа для десятичного 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Введение
Что такое 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