11 / 24 · प्रयोग
प्रयोगशाला: दो चरण और बुलबुले ट्रेस करें
पुरानी स्थिति से अगली स्थिति निकालें और आउटपुट टैग, मान तथा किनारे तुलना करें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
एक साथ अपडेट होने वाले रजिस्टरों का मॉडल बनाएँ
दो चरण वाले f(a,b)=3(a+b) का चक्र मॉडल बनाएँ। हर पुनरावृत्ति एक उर्ध्व किनारा दर्शाती है। पहले पुराने s2 का उपयोग करें। फिर पुराने s1 से नया दूसरा चरण निकालें और दोनों चरण अपडेट करें। s2 निकालने से पहले s1 अपडेट करने पर इनपुट गलत ढंग से एक किनारे पर दो रजिस्टर पार कर जाता है।
अपनी परियोजना में स्वयं pipeline-model.mjs जोड़ें, सहेजें और Node.js टर्मिनल में node pipeline-model.mjs चलाएँ। किनारा 0 से 3 पर चार इनपुट स्वीकार करें, फिर किनारा 4 और 5 पर निकासी करें। इस हमेशा तैयार अनुबंध में सभी इनपुट स्वीकार होते हैं। Null खाली चरण है; वह संख्यात्मक शून्य नहीं है। वैध शून्य परिणाम भी लेनदेन दर्शाता है।
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');| किनारा | स्वीकार इनपुट | वितरित आउटपुट |
|---|---|---|
| 0 | tag0:1+2 | कोई नहीं |
| 1 | tag1:250+10 | कोई नहीं |
| 2 | tag2:100+0 | tag0:y9 |
| 3 | tag3:255+255 | tag1:y12 |
| 4 | बुलबुला | tag2:y44 |
| 5 | बुलबुला | tag3:y250 |
दूसरा लेनदेन योग 260 बनाए रखता है और 780 घटकर 12 बनता है। अंतिम में 1530 घटकर 250 बनता है। स्पष्ट किनारे, टैग और मान की तुलना अंकगणितीय त्रुटियों के साथ समय त्रुटियाँ भी पकड़ती है। निकासी के बुलबुले दोनों चरण साफ़ करते हैं ताकि पुराने आउटपुट दोहर न सकें।
अनुपस्थित इनपुट समझने के लिए चुने हुए स्वीकृति किनारों पर null रखें और टैग केवल स्वीकार लेनदेन के लिए बढ़ाएँ। आउटपुट अंतराल बुलबुलों के अनुसार आते हैं, जबकि वैध लेनदेन की विलंबता दो किनारे रहती है। इस मॉडल में आउटपुट बैकप्रेशर नहीं है। अगला अध्याय लचीला व्यवहार जोड़ता है। Node जाँच पास होना इस स्थिति मॉडल को सत्यापित करता है, HDL संकलन या DDS सिम्युलेशन रन को नहीं।
खुद आज़माएँ
किनारा 1 पर इनपुट न हो और B,C,D किनारा 2,3,4 पर स्वीकार हों तो टैग 0 से 3 के वितरण किनारे कौन से होंगे?
व्याख्या पढ़ें
A किनारा 2 पर स्थानांतरित होता है। B,C,D किनारा 4,5,6 पर स्थानांतरित होते हैं। किनारा 3 आउटपुट बुलबुला है। टैग भौतिक किनारा संख्या के बजाय स्वीकृति क्रम 0,1,2,3 से दें।