Menu
CoddyTech

Числа заданной разрядности

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

В Verilog можно объявить число определённой разрядности. Такое число называется числом заданной разрядности. Это полезно, потому что позволяет избежать путаницы с количеством битов в числе и гарантирует, что ваше аппаратное обеспечение будет работать именно так, как ожидается.

Число с заданной разрядностью записывается в следующем формате: [bits]'[format][value]

  • bits: количество битов (например, 8)
  • ': апостроф, отделяющий размер от формата (обязателен)
  • format: основание числа: b для двоичной системы счисления, d для десятичной, h для шестнадцатеричной или o для восьмеричной
  • value: само число (например, 1010)

Например:

  • 4'b1010: 4 бита, двоичное число 1010 (десятичное число 10)
  • 8'd255: 8 бит, десятичное число 255 (двоичное число 11111111)
  • 16'hFF: 16 бит, шестнадцатеричное число FF (двоичное число 0000000011111111)
  • 3'b1: 3 бита, двоичное число 001 (старшие разряды дополняются нулями)

Пример кода:

reg [7:0] data;

data = 8'b10101010;   // 8 bits, binary 10101010
data = 8'd170;        // 8 бит, десятичное число 170
data = 8'hAA;         // 8 bits, hex AA

Все три примера присваивают одно и то же значение data.

Почему размер имеет значение

Без указания размера:

reg [7:0] data;
data = 1;        // Что это означает? 1 бит? 8 бит?

Verilog по умолчанию считает, что небольшие числа имеют размер 32 бита, что может привести к проблемам.

С указанием размера:

reg [7:0] data;
data = 8'b00000001;   // Clear: 8-bit value 1

Дополнение нулями

Когда вы присваиваете меньшее значение более широкому вектору, Verilog заполняет старшие биты нулями:

reg [7:0] data;
data = 4'b1010;    // Becomes 8'b00001010
challenge icon

Задание

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

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

  1. Присвойте a 8-битное двоичное число, соответствующее десятичному числу 170 (двоичное 10101010)
  2. Присвойте b 4-битное двоичное число, соответствующее десятичному числу 12 (двоичное 1100)
  3. Присвойте c 16-битное шестнадцатеричное число, соответствующее десятичному числу 255 (шестнадцатеричное FF)

Попробуйте сами

module sized_challenge;
  reg [7:0] a;
  reg [3:0] b;
  reg [15:0] c;
  
  initial begin
    a = ______;   // 8-битное двоичное представление числа 170 (10101010)
    b = ______;   // 4-битное двоичное представление числа 12 (1100)
    c = ______;   // 16-битное шестнадцатеричное представление числа 255 (FF)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %h", c);
    $finish;
  end
endmodule
quiz iconПроверьте себя

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

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

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

Проверьте перевод: Конвертер систем счисления