Unsized Numbers
Часть раздела Основы путешествия по Verilog на Coddy. Урок 15 из 90.
Число без указанного размера — это число, записанное без указания количества имеющихся у него битов. Когда вы записываете число без префикса размера, Verilog по умолчанию считает, что оно имеет 32 бита.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // То же, что и выше, но явноUnsized числа используют только формат и значение: [format][value]
<strong>format</strong>: основание числа:bдля binary,dдля decimal,hдля шестнадцатеричной системы илиoдля восьмеричной системы<strong>value</strong>: фактическое число (например,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-битный hex FF
endUnsized по сравнению с Sized
| Unsized | Sized | |
|---|---|---|
| Пример | 1010 или 'd255 | 8'b1010 или 8'd255 |
| Разрядность | 32 bits (по умолчанию) | Явно (как указано) |
| Апостроф | Требуется при указании формата | Требуется |
| Когда использовать | Простой код тестового окружения | Присваивания аппаратным средствам |
Потенциальная проблема
Числа Unsized могут cause неожиданное поведение при присваивании регистрам меньшего размера:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small = 'b10000; // 32-битное значение, но слишком большое! (предупреждение)Во втором примере 32-битное значение 10000 присваивается 4-битному регистру. Сохраняются только младшие 4 бита (0000), что может быть не тем, чего вы ожидаете.
Когда использовать Unsized числа
Unsized числа удобны для:
- Простых чисел в тестовых стендах
- Счётчиков циклов
- Операторoв
$display
Для назначений реального оборудования используйте sized числа, чтобы быть явными и избежать предупреждений.
Задание
В приведённом ниже коде некоторые числа имеют размер Unsized. Change их на числа размера sized (8 бит), чтобы избежать предупреждений.
Что нужно сделать:
- Change
aна двоичное число размером 8 бит для 1010 - Change
bна десятичное число размером 8 бит для 255 - Change
cна шестнадцатеричное число размером 8 бит для FF
Попробуйте сами
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // Изменить на sized (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Аппаратное обеспечение и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования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