Menu
Coddy logo textTech

Числа с заданным размером

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

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

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

  • <strong>bits</strong> — количество бит (например, 8)
  • <strong>'</strong> — апостроф, который отделяет размер от формата (обязателен)
  • <strong>format</strong> — основание системы счисления: b для двоичной (binary), d для десятичной (decimal), h для шестнадцатеричной (hexadecimal) или o для восьмеричной (octal)
  • <strong>value</strong> — само число (например, 1010)

Например:

  • 4'b1010 — 4 bits, binary 1010 (decimal 10)
  • 8'd255 — 8 bits, decimal 255 (binary 11111111)
  • 16'hFF — 16 bits, hex FF (binary 0000000011111111)
  • 3'b1 — 3 bits, binary 001 (старшие биты дополняются нулями)

Пример кода:

reg [7:0] data;

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

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

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

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

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

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

С размером:

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

Zero Padding

When you assign a smaller value to a larger vector, Verilog fills the left bits with zeros:

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

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

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