Menu
Coddy logo textTech

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

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

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

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

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

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

  1. Запишите положительное число в двоичной системе
  2. Инвертируйте все биты (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;   // Это -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 для включения обработки отрицательных чисел
  • Без signed Verilog рассматривает все значения как положительные
  • Арифметика в дополнительном коде работает автоматически при использовании signed
  • MSB определяет знак: 1 = отрицательное, 0 = положительное
challenge icon

Задание

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

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

  1. Установите a в значение -3, используя 4-битное двоичное представление в дополнительном коде
  2. Установите b в значение -8, используя 4-битное двоичное представление в дополнительном коде
  3. Установите c в значение -1, используя 4-битное двоичное представление в дополнительном коде

Шпаргалка

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

Вычисление дополнительного кода:

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

Пример: -5 в 4 битах → 010110101011 = 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
quiz iconПроверьте себя

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

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