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ế.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
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ái | Nhận bit 0 | Nhận bit 1 |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, 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.
Xem dữ liệu dạng sóng
| Tín hiệu | Dạng sóng | Giá trị bus |
|---|---|---|
| accepted bit | 10101 | |
| state after | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit after | 0.101 |
Cài đầu ra phát hiện có thanh ghi
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
endmodulehit 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.