Ngoài Câu trả lời xuất sắc của Marty, đặc điểm SystemVerilog cung cấp loại dữ liệu byte
. Sau đây khai báo một biến 4x8-bit (4 byte), gán cho mỗi byte một giá trị, sau đó hiển thị tất cả các giá trị:
module tb;
byte b [4];
initial begin
foreach (b[i]) b[i] = 1 << i;
foreach (b[i]) $display("Address = %0d, Data = %b", i, b[i]);
$finish;
end
endmodule
này in ra:
Address = 0, Data = 00000001
Address = 1, Data = 00000010
Address = 2, Data = 00000100
Address = 3, Data = 00001000
này cũng tương tự như trong khái niệm để Marty reg [7:0] a [0:3];
. Tuy nhiên, byte
là kiểu dữ liệu 2 trạng thái (0 và 1), nhưng reg
là 4 trạng thái (01xz). Sử dụng byte
cũng yêu cầu chuỗi công cụ của bạn (trình mô phỏng, bộ tổng hợp, v.v.) để hỗ trợ cú pháp SystemVerilog này. Cũng lưu ý cú pháp vòng lặp foreach (b[i])
nhỏ gọn hơn.
Đặc tả SystemVerilog hỗ trợ nhiều loại mảng đa chiều khác nhau. LRM có thể giải thích chúng tốt hơn tôi có thể; tham khảo IEEE Std 1800-2005, chương 5.
Không cho vòng lặp <= 3 chứ không phải <3? –
@RossAiken khai báo mảng kiểu [a: b] là phạm vi bao gồm. Vì vậy, <= là chính xác. – siu
@siu - Ban đầu tôi đã sai - ross-aiken phát hiện ra lỗi và tôi đã chỉnh sửa câu trả lời ... – Marty