Hiểu Về Toán Tử Và Cú Pháp Cơ Bản Trong Verilog HDL

Chương 3: Cú Pháp Cơ Bản Verilog HDL (Phần 2)

3.3. Toán Tử Và Biểu Thức

Ngôn ngữ Verilog HDL cung cấp nhiều loại toán tử được phân loại theo chức năng:

  • Toán tử số học
  • Toán tử bit
  • Toán tử logic
  • Toán tử quan hệ
  • Toán tử so sánh
  • Toán tử dịch bit
  • Toán tử nối bit (Concatenation)
  • Toán tử rút gọn (Reduction)
3.3.1. Toán Tử Số Học

Các toán tử số học trong Verilog:

+Cộng hoặc giá trị dương
-Trừ hoặc giá trị âm
*Nhân
/Chia
%Lấy dư (chỉ áp dụng cho số nguyên)

Lưu ý: Kết quả chia số nguyên chỉ lấy phần nguyên. Dấu của phép lấy dư phụ thuộc vào toán hạng đầu tiên.

3.3.2. Toán Tử Bit

Verilog hỗ trợ 5 toán tử thao tác trên từng bit:

  • ~ (NOT đơn nguyên)
  • & (AND)
  • | (OR)
  • ^ (XOR)
  • ^~ (XNOR)
Bảng chân trị toán tử NOT
Ngõ vàoKết quả
10
01
XX
3.3.3. Toán Tử Logic
&&AND logic
||OR logic
!NOT logic

Kết quả trả về 0 (sai), 1 (đúng) hoặc X (không xác định).

3.3.4. Toán Tử Quan Hệ
  • < (nhỏ hơn)
  • > (lớn hơn)
  • <= (nhỏ hơn hoặc bằng)
  • >= (lớn hơn hoặc bằng)
3.3.5. Toán Tử So Sánh
==So sánh giá trị (bỏ qua X/Z)
===So sánh chính xác (kể cả X/Z)
3.3.6. Toán Tử Dịch Bit

4'b1001 << 2  // Kết quả: 6'b100100
4'b1001 >> 1  // Kết quả: 4'b0100
3.3.7. Toán Tử Nối Bit

{a, b[3:0], 3'b101}  // Tương đương {a, b[3], b[2], b[1], b[0], 1'b1, 1'b0, 1'b1}
{4{data}}           // Tương đương {data, data, data, data}
3.3.8. Toán Tử Rút Gọn

reg [3:0] A;
reg result;
result = ^A;  // Tương đương: result = A[0] ^ A[1] ^ A[2] ^ A[3];
3.3.9. Thứ Tự Ưu Tiên Toán Tử

Các toán tử có thứ tự ưu tiên khác nhau ảnh hưởng đến kết quả biểu thức. Nên dùng dấu ngoặc đơn để xác định rõ ràng thứ tự tính toán.

3.4. Câu Lệnh Gán Và Khối Lệnh

3.4.1. Hai Kiểu Gán Cơ Bản
  • Gán chặn (Blocking): = - Cập nhật giá trị ngay lập tức
  • Gán không chặn (Non-blocking): <= - Cập nhật sau khi khối lệnh hoàn tất
3.4.2. Khối Lệnh

Khối begin...end thực thi tuần tự:


begin
  a = 1;
  b = a;  // b = 1
end

Khối fork...join thực thi song song:


fork
  a = 1;
  b = 0;
join

3.5. Câu Lệnh Điều Kiện

3.5.1. Câu Lệnh If-Else

if (x > y) 
  result = HIGH;
else 
  result = LOW;
3.5.2. Câu Lệnh Case

case (sel)
  2'b00: out = a;
  2'b01: out = b;
  default: out = 0;
endcase

3.6. Vòng Lặp

3.6.1. Vòng Lặp Forever

initial begin
  forever #5 clk = ~clk;
end
3.6.2. Vòng Lặp Repeat

repeat (8) begin
  shift_reg = {shift_reg[6:0], din};
end
3.6.3. Vòng Lặp While

while (count < 10) begin
  count = count + 1;
end
3.6.4. Vòng Lặp For

for (i=0; i<8; i=i+1) begin
  sum = sum + data[i];
end

Thẻ: Verilog HDL thiết kế số ngôn ngữ mô tả phần cứng RTL FPGA

Đăng vào ngày 29 tháng 5 lúc 02:04