Отрицательные числа
Часть раздела Основы путешествия по Verilog на Coddy. Урок 16 из 90.
В Verilog отрицательные числа представляются в формате дополнительного кода. Дополнительный код — это способ представления положительных и отрицательных чисел в двоичной системе. Старший бит (MSB) указывает знак:
- 0 = положительное число
- 1 = отрицательное число
Как вычислить дополнительный код
Чтобы найти дополнительный код числа:
- Запишите положительное число в двоичной системе
- Инвертируйте все биты (0 становится 1, 1 становится 0)
- Прибавьте 1
Пример: представление -5 в 4 битах
| Шаг | Операция | Результат |
|---|---|---|
| 1 | Положительное число 5 в двоичной системе | 0101 |
| 2 | Инвертировать все биты | 1010 |
| 3 | Прибавить 1 | 1011 |
-5 в дополнительном коде с разрядностью 4 бита — это 4'b1011
Запись отрицательных чисел в Verilog
Отрицательные числа можно записывать напрямую в десятичном формате:
reg signed [3:0] a;
a = -5; // Verilog автоматически использует дополнительный кодДля двоичных чисел фиксированной разрядности нужно записывать значение в дополнительном коде:
a = 4'b1011; // This is -5 in 4-bit two's complementЗнаковые и беззнаковые
По умолчанию сигналы reg и wire являются беззнаковыми. Чтобы работать с отрицательными числами, объявляйте сигналы как signed:
reg signed [3:0] negative; // Может хранить значения от -8 до 7
reg [3:0] positive; // Может хранить значения от 0 до 15Диапазон знаковых чисел
Для N бит знаковое число может представлять:
- Минимум: -2^(N-1)
- Максимум: 2^(N-1) - 1
| Биты | Диапазон |
|---|---|
| 4 бита | -8 to 7 |
| 8 бит | -128 to 127 |
| 16 бит | -32768 to 32767 |
Важные замечания
- Используйте ключевое слово
signed, чтобы включить обработку отрицательных чисел - Без
signedтипregилиwireрассматривает все значения как положительные
- Арифметика в дополнительном коде работает автоматически при использовании
signed - Старший бит определяет знак: 1 = отрицательное число, 0 = положительное число
Задание
Заверши код, указав правильные значения в дополнительном коде.
Что нужно сделать:
- Присвой
aзначение -3, используя 4-битное двоичное представление в дополнительном коде - Присвой
bзначение -8, используя 4-битное двоичное представление в дополнительном коде - Присвой
cзначение -1, используя 4-битное двоичное представление в дополнительном коде
Попробуйте сами
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Аппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и InitialПотренируйтесь самостоятельно: Онлайн-компилятор Verilog