Menu
Coddy logo textTech

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 числа:

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

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

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

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

Задание

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

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

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

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

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

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