Menu
CoddyTech

Числа без указания разрядности

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

Число без указанной разрядности — это число, записанное без указания количества битов. Если записать число без префикса, задающего разрядность, Verilog по умолчанию считает его 32-битным.

a = 'b1010;        // Unsized: Verilog treats this as 32 bits
a = 32'b1010;    // То же, что и выше, но указано явно

Числа без указания размера содержат только формат и значение: [format][value]

  • format: основание числа: b для двоичной системы, d для десятичной, h для шестнадцатеричной или o для восьмеричной
  • value: само число (например, 1010)

Апостроф ' по-прежнему требуется перед буквой формата, но перед ним нет количества битов.

  • 'b1010: 32-битное двоичное число 1010
  • 'd255: 32-битное десятичное число 255
  • 'hFF: 32-битное шестнадцатеричное число FF
  • 'b1: 32-битное двоичное число 1 (с 31 ведущим нулём)

Пример кода:

reg [7:0] data;

initial begin
  data = 1010;      // Без указания разрядности: 32-битное значение (может вызвать предупреждение)
  data = 'd255;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // Без указания разрядности: 32-битное шестнадцатеричное значение FF
end

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

 Без указания размераС указанием размера
Пример1010 или 'd2558'b1010 или 8'd255
Ширина в битах32 бита (по умолчанию)Явная (как указано)
АпострофОбязателен при указании форматаОбязателен
Когда использоватьПростой код тестового стендаПрисваивания аппаратуре

Возможная проблема

Числа без указанной разрядности могут привести к неожиданному поведению при присваивании их регистрам меньшей разрядности:

reg [3:0] small_reg;
small_reg = 'b1111;   // 32-bit value, but fits in 4 bits (fine)
small_reg = 'b10000;  // 32-битное значение, но слишком большое! (предупреждение)

Во втором примере 32-битное значение 10000 присваивается 4-битному регистру. Сохраняются только младшие 4 бита (0000), и результат может оказаться не таким, как вы ожидаете.

Когда использовать числа без заданной разрядности

Числа без заданной разрядности удобны для:

  • Простых чисел в тестовых стендах
  • Счётчиков циклов
  • операторов $display

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

challenge icon

Задание

В приведённом ниже коде некоторые числа не имеют заданной разрядности. Измените их на числа с заданной разрядностью (8 бит), чтобы избежать предупреждений.

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

  1. Измените a на 8-битное двоичное число, соответствующее 1010
  2. Измените b на 8-битное десятичное число, соответствующее 255
  3. Измените c на 8-битное шестнадцатеричное число, соответствующее FF

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

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // Замените на запись с указанной разрядностью (8-битное десятичное число)
    c = 'hFF;      // Change to sized (8-bit hex)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %b", c);
    $finish;
  end
endmodule
quiz iconПроверьте себя

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

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

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

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