Menu
Coddy logo textTech

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

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

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

a = 'b1010;        // Безразмерное: Verilog обрабатывает это как 32 бита
a = 32'b1010;    // То же самое, что и выше, но явно

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

  • <strong>format</strong> — основание системы счисления: b для двоичной, d для десятичной, h для шестнадцатеричной или o для восьмеричной
  • <strong>value</strong> — само число (например, 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;     // Без указания размера: 32-битное десятичное 255
  data = 'hFF;      // Без указания размера: 32-битное шестнадцатеричное FF
end

Безразмерные и размерные

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

Потенциальная проблема

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

reg [3:0] small;
small = 'b1111;      // 32-битное значение, но помещается в 4 бита (нормально)
small = 'b10000;     // 32-битное значение, но слишком велико! (предупреждение)

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

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

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

  • Простых чисел в тестбенчах
  • Счетчиков циклов
  • Инструкций $display

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

challenge icon

Задание

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

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

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

Шпаргалка

Числа без указания размера в Verilog по умолчанию имеют размер 32 бита. Синтаксис: '[format][value]

'b1010   // 32-битное двоичное число
'd255    // 32-битное десятичное число
'hFF     // 32-битное шестнадцатеричное число

Числа с указанием размера используют [bits]'[format][value]:

8'b1010  // 8-битное двоичное число
8'd255   // 8-битное десятичное число
8'hFF    // 8-битное шестнадцатеричное число

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

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

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

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

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