Altifigence Academy

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.

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.

javascript
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
0tag0:1+2Không có
1tag1:250+10Không có
2tag2:100+0tag0:y9
3tag3:255+255tag1:y12
4Ô trốngtag2:y44
5Ô trốngtag3: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ý.

Lesson files

pipeline-model.mjs ↓

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.