बाइनरी गुणक

एक द्विआधारी गुणक एक विद्युत परिपथ है जिसका उपयोग अंकीय इलेक्ट्रॉनिकी में किया जाता है, जैसे कि संगणक, दो द्विआधारी संख्या को गुणा करने के लिए।

विभिन्न प्रकार कि श्रेणी: संगणक अंकगणितीय तकनीकों का उपयोग अंकीय गुणांक को लागू करने के लिए किया जा सकता है। अधिकांश तकनीकों में आंशिक उत्पादों के सेट की गणना करना सम्मलित है, जिन्हें बाद में द्विआधारी योजक का उपयोग करके एक साथ जोड़ दिया जाता है। यह प्रक्रिया दीर्घ गुणन के समान है, सिवाय इसके कि यह आधार-2 (द्विआधारी अंक प्रणाली) अंक प्रणाली का उपयोग करता है।

इतिहास
1947 और 1949 के बीच आर्थर एलेक रॉबिन्सन ने एक छात्र प्रशिक्षु के रूप में और फिर एक विकास अभियंता के रूप में इंग्लिश विद्युत लिमिटेड के लिए काम किया। महत्वपूर्ण रूप से इस अवधि के दौरान उन्होंने मैनचेस्टर विश्वविद्यालय में पीएचडी की डिग्री के लिए अध्ययन किया, जहां उन्होंने प्रारंभिक मैनचेस्टर मार्क 1 के लिए यंत्रोपवस्तु गुणक के प्रारुप पर काम किया। चूंकि, 1970 के दशक के अंत तक, अधिकांश छोटे संगणक में गुणा निर्देश नहीं था, और इसलिए क्रमादेशक विभिन्न रूटीन का उपयोग करते थे। जो बार-बार गुणन कलन विधि और आंशिक परिणाम जोड़ते हैं, अधिकांशत: पाश अकुंडलन का उपयोग करके लिखा जाता है। बृहत् कंप्यूटर में विभिन्न निर्देश होते थे, लेकिन वे एक ही तरह के बदलाव करते थे और एक विभिन्न रूटीन के रूप में जोड़ते थे।

प्रारंभिक सूक्ष्म संसाधित्र के पास भी कोई गुणा निर्देश नहीं था। चूंकि 16-बिट पीढ़ी के साथ गुणा निर्देश सामान्य: हो गया था, कम से कम दो 8-बिट संसाधित्र के लिए एक गुणा निर्देश है: मोटोरोला 6809, जिसे 1978 में पेश किया गया था, और इंटेल एमसीएस-51 परिवार, 1980 में विकसित हुआ, और बाद में एटीएमगा, एटीटिनी और एटीएक्समेगा सूक्ष्म नियंत्रक में सम्मलित आधुनिक एटमेल एवीआर 8-बिट सूक्ष्म संसाधित्र।

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

क्योंकि कुछ सामान्य अंकीय संकेत प्रक्रिया कलन विधि अपना अधिकांश समय गुणा करने में व्यतीत करते हैं, अंकीय संकेत संसाधित्र प्रारुपर जितना संभव हो उतना तेजी से गुणा करने के लिए काफी चिप क्षेत्र का त्याग करते हैं; एक एकल-चक्र गुणा-संचय इकाई अधिकांशत: प्रारंभिक डीएसपी के अधिकांश चिप क्षेत्र का उपयोग करती थी।

द्विआधारी लंबी गुणा
स्कूल में दशमलव संख्याओं को गुणा करने की विधि आंशिक गुणनफल की गणना करने, उन्हें बाईं ओर स्थानांतरित करने और फिर उन्हें एक साथ जोड़ने पर आधारित है। सबसे कठिन हिस्सा आंशिक उत्पाद प्राप्त करना है, क्योंकि इसमें एक लंबी संख्या को एक अंक (0 से 9 तक) से गुणा करना सम्मलित है:

