Menu
CoddyTech

Vectơ

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 9 trên 90.

Vector là một dây hoặc reg nhiều bit. Thay vì chỉ có một bit, vector cho phép bạn làm việc với các bus dữ liệu. Đây là một tập hợp các bit được nhóm lại với nhau.

Lưu ý: Vector không phải là một kiểu dữ liệu riêng. Nó chỉ đơn giản là phiên bản nhiều bit của wire hoặc reg.

wire single;        // Một bit
wire [7:0] bus;     // Vectơ 8 bit (từ bit 7 đến bit 0)

Để khai báo một vector, bạn dùng cú pháp [MSB:LSB], trong đó MSB là bit có trọng số lớn nhất và LSB là bit có trọng số nhỏ nhất.

wire [3:0] a;       // Vectơ wire 4 bit
reg [7:0] data;     // Vectơ reg 8 bit
wire [15:0] addr;   // Vectơ wire 16 bit

Truy cập các bit

Khi truy cập từng bit hoặc một phần của vectơ, bạn dùng số thập phân để chỉ vị trí bit (chỉ số) và giá trị nhị phân (0 hoặc 1) để gán.

Điều này là vì vị trí bit là một vị trí (giống như một địa chỉ), vốn được biểu thị bằng số thập phân, còn giá trị lưu trong bit đó chỉ có thể là 0 hoặc 1: một lựa chọn nhị phân.

Ví dụ, data[0] có nghĩa là “bit số không”, còn = 1 có nghĩa là “đặt nó ở mức cao”. Gán một số thập phân như 75 cho một bit đơn lẻ không lưu được giá trị 75. Verilog âm thầm chỉ giữ lại bit thấp nhất, vì vậy hãy luôn ghi rõ 0 hoặc 1.

reg [7:0] data;

data = 170;  
data[0] = 1;             // Đặt LSB thành 1
data[7] = 0;             // Đặt MSB thành 0
data[3:1] = 3'b101;      // Set bits 3,2,1 to 101 (binary remains)

Thứ tự bit

Thứ tự các bit rất quan trọng:

wire [3:0] a;     // a[3] là bit có trọng số cao nhất (MSB), a[0] là bit có trọng số thấp nhất (LSB)
wire [0:3] b;     // b[0] là bit có trọng số cao nhất (MSB), b[3] là bit có trọng số thấp nhất (LSB), ít gặp hơn

Hầu hết các nhà thiết kế dùng định dạng [MSB:LSB], với MSB ở bên trái.

Gán giá trị

reg [3:0] a;

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

Lát cắt vector

Bạn có thể truy cập một khoảng bit:

reg [15:0] word;

word[15:8] = 255;        // Gán giá trị cho byte cao (8'hFF = 255)
word[7:0]  = 0;          // Gán giá trị cho byte thấp (8'h00 = 0)
word[3:1]  = 3'b101;     // Assign a slice 
challenge icon

Thử thách

Mô-đun bên dưới cần khai báo vector. 

Cần làm: 

  1. Chuyển mỗi đầu vào và đầu ra thành vector 8 bit.

Tự làm thử

module vector_example(
  input a,          // Đổi thành vector 8 bit [7:0]
  input b,          // Đổi thành vector 8 bit [7:0]
  output c          // Đổi thành vector 8 bit [7:0]
);
  
  assign c = a & b;
  
endmodule
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online