10 / 63 · Thực hành
Thực hành thiết kế: từ đặc tả đến mạch đa số ba đầu vào
Chuyển đặc tả bằng lời thành bảng chân trị đầy đủ, nối các bước tối thiểu hóa, cài đặt và kiểm tra toàn bộ.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Cố định điều kiện trước khi cài đặt
Thiết kế mạch y=1 khi ít nhất hai trong ba đầu vào a, b, c bằng 1. Quy định các đầu vào là 0/1 ổn định, có trọng số như nhau và không nhớ đầu vào trước. “Đúng hai” khác “ít nhất hai” ở 111.
| abc | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
|---|---|---|---|---|---|---|---|---|
| y | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
Mỗi hạng biểu diễn hai đầu vào cùng bằng 1. Cùng chức năng có thể đặt nhân tử thành . Cách nào nhanh hơn phụ thuộc cell và thời điểm đến của tín hiệu.
Đa số giống carry của bộ cộng đầy đủ
Đọc cin bên dưới như đầu vào c thứ ba. cout là y cần thiết, còn sum là parity lẻTính chẵn lẻ Giá trị cho biết số bit 1 là chẵn hay lẻ. Kiểm tra parity phát hiện số lẻ lỗi bit nhưng có thể bỏ sót số chẵn lỗi. Tìm hiểu thêm. So sánh 001 với 111 sẽ làm lộ lỗi dùng parity thay cho đa số.
a + b + cin = sum + 2 × cout
Tạo tiêu chuẩn kiểm tra riêng từ đặc tả
Chép nguyên (a & b) | (a & c) | (b & c) vào mô hình tham chiếu có thể chép cả lỗi. Hãy dùng phép tính số nguyên phản ánh trực tiếp yêu cầu “ít nhất hai bit 1”.
module voter3(input logic a, b, c, output logic y);
assign y = (a & b) | (a & c) | (b & c);
endmodule
module tb;
timeunit 1ns;
timeprecision 1ps;
logic a, b, c, y;
int ones;
voter3 dut(.*);
initial begin
for (int v = 0; v < 8; v++) begin
{a, b, c} = v[2:0];
#1;
ones = int'(a) + int'(b) + int'(c);
assert (y === (ones >= 2))
else $fatal(1, "voter mismatch at %03b", {a,b,c});
end
$finish;
end
endmoduleMở rộng mỗi bit sang int để tránh nhầm độ rộng số học một bit. #1 chỉ dành thời gian để logic tổ hợp trong bài kiểm tra cập nhật, không chứng minh chip thực hoạt động trong 1 ns.
Đổi đặc tả và tìm phản ví dụ
Thêm enable e cho đầu ra thì có . Nay có bốn đầu vào, cần 16 tổ hợp để kiểm tra toàn bộ. Cũng kiểm tra riêng bất biếnBất biến Điều kiện phải luôn đúng trong mọi thực thi được phép. Ví dụ số phần tử của FIFO sâu 4 luôn nằm từ 0 đến 4. Tìm hiểu thêm: khi e=0 phải bỏ qua cả a, b, c.
Tự thử
Liệt kê mọi đầu vào phát hiện cài đặt sai y=(a XOR b XOR c). Nếu đổi thành hàm “đúng hai đầu vào bằng 1”, hàng nào khác hàm đa số ban đầu?
Đọc giải thích
Các đầu vào khác XOR là 001, 010, 100, 011, 101, 110. Ba trường hợp đầu cho sai thành 1, ba trường hợp sau cho sai thành 0. Hàm “đúng hai” chỉ đổi hàng 111 của đa số thành 0.