Menu
Coddy logo textTech

Vectors

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

vector — это многобитный провод или reg. Вместо одного бита vector позволяет работать с bus данных. Это набор битов, сгруппированных вместе.

Примечание: vector — это не отдельный тип данных. Это просто многобитная версия wire или reg.

wire single;        // Одиночный бит
wire [7:0] bus;     // 8-битный вектор (биты 7 вниз до 0)

Чтобы объявить vector, используется синтаксис [MSB:LSB], где MSB — старший bit, а LSB — младший.

wire [3:0] a;       // 4-битный вектор wire
reg [7:0] data;     // 8-битный вектор reg
wire [15:0] addr;   // 16-битный вектор wire

Доступ к битам

При обращении к отдельным битам или срезам vector вы используете десятичные числа для позиций битов (индексов) и двоичные значения (0 или 1) для присваиваний.

Это связано с тем, что позиция bit — это местоположение (например, адрес), которое естественно выражать десятичным числом, тогда как значение, хранящееся в этом bit, может быть только 0 или 1: бинарный выбор.

Например, data[0] означает «bit номер ноль», а = 1 означает «установить его в высокий уровень». Присваивание десятичного числа, например 75, одному bit не сохраняет 75: Verilog молча оставляет только его младший bit, поэтому всегда явно записывай 0 или 1.

reg [7:0] data;

data = 170;  
data[0] = 1;             // Установить LSB в 1
data[7] = 0;             // Установить MSB в 0
data[3:1] = 3'b101;      // Set bits 3,2,1 to 101 (binary remains)

Порядок битов

Порядок битов имеет значение:

wire [3:0] a;     // a[3] — MSB, a[0] — LSB
wire [0:3] b;     // b[0] — MSB, b[3] — LSB (менее распространено)

Большинство разработчиков используют формат [MSB:LSB], где MSB находится слева.

Присваивание значений

reg [3:0] a;

a = 10;       
a = 5;         
a = 3;        

Срезы векторов

Вы можете обращаться к диапазону битов:

reg [15:0] word;

word[15:8] = 255;        // Присвоить старший байт (8'hFF = 255)
word[7:0]  = 0;          // Присвоить младший байт (8'h00 = 0)
word[3:1]  = 3'b101;     // Assign a slice 
challenge icon

Задание

Модулю ниже нужны объявления vector. 

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

  1. Измените каждый input и output на 8-битовые vector.

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

module vector_example(
  input a,          // Изменить на 8-битный вектор [7:0]
  input b,          // Изменить на 8-битный вектор [7:0]
  output c          // Изменить на 8-битный вектор [7:0]
);
  
  assign c = a & b;
  
endmodule
quiz iconПроверьте себя

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

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

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