Altifigence Academy

11 / 24 · Praktikum

Praktikum: telusuri dua tahap dan gelembung

Hitung keadaan berikutnya dari keadaan lama dan bandingkan tag, nilai, serta tepi keluaran.

Modelkan register yang diperbarui bersama

Bangun model siklus fungsi dua tahap f(a,b)=3(a+b). Setiap iterasi mewakili satu tepi naik. Pertama terima s2 lama. Selanjutnya hitung tahap kedua yang baru dari s1 lama, lalu perbarui kedua tahap. Memperbarui s1 sebelum menghitung s2 secara keliru mengizinkan masukan melintasi dua register pada satu tepi.

Tambahkan pipeline-model.mjs secara manual ke proyek, simpan, lalu jalankan node pipeline-model.mjs di terminal Node.js. Terima empat masukan pada tepi 0 hingga 3, lalu kuras pada tepi 4 dan 5. Semua masukan diterima berdasarkan kontrak selalu siap ini. Null berarti tahap kosong; nilainya bukan nol numerik. Hasil nol yang valid tetap mewakili transaksi.

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');
TepiMasukan yang diterimaKeluaran yang dikirim
0tag0:1+2Tidak ada
1tag1:250+10Tidak ada
2tag2:100+0tag0:y9
3tag3:255+255tag1:y12
4Gelembungtag2:y44
5Gelembungtag3:y250

Transaksi kedua mempertahankan jumlah 260 dan mempersempit 780 menjadi 12. Transaksi terakhir mempersempit 1530 menjadi 250. Membandingkan tepi, tag, dan nilai secara eksplisit mendeteksi kesalahan pewaktuan serta aritmetika. Gelembung pengurasan mengosongkan kedua tahap agar keluaran lama tidak berulang.

Untuk mempelajari masukan yang tidak hadir, sisipkan null pada tepi penerimaan tertentu dan naikkan tag hanya untuk transaksi yang diterima. Celah keluaran mengikuti gelembung, sementara transaksi valid tetap memiliki latensi dua tepi. Model ini tidak memiliki tekanan balik keluaran. Bab berikutnya menambahkan perilaku elastis. Kelulusan pemeriksaan Node memvalidasi model keadaan ini, bukan kompilasi HDL atau eksekusi simulasi DDS.

Coba sendiri

Jika tepi 1 tidak memiliki masukan, dan B,C,D diterima pada tepi 2,3,4, berapa tepi pengiriman untuk tag 0 hingga 3?

Baca penjelasan

A ditransfer pada tepi 2. B,C,D ditransfer pada tepi 4,5,6. Tepi 3 merupakan gelembung keluaran. Tetapkan tag berdasarkan urutan penerimaan, 0,1,2,3, bukan berdasarkan nomor tepi fisik.

Lesson files

pipeline-model.mjs ↓

Pilihan berlaku di peramban ini. Ubah kapan saja di bagian bawah halaman.