Menu
Coddy logo textTech

Векторы

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

Вектор — это многобитный wire или reg. Вместо single bit векторы позволяют работать с шинами data. Это коллекция bits, сгруппированных вместе.

Примечание: Вектор — это не отдельный тип данных. Это просто многобитная версия 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 вектор

Доступ к bits

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

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

Например, data[0] означает «бит номер ноль», а = 1 означает «установить его в высокий уровень». Присвоение десятичного числа, такого как 75, одиночному биту не сохраняет 75 — Verilog незаметно оставляет только его младший бит — поэтому всегда пишите 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

Задание

Для module ниже требуются объявления vector. 

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

  1. Измените каждый input и output, чтобы они стали 8-bit 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Проверьте себя

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

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