Altifigence Academy

29 / 37 · Khái niệm

Thiết kế tổng hợp: phát hiện mẫu 101 chồng lấp

Áp dụng tối thiểu trạng thái, hợp lệ đầu vào, đầu ra có thanh ghi và tham chiếu độc lập vào một thiết kế.

Cố định yêu cầu trước

Nhận một bit_in tại cạnh lênCạnh lên Khoảnh khắc clock chuyển 0 sang 1, khác với mức cao chỉ cả khoảng CLK=1. Tìm hiểu thêm có valid=1. Nếu chuỗi bit đã nhận kết thúc bằng 101, hit=1 một chu kỳ sau cạnh đó. Cho chồng lấp, nên 10101 phải hit tại bit thứ ba và năm. valid=0 giữ trạng thái và hit=0; reset khởi tạo cả trạng thái lẫn hit.

Chỉ giữ lịch sử cần thiết

S0 không có tiền tố khớp, S1 có đuôi 1, S10 có đuôi 10. Sau khi hoàn thành 101, bit 1 cuối có thể bắt đầu mẫu tiếp, nên quay về S1.

Trạng tháiNhận bit 0Nhận bit 1
S0S0, hit=0S1, hit=0
S1S10, hit=0S1, hit=0
S10S0, hit=0S1, hit=1

Mỗi cột ghi lại quan sát tại một cạnh lên. Đầu vào là giá trị ngay trước cạnh, còn trạng thái có tên chứa after là giá trị ngay sau cập nhật. Cách căn cột thể hiện thứ tự lấy mẫu, không mô tả độ trễ lan truyềnĐộ trễ lan truyền Thời gian từ khi đầu vào đổi đến khi đầu ra ổn định ở giá trị đúng. Tương đương logic và đặc tính thời gian là hai vấn đề riêng. Tìm hiểu thêm vật lý. Sau reset bắt đầu S0, mọi cột valid=1. Sau phát hiện bit thứ ba vẫn giữ S1, nên phát hiện được cả bit thứ năm.

Hai lần phát hiện chồng lấp trong 10101
Xem dữ liệu dạng sóng
Dữ liệu dạng sóng: mỗi ký tự là một khoảng; dấu chấm giữ trạng thái trước; p là một chu kỳ đồng hồ.
Tín hiệuDạng sóngGiá trị bus
accepted bit10101
state after23452S1 → S10 → S1 → S10 → S1
hit after0.101

Cài đầu ra phát hiện có thanh ghi

SystemVerilog
module pattern_101 (
  input logic clk, rst, valid, bit_in,
  output logic hit
);
  typedef enum logic [1:0] {S0, S1, S10} state_t;
  state_t state;
  always_ff @(posedge clk) begin
    if (rst) begin
      state <= S0;
      hit <= 1'b0;
    end else begin
      hit <= 1'b0;
      if (valid) begin
        case (state)
          S0: state <= bit_in ? S1 : S0;
          S1: state <= bit_in ? S1 : S10;
          S10: begin
            state <= bit_in ? S1 : S0;
            hit <= bit_in;
          end
          default: state <= S0;
        endcase
      end
    end
  end
endmodule

hit lưu kết quả tính từ trạng thái và đầu vào được nhận tại cạnh vào thanh ghiThanh ghi Mạch lưu trạng thái nhiều bit. Thanh ghi đồng bộ trong khóa học lưu đầu vào đã quy định tại cạnh clock. Tìm hiểu thêm. Nó không phản ứng ngay với bit_in giữa cạnh như Mealy tổ hợp. Ví dụ được rà theo SystemVerilog tổng quát; cú pháp hỗ trợ và bằng chứng chạy trên engine thực hành một clock phải xác nhận riêng.

Tính tiêu chuẩn đạt độc lập

Chỉ gom bit đã nhận thành chuỗi; khi dài ít nhất ba, so ba ký tự cuối với 101 là có tham chiếu. Không cần chép mã trạng thái FSMMáy trạng thái Mô hình xác định trạng thái kế tiếp và đầu ra từ trạng thái lưu cùng đầu vào. Phải quy định chuyển, đầu ra và reset. Tìm hiểu thêm vào mô hình.

  • 101 → hit tại 3
  • 10101 → hit tại 3, 5
  • 11101 → hit tại 5
  • 1001 → không phát hiện
  • 1,0 rồi reset, tiếp 1 → không phát hiện
  • Chèn valid=0 giữa hoặc sau 1,0 → kết quả theo số thứ tự nhận không đổi

Thực hành chuỗi dưới kiểm chức năng với đầu vào hợp lệ liên tục. Không diễn giải như đã kiểm reset, dừng valid hoặc thời gian vật lý.

Thay đổi đầu vào

Tự thử

Nếu đổi mã để quay S0 sau phát hiện 101, chuỗi ngắn nhất nào khác đặc tả gốc?

Đọc giải thích

Khác biệt ở 10101. Mạch đúng phát hiện bit thứ ba và năm. Quay S0 không tái dùng bit 1 cuối của lần đầu làm đầu mẫu sau nên bỏ lỡ lần thứ năm.

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.