Menu
Coddy logo textTech

Отрицательные числа

Часть раздела Основы путешествия по Verilog на Coddy — урок 16 из 90.

В Verilog отрицательные числа представляются с использованием формата дополнительного кода (two's complement). Дополнительный код — это способ представления как положительных, так и отрицательных чисел в двоичном виде. Старший значащий бит (MSB) указывает на знак:

  • 0 = положительное число
  • 1 = отрицательное число

Как вычислить дополнение до двух (Two's Complement)

Чтобы найти дополнительный код (two's complement) числа:

  1. Запишите положительное число в двоичной системе
  2. Инвертируйте все биты (0 становится 1, 1 становится 0)
  3. Прибавьте 1

Пример: Представление -5 в 4 bit

ШагОперацияРезультат
1Positive 5 в двоичном коде0101
2Инвертировать все bit1010
3Прибавить 11011

-5 в 4-bit двух (two's) complement — это <strong>4'b1011</strong>

Запись отрицательных чисел в Verilog

Вы можете записывать отрицательные числа напрямую, используя десятичный формат:

reg signed [3:0] a;
a = -5;        // Verilog автоматически использует дополнительный код

Для двоичных чисел с указанием размерности необходимо записывать значение в дополнительном коде:

a = 4'b1011;   // This is -5 in 4-bit two's complement

Signed vs Unsigned

По умолчанию Verilog обрабатывает числа как unsigned. Чтобы работать с отрицательными числами, объявляйте сигналы как 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 для включения обработки отрицательных чисел
  • Без signed Verilog рассматривает все значения как положительные
  • Арифметика в дополнительном коде работает automatically при использовании signed
  • Старший бит (MSB) определяет знак: 1 = negative, 0 = positive
challenge icon

Задание

Дополните код, записав правильные значения в дополнительном коде (two's complement).

Что нужно сделать:

  1. Присвойте a значение -3, используя 4-битный двоичный дополнительный код
  2. Присвойте b значение -8, используя 4-битный двоичный дополнительный код
  3. Присвойте 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы