Menu
Coddy logo textTech

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

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

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

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

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

  • <strong>format</strong> — основание системы счисления: b для binary, d для decimal, h для hexadecimal или o для octal
  • <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;     // Unsized: 32-bit decimal 255
  data = 'hFF;      // Без размера: 32-битный hex FF
end

Unsized vs Sized

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

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

Числа Unsized могут cause неожиданное поведение при присваивании более коротким регистрам:

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

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

Когда использовать unsized числа

Unsized числа удобны для:

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

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

challenge icon

Задание

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

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

  1. Измените a на 8-bit binary число для 1010
  2. Измените b на 8-bit decimal число для 255
  3. Измените c на 8-bit hex число для FF

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

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // Изменить на sized (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Проверьте себя

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

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