40 / 63 · Thực hành
Thực hành: dịch dữ liệu nối tiếp và kiểm tra thứ tự bit
Kết hợp chuỗi bit và tham chiếu số nguyên để kiểm tra hướng, bit mất và trễ sau reset.
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
Mỗ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, hai bit thấp của q cũ dịch trái, din vào bit 0. Đưa lần lượt 1,0,1,1 để đối chiếu từng bước.
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,
input logic din,
output logic [2:0] q
);
// Old q[1:0] and din are captured together at each rising edge.
always_ff @(posedge clk)
if (rst) q <= 3'b000;
else q <= {q[1:0], din};
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) | [false,false,false] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Kích thích đầu vào
[
{
"inputs": {
"din": [
false
]
}
},
{
"inputs": {
"din": [
true
]
}
},
{
"inputs": {
"din": [
false
]
}
},
{
"inputs": {
"din": [
true
]
}
},
{
"inputs": {
"din": [
true
]
}
}
]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ý. Cột đầu là 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, din=0 không được tính là dữ liệu lưu. So bốn đầu vào sau với thứ tự JSON dướ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... | |
| din | 0101. | |
| q after | 23452 | 000 → 001 → 010 → 101 → 011 |
So sánh kết quả
5 cycles · q=011. Tại các cạnh lên: 000 → 001 → 010 → 101 → 011.
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 bài học là hồ sơ học tập, không phải kết quả mô phỏng thực.
Kiểm tra phép nối bằng biểu thức độc lập
Chép nguyên phép nốiPhép nối Ghép các chuỗi bit cạnh nhau. Độ rộng kết quả bằng tổng độ rộng toán hạng, khác cộng giá trị số. Tìm hiểu thêm của RTL vào đáp án kiểm tra có thể chép lỗi vào hai nơi. Thử tham chiếu theo số nguyên unsignedunsigned Quy tắc diễn giải chuỗi bit là số nguyên không âm. Phạm vi n bit là 0 đến 2^n−1 và có thể khác diễn giải signed của cùng chuỗi bit. Tìm hiểu thêm.
Sau reset, đầu vào 1,0,1,1 cho . Viết thành nhị phân ba bit phải khớp dạng sóng. Bước cuối , giữ ba bit thấp nên được 3.
| Số bit nhận | Đầu vào | q sau cạnh | Giá trị nguyên |
|---|---|---|---|
| 0 | Reset | 000 | 0 |
| 1 | 1 | 001 | 1 |
| 2 | 0 | 010 | 2 |
| 3 | 1 | 101 | 5 |
| 4 | 1 | 011 | 3 |
Với reset=0, enable=1, chọn din lần lượt 1,0,1,1 và nhấn clock mỗi lần. q thành 001,010,101,011. Dự đoán bằng thực hành bước này rồi so RTL thật. Có enable để thử cả dừng trong bài mở rộng dưới.
Reset đồng bộ ưu tiên hơn enable. Khi enable=0, giữ giá trị đang lưu. q=000; q_next = (2q + din) mod 8
Theo một bit để kiểm tra hướng
Sau reset, đưa 1 một lần rồi 0 ba lần: 001 → 010 → 100 → 000. Bit 1 đầu phải qua bit 0, bit 1, bit 2 rồi biến mất. Chỉ dùng toàn 0 hoặc toàn 1 có thể che sai hướng dịch.
Trong 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 ba tầng, nếu cạnh lưu lần đầu là , bit tới bit 2 cao nhất sau cạnh . Nếu tính từ cạnh thanh ghi phát bên ngoài đưa dữ liệu ra thì mốc khác; báo cáo cần nêu rõ điểm đầu và cuối.
Mở rộng: chỉ dịch đầu vào hợp lệ
Giả sử thêm valid. Thiết kế giữ q khi valid=0 khác pipeline dịch mỗi chu kỳ và truyền valid riêng kèm dữ liệu. Cách đầu dịch theo số bit đã nhận; cách sau theo số chu kỳ thực. Không kiểm chứng hai thiết kế bằng cùng chuỗi trạng thái kỳ vọng.
Tự thử
Sau reset, các bit valid=1 là 1,0,1. Trước và sau bit thứ hai có một chu kỳ valid=0, q giữ trong invalid. Giải thích q cuối và lúc bit 1 đầu tới bit 2.
Đọc giải thích
Chỉ ba đầu vào hợp lệ đổi trạng thái nên q cuối=101. Bit 1 đầu tới bit 2 tại cạnh lưu đầu vào hợp lệ thứ ba. Sau lần lưu đầu cần thêm hai lần dịch; hai chu kỳ invalid ở giữa làm thời gian thực dài hơn.