Menu
Coddy logo textTech

Unsized Numbers

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

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

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

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

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

Unsized по сравнению с Sized

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

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

Числа 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 числа удобны для:

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

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

challenge icon

Задание

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

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

  1. Change a на двоичное число размером 8 бит для 1010
  2. Change b на десятичное число размером 8 бит для 255
  3. Change c на шестнадцатеричное число размером 8 бит для 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Проверьте себя

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

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

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