Отрицательные числа
Часть раздела Основы путешествия по Verilog на Coddy — урок 16 из 90.
В Verilog отрицательные числа представляются с использованием формата дополнительного кода (two's complement). Дополнительный код — это способ представления как положительных, так и отрицательных чисел в двоичной системе. Старший значащий бит (MSB) указывает на знак:
- 0 = положительное число
- 1 = отрицательное число
Как вычислить дополнительный код
Чтобы найти дополнительный код числа:
- Запишите положительное число в двоичной системе
- Инвертируйте все биты (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; // Это -5 в 4-битном дополнительном кодеЗнаковые и беззнаковые числа
По умолчанию 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 рассматривает все значения как положительные
- Арифметика в дополнительном коде работает автоматически при использовании
signed - MSB определяет знак: 1 = отрицательное, 0 = положительное
Задание
Дополните код, записав правильные значения в дополнительном коде.
Что нужно сделать:
- Установите
aв значение -3, используя 4-битное двоичное представление в дополнительном коде - Установите
bв значение -8, используя 4-битное двоичное представление в дополнительном коде - Установите
cв значение -1, используя 4-битное двоичное представление в дополнительном коде
Шпаргалка
В Verilog отрицательные числа используют формат дополнительного кода (two's complement). Старший значащий бит (MSB) указывает на знак: 0 = положительное, 1 = отрицательное.
Вычисление дополнительного кода:
- Запишите положительное число в двоичном виде
- Инвертируйте все биты
- Прибавьте 1
Пример: -5 в 4 битах → 0101 → 1010 → 1011 = 4'b1011
Объявляйте сигналы как signed для работы с отрицательными числами:
reg signed [3:0] negative; // Может хранить от -8 до 7
reg [3:0] positive; // Может хранить от 0 до 15Присваивайте отрицательные значения напрямую или через двоичный дополнительный код:
reg signed [3:0] a;
a = -5; // Verilog автоматически использует дополнительный код
a = 4'b1011; // Эквивалент: -5 в 4-битном дополнительном кодеДиапазон для N-битных знаковых чисел: от -2^(N-1) до 2^(N-1) - 1 (например, 4 бита: от -8 до 7).
Попробуйте сами
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Введение
Что такое 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