11 / 24 · Thực hành
Thực hành: theo dõi hai tầng và các ô trống
Tính trạng thái tiếp theo từ trạng thái cũ và so sánh thẻ, giá trị, cạnh đầu ra.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Mô hình hóa các thanh ghi cập nhật cùng nhau
Xây dựng mô hình chu kỳ cho hàm hai tầng f(a,b)=3(a+b). Mỗi lần lặp biểu thị một cạnh lên. Đầu tiên nhận s2 cũ. Tiếp theo tính tầng thứ hai mới từ s1 cũ, rồi cập nhật cả hai tầng. Cập nhật s1 trước khi tính s2 sẽ sai vì cho phép đầu vào vượt hai thanh ghi tại một cạnh.
Thêm thủ công pipeline-model.mjs vào dự án, lưu nó rồi chạy node pipeline-model.mjs trong terminal Node.js. Chấp nhận bốn đầu vào tại cạnh 0 đến 3, rồi tháo hết tại cạnh 4 và 5. Mọi đầu vào được chấp nhận theo quy ước luôn sẵn sàng này. Null nghĩa là tầng trống; không phải số 0. Kết quả 0 hợp lệ vẫn biểu thị một giao dịch.
import assert from 'node:assert/strict';
const inputs = [[1,2], [250,10], [100,0], [255,255]];
let s1 = null, s2 = null;
const seen = [];
for (let edge = 0; edge < 6; edge++) {
if (s2 !== null) seen.push({ edge, ...s2 });
const next2 = s1 === null ? null : {
tag: s1.tag, y: (s1.sum * 3) % 256
};
const next1 = edge < inputs.length ? {
tag: edge, sum: inputs[edge][0] + inputs[edge][1]
} : null;
s1 = next1;
s2 = next2;
}
assert.deepEqual(seen, [
{ edge: 2, tag: 0, y: 9 },
{ edge: 3, tag: 1, y: 12 },
{ edge: 4, tag: 2, y: 44 },
{ edge: 5, tag: 3, y: 250 }
]);
assert.equal(s1, null);
assert.equal(s2, null);
console.log('PIPELINE PASS: 4 ordered results, latency=2');| Cạnh | Đầu vào được chấp nhận | Đầu ra được chuyển giao |
|---|---|---|
| 0 | tag0:1+2 | Không có |
| 1 | tag1:250+10 | Không có |
| 2 | tag2:100+0 | tag0:y9 |
| 3 | tag3:255+255 | tag1:y12 |
| 4 | Ô trống | tag2:y44 |
| 5 | Ô trống | tag3:y250 |
Giao dịch thứ hai giữ tổng 260 và thu hẹp 780 thành 12. Giao dịch cuối thu hẹp 1530 thành 250. So sánh rõ cạnh, thẻ và giá trị phát hiện cả lỗi thời gian lẫn lỗi số học. Các ô trống khi tháo hết xóa cả hai tầng để đầu ra cũ không lặp lại.
Để tìm hiểu đầu vào thiếu, chèn null tại các cạnh chấp nhận được chọn và chỉ tăng thẻ cho giao dịch đã chấp nhận. Khoảng trống đầu ra theo các ô trống trong khi giao dịch hợp lệ vẫn có độ trễ hai cạnh. Mô hình này không có áp lực ngược đầu ra. Chương tiếp theo thêm hành vi co giãn. Vượt qua các phép kiểm tra Node xác nhận mô hình trạng thái này, không xác nhận biên dịch HDL hay một lần mô phỏng DDS.
Tự thử
Nếu cạnh 1 không có đầu vào, còn B,C,D được chấp nhận tại cạnh 2,3,4, các cạnh chuyển giao của thẻ 0 đến 3 là gì?
Đọc giải thích
A truyền tại cạnh 2. B,C,D truyền tại cạnh 4,5,6. Cạnh 3 là ô trống đầu ra. Gán thẻ theo thứ tự chấp nhận 0,1,2,3 thay vì dùng số cạnh vật lý.