Menu
CoddyTech

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

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

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

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

Как вычислить дополнительный код

Чтобы найти дополнительный код числа:

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

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

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

-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 = положительное число
challenge icon

Задание

Заверши код, указав правильные значения в дополнительном коде.

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

  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Проверьте себя

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog