Sized Numbers
Часть раздела Основы путешествия по 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Аппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicПотренируйтесь самостоятельно: Онлайн-компилятор Verilog