123   x 456 =====     738 (यह 123 x 6 है) 615 (यह 123 x 5 है, एक स्थिति को बाईं ओर स्थानांतरित कर दिया गया है) + 492 (यह 123 x 4 है, बाईं ओर दो स्थिति बदली गई है) =====   56088 एक द्विआधारी संगणक ठीक वैसा ही गुणा करता है जैसा कि दशमलव संख्याएँ करती हैं, लेकिन द्विआधारी संख्याओं के साथ। द्विआधारी कूटलेखन में प्रत्येक लंबी संख्या को एक अंक (या तो 0 या 1) से गुणा किया जाता है, और यह दशमलव की तुलना में बहुत आसान है, क्योंकि 0 या 1 का गुणनफल केवल 0 या समान संख्या है। इसलिए, दो द्विआधारी नंबरों का गुणन आंशिक उत्पादों (जो 0 या पहली संख्या है) की गणना करने के लिए नीचे आता है, तार्किक रूप से उन्हें छोड़ दिया जाता है, और फिर उन्हें एक साथ जोड़ दिया जाता है (निश्चित रूप से एक द्विआधारी जोड़):

1011 (यह दशमलव 11 के लिए द्विआधारी है) x 1110 (यह दशमलव 14 के लिए द्विआधारी है) == अहस्ताक्षर पूर्णांक == उदाहरण के लिए, मान लीजिए कि हम दो सिग्नेनेस आठ बिट पूर्णांकों को एक साथ गुणा करना चाहते हैं: a[7:0] और b[7:0]। हम आठ एक-बिट गुणन करके आठ आंशिक उत्पाद बना सकते हैं, प्रत्येक बिट के लिए एक गुणक a में: &lt;nowiki&gt;p0[7:0] = a[0] × b[7:0] = {8{a[0]}} & b[7:0] p1[7:0] = a[1] × b[7:0] = {8{a[1]}} और b[7:0] p2[7:0] = a[2] × b[7:0] = {8{a[2]}} और b[7:0] p3[7:0] = a[3] × b[7:0] = {8{a[3]}} और b[7:0] p4[7:0] = a[4] × b[7:0] = {8{a[4]}} और b[7:0] p5[7:0] = a[5] × b[7:0] = {8{a[5]}} और b[7:0] p6[7:0] = a[6] × b[7:0] = {8{a[6]}} और b[7:0] p7[7:0] = a[7] × b[7:0] = {8{a[7]}} और b[7:0]

जहाँ {8{a[0]}} का अर्थ है a[0] (a का 0वां बिट) को 8 बार दोहराना (वेरिलॉग नोटेशन)।

अपना उत्पाद प्राप्त करने के लिए, हमें अपने सभी आठ आंशिक उत्पादों को जोड़ने की आवश्यकता है, जैसा कि यहां दिखाया गया है: p0[7] p0[6] p0[5] p0[4] p0[3] p0[2] p0[1] p0[0] + p1[7] p1[6] p1[5] p1[4] p1[3] p1[2] p1[1] p1[0] 0 + p2[7] p2[6] p2[5] p2[4] p2[3] p2[2] p2[1] p2[0] 0 0 + p3[7] p3[6] p3[5] p3[4] p3[3] p3[2] p3[1] p3[0] 0 0 0 + p4[7] p4[6] p4[5] p4[4] p4[3] p4[2] p4[1] p4[0] 0 0 0 0 + p5[7] p5[6] p5[5] p5[4] p5[3] p5[2] p5[1] p5[0] 0 0 0 0 0 + p6[7] p6[6] p6[5] p6[4] p6[3] p6[2] p6[1] p6[0] 0 0 0 0 0 0 + p7[7] p7[6] p7[5] p7[4] p7[3] p7[2] p7[1] p7[0] 0 0 0 0 0 0 0 --- -- p[15] p[14] p[13] p[12] p[11] p[10] p[9] p[8] p[7] p[6] p[5] p[4] p[ 3] p[2] p[1] p[0]

