अहस्ताक्षरित पूर्णांक अधिकतम हार्डवेयर में कैसे लागू किया जाता है?


10

मैं एक ऐसे डिजाइन पर काम कर रहा हूं जिसमें बहुत सारे अधिकतम कार्य शामिल हैं (और अधिकतम कार्य अन्य अधिकतम कार्यों के तर्क के रूप में)।

हार्डवेयर डिज़ाइन को सरल बनाने के प्रयास में मैं सोच रहा था कि हार्डवेयर में अधिकतम कैसे लागू किया जाता है?

गणितीय रूप से, Max (a, b) को [(a + b) + abs (b - a)] / 2 के रूप में दर्शाया जा सकता है।

क्या यह कैसे हार्डवेयर में लागू किया गया है? (यानी चरणों में, इसके अलावा, बिट शिफ्ट डिवीजन, आदि)

यदि हां, तो अंतर की गणना कैसे की जाती है?

जवाबों:


10

लागू करने के लिए एक बहुत ही सरल तरीका होगा (a> b)? A: b। a> b को बाईं ओर से शुरू करके लागू किया जा सकता है और प्रत्येक (a, b) की बिट जोड़ी की जाँच करें:

  • दोनों 0 या दोनों 1: अगले निचले जोड़े में जारी रखें
  • a a 1: a उच्चतम है; b 1 है: b उच्चतम है

जब आप जानते हैं कि कौन सा सबसे अधिक है, तो आप उस 2N-> N mux द्वारा एक का चयन कर सकते हैं।

कुछ चतुर चाल के साथ बिट जोड़े की जाँच को उसी बिट जोड़ी के लिए muxer के साथ जोड़ा जा सकता है।


2

प्रश्न में एल्गोरिथ्म को देखने की सुविधा देता है:

[(a + b) + abs(b - a)]/2

इसके बाद जोड़ और घटाव चरण होते हैं जिन्हें बाद में दूसरे चरण में जोड़ा जाता है। 2 से विभाजित हार्डवेयर में तुच्छ है, यह एलएसबी को हटाकर किया जा सकता है। हालाँकि दो-चरण पूर्ण-योजक / घटाव बहुत धीमा और गेट-सघन है, खासकर यदि आप जैसे कई कैपरसन को कैस्केडिंग कर रहे हैं।

Wouter van Ooijen के उत्तर का निर्माण, सामान्यीकृत संरचना एक डिजिटल तुलनित्र है जो एक mux के चयन संकेत को खिलाती है:

ढांच के रूप में

इस सर्किट का अनुकरण करें - सर्किटलैब का उपयोग करके बनाई गई योजनाबद्ध

उपरोक्त योजनाबद्ध इसके लिए है:

(A > B) ? A : B

लेकिन ध्यान दें कि यह दो आदानों के बीच किसी भी तुलना के लिए आसानी से पुन: कॉन्फ़िगर किया जा सकता है ताकि तुलनित्र आउटपुट और मक्स चयन के बीच अलग-अलग तार्किक कनेक्शन बना सकें।

इसलिए यदि हम जानते हैं कि तुलनित्र से तीन आउटपुट कैसे तैयार किए जाएं, तो हम हार्डवेयर में किसी भी तुलना को लागू कर सकते हैं। तुलनात्मक तर्क यहाँ अच्छी तरह से वर्णित है । हार्डवेयर का अनुकूलन करने के लिए, हम अप्रयुक्त तुलनित्र आउटपुट ड्राइविंग तर्क को हटा देंगे।

लेकिन अंत में, यदि इसके हार्डवेयर में जाना है, तो इसे संश्लेषण से गुजरना पड़ता है। इसलिए आपको इस बात पर ध्यान नहीं देना चाहिए कि कौन सी गेट-स्तरीय योजना इष्टतम है। इसके बजाय, अपने कोड और एल्गोरिदम का अनुकूलन करें ताकि आप कम से कम सिंथेसाइज़र को एक अक्षम परिणाम देने के लिए मजबूर न करें। "कुछ चतुर चाल के साथ बिट जोड़े की जाँच को उसी बिट जोड़ी के लिए muxer के साथ जोड़ा जा सकता है," और इस अनुकूलन को करने का सबसे आसान तरीका संश्लेषण के साथ है।


1

यदि आप वास्तव में अधिकतम गणना करने के लिए एक विशेष सर्किट का निर्माण करना चाहते हैं, तो आप निम्नलिखित समीकरणों के साथ एक बुनियादी ब्लॉक के साथ शुरू कर सकते हैं:

मैं,यूटीमैं,मैंn¬(मैंमैं)एलमैं,यूटी(¬मैं,मैंnएलमैं,मैंn)(मैं,मैंnमैं¬मैं)आरमैं(¬मैं,मैंn((एलमैं,मैंnमैं)(¬एलमैं,मैंnमैं)))(मैं,मैंn(मैंमैं))

और फिर उन्हें अगले एक सबसे महत्वपूर्ण अंक के साथ जोड़ते हैं। महत्वपूर्ण हिस्सा MSB से LSB तक जाता है जबकि सबस्टेशन पर आधारित सर्किट में LSB से MSB तक जाने के लिए सबसे महत्वपूर्ण रास्ता होगा, फिर LSB से वापस आएगा।

यह कैरी-रिपल योजक के बराबर है। यदि आप रुचि रखते हैं तो आप कैरी-सेव या कैरी-सलेक्टर्स के समकक्ष बना सकते हैं।

( यहाँ तक बराबर का मतलब है, और एल केवल तभी एक अर्थ है ¬ और मतलब का चयन करें )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.