मैं आपको यह बताने का प्रयास करूंगा कि डिजिटल प्रोसेसिंग समस्याओं को हल करने के लिए डिजिटल सर्किट कैसे डिज़ाइन किए जाते हैं, जो आपके द्वारा बताई गई समस्याओं का उपयोग करके करते हैं: सीपीयू कैसे परिवर्धन और गुणा लागू करते हैं।
सबसे पहले, सीधे सवाल को रास्ते से हटाने की अनुमति देता है: कैसे एक प्रोग्रामिंग भाषा कुशलता से गुणन और परिवर्धन का मूल्यांकन करती है। उत्तर सरल है, वे उन्हें गुणा में निर्देश देते हैं और निर्देश जोड़ते हैं। उदाहरण के लिए, निम्न कोड:
a = 1 + 1;
b = a * 20;
बस कुछ इस तरह संकलित है:
ADD 1 1 a
MUL a 20 b
(ध्यान दें, कि उपरोक्त विधानसभा एक काल्पनिक सीपीयू के लिए है जो मौजूद नहीं है, सरलता के लिए)।
इस बिंदु पर आपको पता चलता है कि उपरोक्त उत्तर बस समस्या को स्थानांतरित करता है और इसे हार्डवेयर जादू द्वारा हल करता है। अनुवर्ती प्रश्न स्पष्ट रूप से है कि हार्डवेयर जादू कैसे काम करता है?
पहले सरल समस्या को देखें: इसके अलावा।
पहले हम एक परिचित समस्या करते हैं, नियमित आधार 10 संख्याओं में जोड़ते हैं:
17
+28
पहला कदम 7 और 8 जोड़ना होगा। लेकिन 15 में यह परिणाम एक एकल अंक से अधिक है। तो हम ले 1:
(1)
17
+28
= 5
अब हम 1, 1 और 2 को एक साथ जोड़ते हैं:
17
+28
=45
तो इससे हमें निम्नलिखित नियम मिलते हैं:
जब जोड़ का परिणाम एक से अधिक अंक होता है, तो हम कम से कम महत्वपूर्ण अंक रखते हैं और सबसे महत्वपूर्ण अंक को आगे ले जाते हैं
यदि हमारे पास हमारे कॉलम में एक अंक है, तो हम इसे उन संख्याओं के साथ जोड़ते हैं, जिन्हें हम जोड़ रहे हैं
अब यह आधार 2 में नियमों की व्याख्या करने का समय है - बूलियन बीजगणित।
तो बूलियन बीजगणित में, 0 और 1 को एक साथ जोड़ना = 1. 0 और 0 = 0. जोड़ना और 1 और 1 = 10 को जोड़ना जो एक से अधिक अंक हैं इसलिए हम 1 को आगे ले जाते हैं।
इससे हम एक सत्य तालिका बना सकते हैं:
a b | sum carry
-------------------
0 0 | 0 0
0 1 | 1 0
1 0 | 1 0
1 1 | 0 1
इससे हम दो सर्किट / बुलियन समीकरण बना सकते हैं - एक सम के आउटपुट के लिए और दूसरा कैरी के आउटपुट के लिए। सबसे भोला तरीका केवल सभी जानकारी को सूचीबद्ध करना है। कोई भी सत्य तालिका, चाहे वह इस रूप में कितनी भी बड़ी और जटिल क्यों न हो:
(AND inputs in first row) OR (AND of inputs in second row) OR ...
यह मूल रूप से उत्पादों का योग है। हम केवल 1 में परिणाम वाले आउटपुट को देखते हैं और 0s को अनदेखा करते हैं:
sum = (NOT a AND b) OR (a AND NOT b)
चलो प्रोग्रामिंग भाषा के प्रतीकों के साथ AND या NOT की जगह लें, ताकि पढ़ने में आसानी हो:
sum = (!a & b) | (a & !b)
असल में, हमने तालिका को इस तरह परिवर्तित कर दिया है:
a b | sum equation
-------------------
0 0 | 0
0 1 | 1 (!a & b)
1 0 | 1 (a & !b)
1 1 | 0
इसे सीधे सर्किट के रूप में लागू किया जा सकता है:
_____
a ------------| |
\ | AND |-. ____
\ ,-NOT--|_____| \ | |
\/ `--| OR |----- sum
/\ _____ ,--|____|
/ `-NOT--| | /
/ | AND |-`
b ------------|_____|
पर्यवेक्षक पाठकों को इस बिंदु पर ध्यान देना चाहिए कि उपरोक्त तर्क वास्तव में एक ही द्वार के रूप में लागू किया जा सकता है - एक XOR गेट जो सुविधाजनक रूप से हमारे सत्य तालिका द्वारा आवश्यक व्यवहार करता है:
_____
a ------------| |
| XOR |---- sum
b ------------|_____|
लेकिन अगर आपका हार्डवेयर आपको XOR गेट प्रदान नहीं करता है, तो ऊपर दिए गए चरण हैं कि आप इसे AND, OR और NOT gates के संदर्भ में कैसे परिभाषित और कार्यान्वित करेंगे।
आप लॉजिक गेट्स को वास्तविक हार्डवेयर में परिवर्तित करने के बारे में क्या करेंगे, यह आपके पास मौजूद हार्डवेयर पर निर्भर करता है। उन्हें विभिन्न भौतिक तंत्रों का उपयोग करके लागू किया जा सकता है जब तक कि तंत्र किसी प्रकार का स्विचिंग व्यवहार प्रदान करता है। तर्क फाटकों को पानी के जेट या हवा (तरल पदार्थ) के कश से ट्रांसिसिटर (इलेक्ट्रॉनिक्स) के गिरते हुए पत्थर तक सब कुछ के साथ लागू किया गया है। यह अपने आप में एक बड़ा विषय है इसलिए मैं इसे खत्म करने जा रहा हूं और कहूंगा कि भौतिक उपकरणों के रूप में लॉजिक गेट को लागू करना संभव है।
अब हम कैरी सिग्नल के लिए भी ऐसा ही करते हैं। चूँकि केवल एक ही स्थिति है जहाँ कैरी सिग्नल सही है, समीकरण बस है:
carry = a & b
तो कैरी सरल है:
_____
a ------------| |
| AND |---- carry
b ------------|_____|
उन्हें एक साथ मिलाकर हम आधे योजक के रूप में जाने जाते हैं:
_____
a ------;-----| |
| | XOR |---- sum
b --;---|-----|_____|
| | _____
| '-----| |
| | AND |---- carry
'---------|_____|
जिस तरह से उपरोक्त सर्किट के लिए समीकरण इस तरह दिखता है:
sum = a ^ b
carry = a & b
आधा योजक कुछ याद कर रहा है। हमने पहला नियम लागू किया है - यदि परिणाम आगे ले जाने की तुलना में एक अंक से अधिक है, लेकिन हमने दूसरा नियम लागू नहीं किया है - यदि कोई कैरी है तो इसे संख्याओं के साथ जोड़ दें।
तो एक पूर्ण योजक को लागू करने के लिए, एक जोड़ने वाला सर्किट जो संख्याओं को जोड़ सकता है जो एक से अधिक अंक हैं, हमें एक सत्य तालिका को परिभाषित करने की आवश्यकता है:
a b c | sum carry
---------------------
0 0 0 | 0 0
0 0 1 | 1 0
0 1 0 | 1 0
0 1 1 | 0 1
1 0 0 | 1 0
1 0 1 | 0 1
1 1 0 | 0 1
1 1 1 | 1 1
राशि के लिए समीकरण अब है:
sum = (!a & !b & c) | (!a & b & !c) | (a & !b & !c) | (a & b & c)
हम उसी प्रक्रिया से गुज़र सकते हैं, जो समीकरण को सरल और समीकरण को आसान बना सकती है और इसे सर्किट आदि के रूप में व्याख्या कर सकता है जैसा कि हमने ऊपर किया है, लेकिन मुझे लगता है कि यह उत्तर बहुत लंबा हो रहा है।
अब तक आपको इस बात का अंदाजा हो जाना चाहिए कि डिजिटल लॉजिक कैसे तैयार किया जाता है। ऐसी अन्य चालें हैं जिनका मैंने उल्लेख नहीं किया है जैसे कि करनूघ के नक्शे (सत्य तालिकाओं को सरल बनाने के लिए उपयोग किए गए) और एस्प्रेसो जैसे तर्क संकलक (ताकि आपको हाथ से बूलियन समीकरणों को कारक न करना पड़े) लेकिन मूल रूप से मूल रूप से मैं क्या कर रहा हूं ऊपर रेखांकित किया हुआ:
समस्या को तब तक निपटाएँ जब तक आप एकल बिट (अंक) के स्तर पर काम न कर सकें।
सत्य तालिका का उपयोग करके इच्छित आउटपुट को परिभाषित करें।
तालिका को बूलियन समीकरण में परिवर्तित करें और समीकरण को सरल बनाएं।
समीकरण को तर्क गेट्स के रूप में व्याख्या करें।
लॉजिक गेट को लागू करके अपने लॉजिक सर्किट को वास्तविक हार्डवेयर सर्किट में बदलें।
यह कैसे मौलिक (या बल्कि, निम्न-स्तर) समस्याओं को वास्तव में हल किया जाता है - बहुत सारे और बहुत सारे सत्य टेबल। असली रचनात्मक कार्य एक जटिल कार्य को तोड़ने में है जैसे कि एमपी 3 डिकोडिंग से बिट स्तर तक ताकि आप इस पर सत्य तालिकाओं के साथ काम कर सकें।
क्षमा करें, मेरे पास यह समझाने का समय नहीं है कि गुणन को कैसे लागू किया जाए। आप इस पर एक दरार लेने की कोशिश कर सकते हैं कि कितने गुणा काम करता है के नियमों का पता लगाकर इसे द्विआधारी में व्याख्या करना और फिर इसे सत्य तालिकाओं तक तोड़ने का प्रयास करें। या आप विकिपीडिया: http://en.wikipedia.org/wiki/Binary_multiplier पढ़ सकते हैं