दूसरे शब्दों में, P[15:0] हमारे अंतिम अहस्ताक्षरित 16-बिट उत्पाद का उत्पादन करने के लिए, p0, p1 << 1, p2 << 2, और इसी तरह के योग द्वारा निर्मित होता है।

हस्ताक्षरित पूर्णांक
यदि b एक हस्ताक्षरित पूर्णांक के अतिरिक्त एक अहस्ताक्षरित पूर्णांक होता, तो आंशिक उत्पादों के योग से पहले उत्पाद की चौड़ाई तक चिहन-विस्तारित करने की आवश्यकता होती। यदि a एक हस्ताक्षरित पूर्णांक होता, तो आंशिक उत्पाद p7 को इसमें जोड़े जाने के अतिरिक्त अंतिम योग से घटाया जाना चाहिए।

उपरोक्त सरणी गुणक को कई उत्पाद शर्तों को उलट कर और पहले आंशिक उत्पाद शब्द के बाईं ओर एक सम्मिलित करके दो के पूरक संकेतन हस्ताक्षरित संख्याओं का समर्थन करने के लिए संशोधित किया जा सकता है:

1 ~p0[7] p0[6] p0[5] p0[4] p0[3] p0[2] p0[1] p0[0] ~p1[7] +p1[6] +p1[5] +p1[4] +p1[3] +p1[2] +p1[1] +p1[0] 0 ~p2[7] +p2[6] +p2[5] +p2[4] +p2[3] +p2[2] +p2[1] +p2[0] 0 0 ~p3[7] +p3[6] +p3[5] +p3[4] +p3[3] +p3[2] +p3[1] +p3[0] 0 0 0 ~p4[7] +p4[6] +p4[5] +p4[4] +p4[3] +p4[2] +p4[1] +p4[0] 0 0 0 0 ~p5[7] +p5[6] +p5[5] +p5[4] +p5[3] +p5[2] +p5[1] +p5[0] 0 0 0 0 0 ~p6[7] +p6[6] +p6[5] +p6[4] +p6[3] +p6[2] +p6[1] +p6[0] 0 0 0 0 0 0 1 +p7[7] ~p7[6] ~p7[5] ~p7[4] ~p7[3] ~p7[2] ~p7[1] ~p7[0] 0 0 0 0 0 0 0 --- --- p[15] p[14] p[13] p[12] p[11] p[10] p[9] p[8] p[7] p[6] p[5] p[4] p[ 3] p[2] p[1] p[0]

जहाँ ~p, p के पूरक (विपरीत मान) को दर्शाता है।

उपरोक्त बिट सरणी में कई सरलीकरण हैं जो दिखाए नहीं गए हैं और स्पष्ट नहीं हैं। एक पूरक बिट के अनुक्रम के बाद गैर-पूरक बिट्स चिहन विस्तार से बचने के लिए दो पूरक चाल को लागू कर रहे हैं। p7 का अनुक्रम (सभी पूरक बिट्स के बाद गैर-पूरक बिट) इसलिए है क्योंकि हम इस शब्द को घटा रहे हैं, इसलिए वे सभी को प्रारंभ करने के लिए नकार दिया गया था (और 1 को कम से कम महत्वपूर्ण स्थिति में जोड़ा गया था)। दोनों प्रकार के अनुक्रमों के लिए, अंतिम बिट को पलटा जाता है और एक अंतर्निहित -1 सीधे एमएसबी के नीचे जोड़ा जाना चाहिए। जब बिट स्थिति 0 (एलएसबी) में p7 के लिए दो के पूरक निषेध से +1 और बिट पंक्ति 7 से 14 (जहां प्रत्येक एमएसबी स्थित हैं) में सभी -1 को एक साथ जोड़ा जाता है, तो उन्हें एकल 1 में सरल बनाया जा सकता है वह जादुई रूप से बाईं ओर तैर रहा है। एमएसबी को पलटने से हमें चिहन विस्तार की बचत क्यों होती है, इसकी व्याख्या और प्रमाण के लिए, एक संगणक अंकगणितीय पुस्तक देखें।

