17 / 37 · Thực hành
Thực hành: kiểm tra reset, quay vòng và bất biến bộ đếm
Đối chiếu từng cạnh lên với tham chiếu, tách ảnh hưởng giá trị đầu, reset và độ rộng.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Đối tượng và điều kiện quan sát
Đặt giá trị đầu 3, resetReset Điều khiển đưa trạng thái về giá trị đầu đã định. Phải quy định đồng bộ hay bất đồng bộ và ưu tiên so với các điều khiển khác. Tìm hiểu thêm 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 đầu. Sau đó đi 0, 1, 2, 3, 0. Reset bật nhưng trước cạnh clock giá trị vẫn giữ.
Trước khi bắt đầu
Chuẩn bị dự án Desktop của Digital Design Studio và quyền chạy bình thường. Lưu mỗi ví dụ vào rtl/top.sv trong thư mục riêng.
Mã nguồn SystemVerilog
module top (
input logic clk,
input logic rst,
output logic [1:0] count
);
// Active-high synchronous reset: sampled only at the rising clock edge.
always_ff @(posedge clk)
if (rst) count <= 2'b00;
else count <= count + 2'b01;
endmoduleCách chạy
Trong New analysis chọn Two-state single-clock v1. Clock port là clk, chu kỳ 1000ps. Dùng thiết lập dưới để Preflight, rồi Run RTL simulation và so sánh kết quả.
| Thiết lập | Giá trị |
|---|---|
| Giá trị thanh ghi đầu (từ LSB) | [true,true] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Kích thích đầu vào
[
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
}
]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ý. E0~E4 lần lượt là cạnh lên 500, 1500, 2500, 3500, 4500ps. So tất cả cột count trung gian, không chỉ cuối.
Xem dữ liệu dạng sóng
| Tín hiệu | Dạng sóng | Giá trị bus |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count before | 23452 | 11 → 00 → 01 → 10 → 11 |
| count after | 23452 | 00 → 01 → 10 → 11 → 00 |
So sánh kết quả
5 cycles · count=00. Kiểm tra tại 500, 1500, 2500, 3500, 4500ps lần lượt 00 → 01 → 10 → 11 → 00.
Thực hành dùng RTL 0/1 một clock, không bao gồm testbench #delay, initial hoặc X/Z. Dấu hoàn tất học là hồ sơ học tập, không phải kết quả mô phỏng thực.
Tính trạng thái kỳ vọng theo từng cạnh
Giá trị 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 đầu là 3 nhưng reset ưu tiên tại cạnh lên đầu. Đừng coi khởi tạo và reset là một.
| Cạnh lên | rst | count trước cạnh | count sau cạnh |
|---|---|---|---|
| 500ps | 1 | 11 | 00 |
| 1500ps | 0 | 00 | 01 |
| 2500ps | 0 | 01 | 10 |
| 3500ps | 0 | 10 | 11 |
| 4500ps | 0 | 11 | 00 |
Trong khoảng không reset, mỗi cạnh phải thỏa quan hệ sau.
Chỉ kiểm tra 00 cuối có thể cho qua mạch từng đi qua giá trị sai. Kiểm tra riêng cả chuỗi trạng thái và ưu tiên reset.
Mỗi lần chỉ đổi một điều kiện
- Đổi giá trị đầu thành 00, chuỗi sau reset đầu vẫn giống. Qua đó kiểm tra reset không phụ thuộc giá trị đầu.
- Đổi Reset cycles thành 2: count ở hai cạnh đầu đều phải 00, thời điểm bắt đầu tăng lùi một cạnh.
- Mở thành ba bit thì quay vòng sau tám lần tăng. Không chỉ đổi khai báo; rà cả độ rộng hằng, mảng giá trị đầu và độ dài chạy.
Tổng quát thành modulo-10
Bộ lưu bốn bit biểu diễn 0~15, nên tăng đơn thuần không đưa 9 về 0. Cần định nghĩa hàm trạng thái kế tiếp riêng.
Định nghĩa này đưa trạng thái không dùng 10~15 về 0 khi có enable. Có thể chọn phục hồi khác, nhưng đặc tả và mô hình kiểm chứng phải dùng cùng chính sách.
Tự thử
Với bộ đếm hai bit gốc, sau reset cạnh đầu, thực hiện mười một lần tăng không có enable. count là bao nhiêu? Tính không cần liệt kê trạng thái giữa.
Đọc giải thích
Sau reset là 0 và , nên kết quả 11. “Tổng mười một cạnh” khác “mười một lần tăng sau reset”; nếu cạnh đầu của trường hợp trước là reset thì thực chỉ tăng mười lần.