6 / 20 · प्रयोग
प्रयोगशाला: चिह्नयुक्त MAC प्रसंस्करण तत्व
स्वतंत्र मॉडल से वैध ऑपरैंड, स्टॉल और clear जाँचें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
एक PE का अनुबंध चलाएँ
इसे pe-lab.mjs में सहेजें और Node.js से node pe-lab.mjs चलाएँ। यह बाहरी पैकेज नहीं लेता और PE lab passed लिखता है। इससे अंकगणित/नियंत्रण मॉडल जाँचता है; यह SystemVerilog संकलित नहीं करता या DDS में निष्पादन नहीं दिखाता। सामान्य दो-पद जॉब को W=8, K=2, AW=17 मानें, जबकि मॉडल संदर्भ के लिए चौड़े पूर्णांक लेता है।
PE को A और B के अलग valid फ़्लैग मिलते हैं। वह दोनों सत्य होने पर ही जोड़ता है। फ़ॉरवर्डिंग हर ऑपरैंड के अपने valid फ़्लैग से चलती है। आगे का पाठ टैग जोड़ता है ताकि दोनों वैध ऑपरैंड एक ही रिडक्शन पद के हों।
import assert from 'node:assert/strict';
const pe = {acc:0,a:0,b:0,av:false,bv:false};
function edge({a=0,b=0,av=false,bv=false,
advance=true,clear=false,reset=false}={}) {
if (reset || clear) {
Object.assign(pe,{acc:0,a:0,b:0,av:false,bv:false});
} else if (advance) {
if (av && bv) pe.acc += a*b;
Object.assign(pe,{a,b,av,bv});
}
return {...pe};
}
edge({clear:true});
assert.equal(edge({a:-2,b:3,av:true,bv:true}).acc,-6);
const held={...pe};
assert.deepEqual(edge({a:99,b:99,av:true,bv:true,advance:false}),held);
assert.equal(edge({a:4,b:-5,av:true,bv:true}).acc,-26);
assert.equal(edge({a:8,b:8,av:true,bv:false}).acc,-26);
assert.equal(pe.av,true); assert.equal(pe.bv,false);
edge({clear:true,a:100,b:100,av:true,bv:true});
assert.equal(pe.acc,0); assert.equal(pe.av,false);
assert.equal(edge({a:-128,b:-128,av:true,bv:true}).acc,16384);
edge({reset:true,advance:false});
assert.deepEqual(pe,{acc:0,a:0,b:0,av:false,bv:false});
console.log('PE lab passed');परिणाम का अनुमान लगाएँ और चुनौती दें
पहला युग्म −6 देता है। विराम प्रस्तुत 99 मानों को अनदेखा करता है और पूरी स्थिति रखता है। अगला वैध युग्म −20 जोड़कर −26 तक पहुँचता है। अकेला A टोकन फ़ॉरवर्ड होता है, लेकिन कोई MAC नहीं जोड़ता। एक साथ आए वैध युग्म पर clear की प्राथमिकता है; फिर न्यूनतम×न्यूनतम से 16384 मिलता है। advance असत्य होने पर भी रीसेट valid स्थिति साफ़ करता है।
स्पष्ट चिह्नयुक्त गुणनफल और योग संकेत से यही प्राथमिकता always_ff में लिखें। सरणी मॉडल में पुरानी स्थिति पढ़ें और अलग अगली स्थिति लिखें। PE ऑब्जेक्ट को वहीं अपडेट करने से टोकन गलती से एक किनारे में कई PE पार कर सकता है।
संचय शर्त AND से OR करें। अकेले-टोकन वाली assertion विफल होनी चाहिए। advance केवल संचायक पर लगाकर फ़ॉरवर्डिंग चलने भी दें। समझाएँ कि हर assertion कौन सा अनुबंध बचाती है; केवल पास संदेश पूरा सीखने का परिणाम नहीं है।
प्रस्तुत ऑपरैंड और उपयोग हुए ऑपरैंड अलग दर्ज करें:विराम में निन्यानबे के मान इंटरफ़ेस पर दिखते हैं,लेकिन कभी उपयोग नहीं होते। advance लौटने तक रैपर अगला निर्धारित पद रखे। लौटाई स्थिति की प्रतियाँ पहले निरीक्षण सुरक्षित रखती हैं। इन्हें तरंग-आधारित टेस्टबेंच में बदलते समय संचायक के साथ फ़ॉरवर्डिंग valid फ़्लैग भी देखें।
वास्तविक RTL:चिह्नयुक्त MAC PE
संलग्न signed_mac_pe.sv, systolic_2x2.sv और tb_systolic_2x2.sv साथ सहेजें। पहली दो संश्लेषण योग्य RTL फ़ाइल हैं;टेस्टबेंच केवल सिम्युलेशन के लिए है। संचय से पहले PE पूरे 2W-बिट गुणनफल का AW में चिह्न विस्तार करता है। W=8,K=4 जाँच 65536,−65024 और 64516 के लिए AW=18 लेती हैं। क्रमबद्ध k टैग गलत पदों को protocol_error से अस्वीकारते हैं।
प्राथमिकता रीसेट,clear,फिर advance है। Clear पहले डेटा किनारे से पहले पूरा होता है। हर उर्ध्व किनारे के बाद अपडेट संचायक देखें;पड़ोसी अगले advance किनारे पर रजिस्टर फ़ॉरवर्डिंग उपयोग करते हैं। विराम हर मान,valid फ़्लैग,टैग और count रखता है। Clear के बीच एक जॉब चलती है,आउटपुट क्वांटाइज़ेशन या DDS एकीकरण बिना।
Icarus Verilog स्थापित होने पर चलाएँ:
iverilog -g2012 -s tb_systolic_2x2 -o systolic.vvp signed_mac_pe.sv systolic_2x2.sv tb_systolic_2x2.sv
vvp systolic.vvpRTL PASS: अपेक्षित है;विफलता $fatal से समाप्त होती है। addend में शून्य विस्तार करके ऋणात्मक मैट्रिक्स की विफलता दोहराएँ। पहला अलग PE संचायक समझाएँ,चिह्न विस्तार लौटाएँ और फिर चलाएँ। Node और HDL लॉग अलग रखें।
खुद आज़माएँ
(−2,3) और (4,−5) के बीच वैध युग्म (0,7) जोड़ें। योग क्या है और वैध शून्य अवैध टोकन से कैसे अलग है?
व्याख्या पढ़ें
योग −26 है। वैध शून्य भी असली k पद उपयोग करता है और पद गिनती तथा टैग बढ़ाता है। अवैध टोकन कोई पद उपयोग नहीं करता। तीन-पद जॉब में K, चौड़ाई विश्लेषण और पूर्णता नियंत्रण बदलें।