Altifigence Academy

11 / 37 · अवधारणा

एनकोडर और प्राथमिकता: कई अनुरोधों में से एक चुनना

one-hot एनकोडर की इनपुट मान्यता और प्राथमिकता एनकोडर के valid तथा चयन परिणाम में अंतर करें।

डिकोडर की उलटी दिशा को भी शर्तें चाहिए

डिकोडरडिकोडर द्विआधारी कोड के अनुरूप आउटपुट लाइन सक्रिय करता है। enable होने पर निष्क्रिय अवस्था में सभी आउटपुट 0 रखे जा सकते हैं। विस्तार से पढ़ें पते को one-hotone-hot कई बिटों में ठीक एक 1 वाला निरूपण। सभी 0 की अनुमति वाली शर्त को अलग से one-hot-or-zero कहते हैं। विस्तार से पढ़ें चयन लाइनों में बदलता है। एनकोडर सक्रिय इनपुट की स्थिति को पते में बदलता है। सामान्य one-hot एनकोडर मानता है कि केवल एक इनपुट सक्रिय है। कई इनपुट एक साथ 1 हों तो किसकी स्थिति बताएँ, यह अतिरिक्त विनिर्देश चाहिए।

चार-बिट अनुरोध r3r2r1r0r_3r_2r_1r_0 में बड़ी संख्या वाले अनुरोध को प्राथमिकता दें। सभी इनपुट 0 होने पर valid=0 और index=00 रखें। केवल index=00 देखकर “कोई अनुरोध नहीं” कहेंगे तो r0 के अनुरोध से भ्रम होगा।

इनपुट r3r2r1r0validindex
1---111
01--110
001-101
0001100
0000000

सारणी का - दर्शाता है कि 0 और 1 दोनों पर परिणाम समान है। इसका अर्थ सिम्युलेशन का X इनपुट स्वीकार्य होना नहीं है। ऊपर से प्रत्येक पैटर्न परस्पर अपवर्जी है।

valid=r3+r2+r1+r0,index1=r3+r2,index0=r3+r2‾r1valid=r_3+r_2+r_1+r_0,\quad index_1=r_3+r_2,\quad index_0=r_3+\overline{r_2}r_1

1011 पर index=11। 0110 पर r2 की प्राथमिकता r1 से अधिक है, इसलिए index=10।

हर स्तंभ अनुरोधों का स्वतंत्र संयोजन है
तरंगरूप डेटा देखें
तरंगरूप डेटा: हर अक्षर एक अंतराल है; बिंदु पिछली अवस्था बनाए रखता है; p एक क्लॉक चक्र है।
संकेततरंगरूपबस मान
requests2345230000 → 0001 → 0011 → 0110 → 1011 → 1000
valid01....
index2.345.00 → 01 → 10 → 11

RTL में प्राथमिकता स्पष्ट होनी चाहिए

SystemVerilog
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 को फिर डिकोड करने का परिणाम है।

granti=valid∧(index=i)grant_i=valid\land(index=i)

तीन अपरिवर्तनीय शर्तें जाँचें: 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 बताते हैं कि कोई अनुरोध नहीं है।

आपका चयन इस ब्राउज़र पर लागू होता है। फ़ुटर से कभी भी बदलें।