5 / 37 · Khái niệm
logic, wire, X/Z và độ rộng rõ ràng
Tách kiểu, nguồn điều khiển và lưu trữ; kiểm tra hằng, so sánh, mở rộng và giá trị chưa biết.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Kiểu, điều khiển và lưu trữ là ba câu hỏi
logic là kiểu bốn trạng thái; wire mô tả kết nối mạng cũng mang bốn trạng thái. Biến logic có thể là kết quả tổ hợp hoặc trạng thái clock tùy quy tắc nguồn điều khiển. Tên không bảo đảm flip-flop: tìm phép gán liên tục, khối tổ hợp hoặc khối cạnh. Dùng một nguồn dự kiến cho tín hiệu thông thường. Mạng nhiều nguồn có phân giải và giao diện hai chiều cần hợp đồng điện/công cụ khác, ngoài các ví dụ này.
Xác định độ rộng và cách hiểu
logic [7:0] u có tám bit không dấu; logic signed [7:0] s hiểu cùng bit theo bù hai. 8'hFF là 255 cho u và −1 cho s. Vectơ packed gom bit, không phải tám giá trị nối tiếp theo thời gian.
module typed_examples (
input logic [3:0] a, b,
input logic signed [7:0] s,
output logic [4:0] full_sum,
output logic signed [8:0] extended_s,
output logic negative,
output logic any_bit, all_bits, parity
);
assign full_sum = {1'b0, a} + {1'b0, b};
assign extended_s = {s[7], s};
assign negative = s < 8'sd0;
assign any_bit = |a;
assign all_bits = &a;
assign parity = ^a;
endmoduleextended_s lặp bit dấu; thêm zero biến −1 thành +255. Nối bit là biểu thức không dấu, nên số học signed cần cách hiểu rõ hoặc biến trung gian phù hợp. Ở đây mẫu bit mong muốn được gán vào đích signed. Dùng 4'd15,8'hFF,8'sd0 khi độ rộng quan trọng. Hằng số không ghi kích thước có thể mở rộng biểu thức: xem cả hai toán hạng và ngữ cảnh gán, không chỉ vế trái.
Ba họ toán tử
a & b theo từng bit; a && b kiểm tra cả hai vectơ là đúng và trả một bit;&a rút gọn yêu cầu mọi bit 1. a=0011, b=0101 cho 0001,1,0. ^a tính parity,0 với 0011. Tách biểu thức mơ hồ thành trung gian để ghi miền giá trị.
Chưa biết không phải điện áp thứ ba
X là chưa biết, Z là trở kháng cao, không phải điện áp cụ thể. Mô hình hai trạng thái không chứng minh bốn trạng thái. Reset rõ ràng thay vì giấu X thành zero. == có thể trả X khi không quyết định được; actual !== expected trong testbench báo X/Z trước kỳ vọng biết. Case equality không phát hiện X vật lý trong phần cứng thông thường.
Thực hành: mở rộng, cộng, so sánh
a=15, b=1 cho full_sum=10000. s=8'h80 cho extended_s=110000000, negative=1; s=8'h7F cho 001111111, negative=0. Thử zero, lớn nhất dương, nhỏ nhất âm và −1. Đổi thành {1'b0, s} rồi xác nhận lỗi số âm. Đổi !== thành != và đưa X vào actual: điều kiện chưa biết có thể không báo lỗi mong muốn.