Menu
Coddy logo textTech

Sized Numbers

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

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

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

  • <strong>bits</strong>: количество битов (например, 8)
  • <strong>'</strong>: апостроф, отделяющий размер от формата (обязателен)
  • <strong>format</strong>: основание числа: b для двоичной системы, d для десятичной, h для шестнадцатеричной или o для восьмеричной
  • <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 (левые bits заполняются нулями)

Пример кода:

reg [7:0] data;

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

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

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

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

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

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

С указанием размера:

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

Дополнение нулями

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

reg [7:0] data;
data = 4'b1010;    // Becomes 8'b00001010
challenge icon

Задание

Завершите код, записав правильные числа с указанной разрядностью.

What делать:

  1. Установите a в 8-bit binary-число для decimal 170 (binary 10101010)
  2. Установите b в 4-bit binary-число для decimal 12 (binary 1100)
  3. Установите c в 16-bit hex-число для decimal 255 (hex 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Проверьте себя

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

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

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