9 / 24 · अवधारणा
पाइपलाइन सीमाओं पर पूरा लेनदेन संग्रहीत करें
योग और स्केलिंग को बाँटें तथा valid, टैग और चौड़ाई साथ रखें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
रजिस्टर सीमा बिट के साथ अर्थ भी आगे ले जाती है
f(a,b)=3(a+b) को दो चरणों में बाँटें। पहला चरण आठ बिट के दो चिह्नरहित ऑपरैंड का नौ बिट योग रखता है। दूसरा चरण ग्यारह बिट का स्केल किया हुआ मान बनाता है और उसके निचले आठ बिट रखता है। सबसे बड़ा चौड़ा परिणाम 1530 है। इस पूर्णांक व्यंजक में मध्यवर्ती योग की चौड़ाई घटाने से संयोग से अंतिम मॉड्यूलो-256 मान बना रहता है, लेकिन ओवरफ़्लो बताने या बाद की तुलना के लिए आवश्यक जानकारी खो जाएगी। मध्यवर्ती चौड़ाई स्पष्ट रखें।
हर चरण डेटा के साथ valid और टैग रखता है। valid शून्य होने का अर्थ खाली बुलबुला है। खाली चरण में पुराने डेटा बिट रह सकते हैं, लेकिन उन्हें लेनदेन नहीं गिनना चाहिए। टैग में उसके मान जैसा ही रजिस्टर विलंब चाहिए। दो डेटा रजिस्टर और केवल एक टैग रजिस्टर होने से लेनदेन A के परिणाम से B की पहचान जुड़ जाती है।
यह कोर स्टॉल नहीं मानता और पोर्ट हमेशा तैयार हैं। गुणा करने से पहले s1 बढ़ाएँ और स्थिरांक का आकार तय करें। दूसरा चरण पुराने s1 और t1 पढ़ता है; नया इनपुट एक ही किनारे पर दोनों रजिस्टर पार नहीं कर सकता।
logic [8:0] s1;
logic [7:0] s2, t1, t2;
logic v1, v2;
logic [10:0] scaled;
assign scaled = {2'b00, s1} * 11'd3;
always_ff @(posedge clk) begin
if (rst) begin
v1 <= 1'b0;
v2 <= 1'b0;
end else begin
v1 <= in_valid;
v2 <= v1;
if (in_valid) begin
s1 <= {1'b0, a} + {1'b0, b};
t1 <= in_tag;
end
if (v1) begin
s2 <= scaled[7:0];
t2 <= t1;
end
end
endकिनारा 0 पर A=(1,2) स्वीकार करें: उसके बाद s1=3 है। किनारा 1 पर B=(250,10) स्वीकार करें: s1 का मान 260 होता है, जबकि s2 में A का परिणाम 9 आता है। A, किनारा 1 के बाद वैध है और किनारा 2 पर स्थानांतरित हो सकता है। बाद में B से 780 मॉड्यूलो 256, अर्थात 12 मिलता है।
valid रजिस्टर से बुलबुले भी आगे बढ़ाएँ। इनपुट न होने पर पुराना v1=1 बनाए रखने से लेनदेन दोहर सकता है। रीसेट valid स्थिति साफ़ करता है ताकि पुराना डेटा नया परिणाम न बने। प्रत्येक सीमा पर सभी साथ के फ़ील्ड लिखें: ऑपरेशन, टैग, अपवाद, पता या पैकेट के अंत का चिह्न। जाँचें कि पूरी पाइपलाइन में ये फ़ील्ड एक ही लेनदेन बने रहें।
खुद आज़माएँ
A=(1,2,tag=10) और B=(250,10,tag=11) लगातार स्वीकार होते हैं। t2<=in_tag होने पर A के परिणाम के साथ कौन सा टैग आएगा? सही कनेक्शन दें।
व्याख्या पढ़ें
किनारा 1 पर s2 पुराने लेनदेन A की गणना करता है, जबकि वर्तमान in_tag का मान 11 है, इसलिए परिणाम 9 को टैग 11 मिलता है। A का पुराना प्रथम-चरण टैग 10 कैप्चर करने के लिए t2<=t1 करें।