Menu
Coddy logo textTech

Векторы

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

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

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

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

Для объявления вектора используется синтаксис [MSB:LSB], где MSB — это старший значащий бит, а LSB — младший значащий бит.

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

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

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

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

Например, data[0] означает «нулевой бит», а = 1 означает «установить его в высокое состояние». Вы не можете присвоить десятичное число, такое как 75, одному биту, потому что в бите нет места для значений, отличных от 0 или 1.

reg [7:0] data;

data = 170;  
data[0] = 1;             // Установить LSB в 1
data[7] = 0;             // Установить MSB в 0
data[3:1] = 3'b101;      // Установить биты 3,2,1 в 101 (двоичный код сохраняется)

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

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

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;     // Присвоить значение слайсу 
challenge icon

Задание

Модулю ниже требуются объявления векторов. 

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

  1. Измените каждый вход и выход так, чтобы они стали 8-битными векторами.

Шпаргалка

Вектор (vector) — это многобитный wire или reg, объявляемый с использованием синтаксиса [MSB:LSB]:

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

Доступ к отдельным битам и срезам:

reg [7:0] data;

data[0] = 1;          // Установить LSB в 1
data[7] = 0;          // Установить MSB в 0
data[3:1] = 3'b101;   // Установить биты 3,2,1, используя двоичный код

Порядок битов: [MSB:LSB] является стандартным соглашением (например, [7:0] означает, что бит 7 — это MSB, а бит 0 — LSB).

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

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Проверьте себя

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

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