5 / 24 · अवधारणा
क्लॉक किनारों पर रजिस्टर स्थानांतरण पढ़ें
पुरानी और अगली स्थिति अलग करें तथा देखें कि enable संग्रहीत मान कैसे बनाए रखता है।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
सभी रजिस्टर पुरानी स्थिति पढ़ते हैं
पहले वह जानकारी पहचानें जो चक्रों के बीच बनी रहनी चाहिए। संचायक, कैप्चर किए गए ऑपरैंड, लूप गणना और आउटपुट valid स्थिति हैं। वर्तमान संचायक और ऑपरैंड का योग संयोजी मान है। किसी चर में लिखना अपने आप भंडारण का अर्थ नहीं बताता; वह घटना स्पष्ट करें जो उसका मान कैप्चर करती है।
यह संचायक केवल उन उर्ध्व किनारों पर x जोड़ता है जहाँ en सक्रिय है। en निष्क्रिय होने पर वह अपना मान रखता है। नौ बिट का मध्यवर्ती मान जोड़ को स्पष्ट बनाता है; उसके निचले आठ बिट चुनने से मॉड्यूलो-256 व्यवहार तय होता है। always_ff में नॉनब्लॉकिंग असाइनमेंट वर्तमान किनारे पर पढ़े गए मानों से अगली स्थिति निर्धारित करते हैं। कई रजिस्टर होने पर इस ब्लॉक को तत्काल सॉफ़्टवेयर असाइनमेंट की तरह पढ़ना गलत व्याख्या देता है।
logic [7:0] acc;
logic [8:0] next_sum;
assign next_sum = {1'b0, acc} + {1'b0, x};
always_ff @(posedge clk) begin
if (rst) acc <= 8'd0;
else if (en) acc <= next_sum[7:0];
endरीसेट समकालिक है और enable से अधिक प्राथमिकता रखता है। en निष्क्रिय होने पर क्रमिक असाइनमेंट न देना रजिस्टर के मान को बनाए रखता है। इसके विपरीत संयोजी पथ पर असाइनमेंट छोड़ना अनचाहे लैच का संकेत हो सकता है। अगली स्थिति के संयोजी लॉजिक में पहले डिफ़ॉल्ट मान दें, फिर विशेष परिस्थितियों में उन्हें बदलें।
| किनारा | rst | en | x | पुराना acc | नया acc |
|---|---|---|---|---|---|
| 0 | 1 | 1 | 9 | अज्ञात | 0 |
| 1 | 0 | 1 | 7 | 0 | 7 |
| 2 | 0 | 0 | 100 | 7 | 7 |
| 3 | 0 | 1 | 250 | 7 | 1 |
किनारा 2 पर दिखाई देने वाला इनपुट 100 स्वीकार नहीं किया गया। किनारा 3 पर 7+250=257 घटकर 1 बनता है। आगे जब en का अर्थ valid AND ready हो, तब भी प्रस्तुत करने और स्वीकार करने में अंतर आवश्यक रहता है।
a<=x; b<=a; में पुराना a=5 और x=9 होने पर नया a=9 और b=5 मिलता है। यदि b को 9 मिलना चाहिए, तो उसका इनपुट x से जोड़ें। पहले पुरानी स्थिति का स्तंभ पूरा करें, फिर सभी अगली स्थिति के मान एक साथ निकालें; इससे डेटा और नियंत्रण के बीच एक चक्र की असंगति दिखती है।
खुद आज़माएँ
शुरुआत में a=4 और b=0 हैं। हर किनारे पर a<=x; b<=a होता है और x पहले 8, फिर 12 है। दूसरे किनारे के बाद a और b क्या होंगे?
व्याख्या पढ़ें
पहले किनारे के बाद a=8 और b=4 हैं। दूसरे के बाद a=12 और b=8 हैं। b का प्रत्येक अपडेट पुराने a का उपयोग करता है, इसलिए x=12 एक ही किनारे पर दोनों रजिस्टर पार नहीं करता।