11 / 37 · अवधारणा
एनकोडर और प्राथमिकता: कई अनुरोधों में से एक चुनना
one-hot एनकोडर की इनपुट मान्यता और प्राथमिकता एनकोडर के valid तथा चयन परिणाम में अंतर करें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
डिकोडर की उलटी दिशा को भी शर्तें चाहिए
डिकोडरडिकोडर द्विआधारी कोड के अनुरूप आउटपुट लाइन सक्रिय करता है। enable होने पर निष्क्रिय अवस्था में सभी आउटपुट 0 रखे जा सकते हैं। विस्तार से पढ़ें पते को one-hotone-hot कई बिटों में ठीक एक 1 वाला निरूपण। सभी 0 की अनुमति वाली शर्त को अलग से one-hot-or-zero कहते हैं। विस्तार से पढ़ें चयन लाइनों में बदलता है। एनकोडर सक्रिय इनपुट की स्थिति को पते में बदलता है। सामान्य one-hot एनकोडर मानता है कि केवल एक इनपुट सक्रिय है। कई इनपुट एक साथ 1 हों तो किसकी स्थिति बताएँ, यह अतिरिक्त विनिर्देश चाहिए।
चार-बिट अनुरोध में बड़ी संख्या वाले अनुरोध को प्राथमिकता दें। सभी इनपुट 0 होने पर valid=0 और index=00 रखें। केवल index=00 देखकर “कोई अनुरोध नहीं” कहेंगे तो r0 के अनुरोध से भ्रम होगा।
| इनपुट r3r2r1r0 | valid | index |
|---|---|---|
| 1--- | 1 | 11 |
| 01-- | 1 | 10 |
| 001- | 1 | 01 |
| 0001 | 1 | 00 |
| 0000 | 0 | 00 |
सारणी का - दर्शाता है कि 0 और 1 दोनों पर परिणाम समान है। इसका अर्थ सिम्युलेशन का X इनपुट स्वीकार्य होना नहीं है। ऊपर से प्रत्येक पैटर्न परस्पर अपवर्जी है।
1011 पर index=11। 0110 पर r2 की प्राथमिकता r1 से अधिक है, इसलिए index=10।
तरंगरूप डेटा देखें
| संकेत | तरंगरूप | बस मान |
|---|---|---|
| requests | 234523 | 0000 → 0001 → 0011 → 0110 → 1011 → 1000 |
| valid | 01.... | |
| index | 2.345. | 00 → 01 → 10 → 11 |
RTL में प्राथमिकता स्पष्ट होनी चाहिए
always_comb begin
valid = |request;
index = 2'b00;
if (request[3]) index = 2'd3;
else if (request[2]) index = 2'd2;
else if (request[1]) index = 2'd1;
endकेवल request[0]=1 हो तो डिफ़ॉल्ट index=0 और valid=1 हैं। सभी पथों में डिफ़ॉल्ट देकर संयोजन परिपथ में स्मृति बनने से रोकें। 16 इनपुट जाँचते समय देखें कि valid=1 पर चुना गया बिट 1 और उससे ऊँचे सभी बिट 0 हैं।
चयन और निष्पक्षता अलग समस्याएँ हैं
r3 लगातार 1 रहे तो r0 कभी नहीं चुना जाएगा। यह परिपथ केवल स्थिर प्राथमिकता लागू करता है। निष्पक्ष सेवा के लिए पिछले चयन को याद रखने वाला मध्यस्थ चाहिए; तब वह अनुक्रमिक परिपथ होगा।
अभ्यास · अनुरोध, चयन पता और grant साथ देखें
r3r2r1r0=1011; valid=1; index=11; grant=1000. बड़ी संख्या वाले अनुरोध को प्राथमिकता है। valid=0 पर index किसी चयनित अनुरोध की पहचान नहीं है।
प्रारंभिक अनुरोध 1011 में r3 चुना जाता है। r3 बंद करें तो r1 चुनेगा: index=01, grant=0010। r1=1 रहते r0 चालू-बंद करने से चयन नहीं बदलना चाहिए।
“सभी बंद करें” के परिणाम की तुलना केवल r0 सक्रिय होने से करें। दोनों में index=00 है, लेकिन valid और grant अलग हैं। अगला परिपथ केवल index पढ़े तो अनुपस्थित अनुरोध पर कार्रवाई कर सकता है।
केवल चयनित अनुरोध पर 1 रखने वाला grant, index और valid को फिर डिकोड करने का परिणाम है।
तीन अपरिवर्तनीय शर्तें जाँचें: grant में अधिकतम एक 1; grant=1 वाली स्थिति पर वास्तविक अनुरोध; और चुनी गई संख्या से ऊपर सभी अनुरोध 0। यह अभ्यास अनुरोध को खपत नहीं करता और पिछला चयन याद नहीं रखता। r3 लगातार सक्रिय रहने पर नीचे के अनुरोधों का प्रतीक्षा करना स्थिर प्राथमिकता का गुण है।
खुद आज़माएँ
अनुरोध 0101 और 0001 के लिए index, valid और grant लिखें। 0000 पर केवल index=00 के कारण r0 की सेवा क्यों नहीं करनी चाहिए?
व्याख्या पढ़ें
0101 पर index=10, valid=1, grant=0100। 0001 पर index=00, valid=1, grant=0001। 0000 पर index=00 केवल डिफ़ॉल्ट है; valid=0, grant=0000 बताते हैं कि कोई अनुरोध नहीं है।