Negative Numbers
Часть раздела Основы путешествия по Verilog на Coddy. Урок 16 из 90.
В Verilog числа negative представлены в формате two's complement. Two's complement — это способ представления положительных и отрицательных чисел в двоичной системе. Наиболее значимый bit (MSB) указывает знак:
- 0 = positive число
- 1 = negative число
Как вычислить two's complement
Чтобы найти two's complement числа:
- Запишите positive число в двоичной системе
- Инвертируйте все bit (0 становится 1, 1 становится 0)
- Добавьте 1
Пример: представить -5 в 4 битах
| Шаг | Операция | Результат |
|---|---|---|
| 1 | Положительное число 5 в двоичной системе | 0101 |
| 2 | Инвертировать все биты | 1010 |
| 3 | Добавить 1 | 1011 |
-5 в 4-битном дополнительном коде равно <strong>4'b1011</strong>
Запись отрицательных чисел в Verilog
Вы можете записывать отрицательные числа напрямую в десятичном формате:
reg signed [3:0] a;
a = -5; // Verilog автоматически использует дополнительный кодДля двоичных чисел с заданной разрядностью необходимо записать значение в дополнительном коде two's complement:
a = 4'b1011; // This is -5 in 4-bit two's complementЗнаковые и беззнаковые числа
По умолчанию Verilog обрабатывает числа как беззнаковые. Чтобы работать с отрицательными числами, объявляйте сигналы как signed:
reg signed [3:0] negative; // Может хранить от -8 до 7
reg [3:0] positive; // Может хранить от 0 до 15Диапазон знаковых чисел
Для N бит знаковое число может представлять:
- Минимум: -2^(N-1)
- Максимум: 2^(N-1) - 1
| Биты | Диапазон |
|---|---|
| 4 бита | -8 до 7 |
| 8 бит | -128 до 127 |
| 16 бит | -32768 до 32767 |
Важные замечания
- Используйте ключевое слово
signed, чтобы включить обработку отрицательных чисел - Без
signedVerilog рассматривает все значения как положительные
- Арифметика дополнительного кода работает automatically при использовании
signed - MSB определяет знак: 1 = negative, 0 = positive
Задание
Завершите код, записав правильные значения two's complement.
Что нужно сделать:
- Установите
aравным -3, используя 4-битное двоичное представление two's complement - Установите
bравным -8, используя 4-битное двоичное представление two's complement - Установите
cравным -1, используя 4-битное двоичное представление two's complement
Попробуйте сами
module negative_challenge;
reg signed [3:0] a, b, c;
initial begin
a = 4'b______; // -3 in 4-bit two's complement
b = 4'b______; // -8 in 4-bit two's complement
c = 4'b______; // -1 in 4-bit two's complement
$display("a = %d", a);
$display("b = %d", b);
$display("c = %d", 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