चल बिन्दु संख्या
एक द्विआधारी चल बिन्दु संख्या में एक प्रतीक बिट, महत्वपूर्ण बिट्स (महत्व के रूप में जाना जाता है) और चरघातांक बिट्स (सरलता के लिए, हम आधार और संयोजन फ़ील्ड पर विचार नहीं करते हैं) सम्मलित हैं। उत्तर का चिह्न प्राप्त करने के लिए प्रत्येक संकार्य के चिह्न बिट एक्सओआरडी होते हैं। फिर, परिणाम का घातांक प्राप्त करने के लिए दो घातांकों को जोड़ा जाता है। अंत में, प्रत्येक संकार्य के महत्व का गुणन परिणाम के महत्व को वापस कर देगा। चूंकि, यदि द्विआधारी गुणन का परिणाम एक विशिष्ट परिशुद्धता (जैसे 32, 64, 128) के लिए बिट्स की कुल संख्या से अधिक है, तो निकटन की आवश्यकता होती है और घातांकों को उचित रूप से बदल दिया जाता है।

यंत्रोपवस्तु कार्यान्वयन
गुणन की प्रक्रिया को 3 चरणों में विभाजित किया जा सकता है:
 * आंशिक उत्पाद बनाना
 * आंशिक उत्पाद को कम करना
 * संगणन अंतिम उत्पाद

पुराने गुणक संरचना ने प्रत्येक आंशिक उत्पाद को योग करने के लिए एक शिफ्टर और संचायक को नियोजित किया, अधिकांशत: प्रति चक्र एक आंशिक उत्पाद, सांचे वाले क्षेत्र के लिए गति से व्यापार करना। आधुनिक गुणक संरचना (संशोधित) बॉघ-वूली कलन विधि का उपयोग करते हैं,   वालेस का ट्री, या दद्दा गुणक आंशिक उत्पादों को एक ही चक्र में एक साथ जोड़ने के लिए। वालेस ट्री कार्यान्वयन के प्रदर्शन को कभी-कभी संशोधित बूथ कूटलेखन द्वारा दो गुणकों में से एक में सुधार किया जाता है, जो आंशिक उत्पादों की संख्या को कम करता है जिन्हें योग किया जाना चाहिए।

गति के लिए, शिफ्ट और गुणक जोड़ें को एक तेज़ योजक (रिपल-कैरी से कुछ तेज़) की आवश्यकता होती है।

एक एकल चक्र गुणक (या तेज गुणक ) शुद्ध संयोजी तर्क है।

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

कई तेज गुणक स्थिर सीएमओएस में कार्यान्वित संपीडित्र (3:2 संपीडित्र) के रूप में पूर्ण योजक का उपयोग करते हैं। एक ही क्षेत्र में बेहतर प्रदर्शन या एक छोटे क्षेत्र में समान प्रदर्शन प्राप्त करने के लिए गुणकप्रारुप उच्च क्रम के संपीडित्र जैसे 7:3 संपीडित्र का उपयोग कर सकते हैं; संपीडित्र को तेज गणितीय तर्क में लागू करें (जैसे ट्रांसमिशन गेट तर्क, पास ट्रांजिस्टर तर्क, डोमिनोज़ तर्क); संपीडित्र को एक अलग पैटर्न में जोड करें; या कुछ संयोजन।

यह भी देखें

 * बूथ गुणन कलन विधि
 * जुड़े हुए गुणा-जोड़ें
 * वालेस ट्री
 * जटिल लघुगणक और घातांक के लिए कलन विधि कितना है?
 * मापांक अंकगणितीय गुणन के लिए कोचनस्की गुणन
 * तार्किक बदलाव बाकी

बाहरी संबंध

 * Multiplier Designs targeted at FPGAs
 * Binary Multiplier circuit using Half -Adders and digital gates.