Altifigence Academy

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ộ.

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.

abc000001010011100101110111
y00010111
y=Σm(3,5,6,7)=ab+ac+bcy=\Sigma m(3,5,6,7)=ab+ac+bc

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 y=ab+c(a+b)y=ab+c(a+b). 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ố.

Kiểm tra tám đầu vào đa số bằng cout

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”.

SystemVerilog
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
endmodule

Mở 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ó y=e(ab+ac+bc)y=e(ab+ac+bc). 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.

Lựa chọn áp dụng cho trình duyệt này. Có thể đổi ở chân trang bất cứ lúc nào.