एक सीपीयू के लिए ओपकोड को कुशलतापूर्वक कैसे डिज़ाइन करें?


12

मैं Logisim में एक साधारण 16-बिट CPU का निर्माण कर रहा हूं और ALU तैयार है और जो opcodes मेरे पास है। अब मुझे कमांड के लिए सही कोडिंग ढूंढना वास्तव में कठिन लगता है ताकि विभिन्न उप-सर्किट (जैसे तर्क, अंकगणित) को इनपुट के रूप में सभी नियंत्रण तारों (कोडिंग का निर्माण) की आवश्यकता न हो, लेकिन जितना संभव हो उतना कम। क्या कोई रणनीति या विधियां हैं जो एक कुशल ओपकोड डिजाइन के साथ मदद करती हैं?

अग्रिम में thx


1
पहले अपने ALU का निर्माण करें, और देखें कि उसे किन नियंत्रण तारों की आवश्यकता है। फिर उन्हें सीधे "वर्तमान निर्देश" रजिस्टर में वायर करें। मेमोरी एक्सेस कंट्रोल लॉजिक और किसी भी अन्य प्रमुख वर्गों के लिए समान है। फिर जो भी बिटकॉइन सक्रिय है उसे चुनने के लिए जो भी बिट्स बचे हैं उनका उपयोग करें।
user253751

1
उनके 8-बिट प्रोग्रामेबल KCPSM उर्फ ​​PicoBlaze के केन चैपमैन का मूल पेपर भी है। यह बताता है कि वह कैसे निर्देश चुनते हैं और आईएसए को डिज़ाइन करते हैं। dc.uba.ar/materias/disfpga/2010/c2/descargas/…
Paebbels

जवाबों:


9

मुझे लगता है कि कुछ अन्य अनुदेश सेटों का अध्ययन करना एक अच्छा तरीका है।

एक छोटा एक टीएस से MSP430 होगा यह लगभग 22 निर्देशों के साथ एक 16bit प्रोसेसर है।

http://www.physics.mcmaster.ca/phys3b06/MSP430/MSP430_Instruction_Set_Summary.pdf

आप Atmel AVR में भी देख सकते हैं कि उनके पास एक बहुत छोटा निर्देश सेट है।

मेरी एक छोटी सी परियोजना में मैंने VHDL में एक छोटे से निर्देश सेट (14 निर्देश) के साथ एक साधारण 32 बिट प्रोसेसर विकसित करने की कोशिश की:

http://www.blog-tm.de/?p=80

मेरे वर्तमान खाली समय के कारण यह पूरी तरह से समाप्त नहीं हुआ है। निर्देशों को लागू किया गया है लेकिन दो का परीक्षण नहीं किया गया है और शायद कुछ स्थिति के झंडे गायब हैं।


लेकिन मुझे ऐसा कुछ नहीं मिला जहाँ मैं देख सकूँ कि वास्तविक एन्कोडिंग क्या है और इसे इस तरह क्यों चुना गया।
बेनजोय

आप रेपो में एक्टुएल एन्कोडिंग पा सकते हैं: github.com/TM90/MISC_Processor/raw/master/Documentation/… । कारण है कि मैं इन एन्कोडिंग को इस तरह से चुनता हूं कि निर्देश डिकोडर में तर्क कम से कम मिला।
TM90

7

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

अकल्पनीय लेकिन विश्वसनीय दृष्टिकोण आपके पास सभी नियंत्रण संकेतों की गणना करना है, जो संभवतः 16 बिट्स से अधिक होंगे, और फिर उन पर कर्णघट-मानचित्र शैली तर्क कम से कम करने का प्रयास करेंगे।


मुझे वास्तव में वह नहीं मिलता है जो आपके नियंत्रण संकेतों से है।
बेंजोए

मैंने एआरएम के बारे में जो पाया और जैसा शर्त क्षेत्र है, मैं उसमें शामिल करूंगा।
बेनजोय

नियंत्रण संकेत विभिन्न मल्टीप्लेक्सर्स के लिए इनपुट हैं और सीपीयू के हिस्सों के बीच उस प्रत्यक्ष डेटा को सक्षम करते हैं।
pjc50

16-बिट आर्किटेक्चर के लिए, मुझे नहीं लगता कि एआरएम का निर्देश एन्कोडिंग उचित है। Mayby thumb2 बेहतर है। लेकिन मुझे एन्कोडिंग का MIPS तरीका पसंद है, सरल और समझने में आसान है, हालाँकि थोड़ा बेकार
phuclv

4

एक बार जब मैंने Logisim में 8-बिट अनुदेश लंबाई कोर के साथ 4-बिट सीपीयू करने की कोशिश की। एक साधारण राज्य मशीन के साथ समाप्त हुआ, सीपीयू से अधिक, वास्तव में।

देखने के लिए यादृच्छिक चीजें

  • हफमैन के पेड़
  • निश्चित-लंबाई या चर एन्कोडिंग?
  • क्या यह एक वॉन न्यूमैन डिजाइन है जिसमें सिंगल एड्रेस स्पेस है, या हार्वर्ड-स्टाइल अलग डेटा / प्रोग्राम है?

हफमैन पेड़ों के बारे में कंप्यूटरफाइल पर उत्कृष्ट वीडियो:

https://www.youtube.com/watch?v=umTbivyJoiI


हफ़मैन कोडिंग एक निश्चित लंबाई एन्कोडिंग के लिए काम नहीं करेगा, है ना?
बेनजोय

@Benjoyo मैं एक परिदृश्य की कल्पना कर सकता हूं, जिसका उपयोग सबसे अधिक उपयोग किए जाने वाले निर्देशों की विविधता के लिए किया जा रहा है, इस प्रकार अधिक कार्यक्षमता प्रदान करता है।
दजर्दा

लेकिन मुझे नहीं लगता कि यह किस प्रकार का अनुकूलन लाता है। यह सर्किट डिजाइन के साथ मेरी मदद नहीं करता है। ओफ़्कोड के लिए हफ़मैन कोडिंग का उपयोग करते समय लक्ष्य क्या है?
बेनजोय

4

ISA मैंने कक्षा के लिए एक बार लिखा था जिसमें 4 बिट ऑप कोड था जैसे: 1XXX ALU instructions 01XX jump, jump register, call etc 001X branch not equal, branch equal zero 000X 0 - load, 1 - store

सबसे इष्टतम होने के बजाय, फाटकों के निर्माण / डिजाइन करने के लिए यह आसान शैलियों में से एक है क्योंकि एक एकल बिट का इनपुट संकेत पूरी तरह से नियंत्रित कर सकता है कि तर्क मार्ग क्या है। वैकल्पिक रूप से, आप एक निश्चित लंबाई सेशन कोड प्राप्त करने के लिए अपने सबसे अधिक इस्तेमाल किए गए प्रतीकों को हफ़मैन कोड और शून्य पैड कर सकते हैं।


इस तरह का अनुकूलन मैं इस समय देख रहा हूँ। लेकिन मेरे पास 5 बिट ओपकोड है और मैं कमांड को एक साथ समूहीकृत करने के लिए संघर्ष करता हूं ताकि यह सर्किट में समझ में आए।
बेनजोय

@Benjoyo आप ऊपरी बिट सेट के साथ अधिक ALU निर्देशों का एक गुच्छा हो सकते हैं। इसके अलावा मेरी कूद स्थिति कवरेज बहुत कमजोर थी और सबसे सामान्य शाखाओं को दो निर्देशों की आवश्यकता होगी। आम तौर पर, मैंने श्रेणियों के बारे में सोचा: गणित / नियंत्रण / मेमोरी

3

एक बात पर आपको विचार करना होगा कि क्या बहु-शब्द निर्देश के किसी भी रूप को अनुमति देने के लिए, या कुछ भी जो बहु-शब्द निर्देश की तरह "कार्य" कर सकता है; यदि आप करते हैं, तो आप मुख्य अनुदेश के बाद अतिरिक्त अनुदेश शब्दों का उपयोग करना चाहते हैं या इसके पहले उपसर्ग शब्दों पर विचार करना चाहते हैं। उपसर्गों और अनुवर्ती शब्दों की अनुमति देने से रुकावट से निपटने की जटिलता बढ़ सकती है, लेकिन यह आमतौर पर उपयोग किए जाने वाले ओपोड स्थान में शायद ही कभी उपयोग किए जाने वाले निर्देशों को फिट करने की आवश्यकता से बच सकता है।

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

भले ही शाखा निर्देशों से लक्ष्य का पता चल रहा हो, लेकिन यह कितना कम हो जाएगा कि वे कितने ओपकोड स्थान को छोड़ देते हैं, एक 16-बिट ओपकोड प्रारूप अभी भी बहुत तंग है। उपसर्ग निर्देश का उपयोग करने से मदद मिल सकती है। यदि, उदाहरण के लिए, कोई 32 रजिस्टर करना चाहता है, तो किसी भी रजिस्टर को स्रोत 1, स्रोत 2 के रूप में स्वतंत्र रूप से निर्दिष्ट करने की अनुमति देता है, और गंतव्य को ओपकोड में 15 बिट्स की आवश्यकता होगी, जो दो निर्देशों का एक कुल मिलाकर अनुमति देता है। बहुत उपयोगी नहीं है। दूसरी ओर, तीन में से प्रत्येक के लिए 32 रजिस्टरों का उपयोग करने में सक्षम होना अच्छा होगा। कोई भी दो ALU ऑपरेशन होने से दो लक्ष्यों को संतुलित कर सकता है, जो दो उप-सोलह रजिस्टर चयनों को बनाने के लिए आठ बिट्स का उपयोग उपसर्ग से पहले नहीं है, लेकिन एक ALU ऑपरेशन है जो तुरंत उपसर्ग का उपयोग करता है उपसर्ग में कुछ बिट्स का उपयोग करता है निम्नलिखित निर्देश से आठ के साथ, ऐसा करने के लिए दोनों स्रोतों के स्वतंत्र चयन और 32 के पूर्ण सेट से गंतव्य को अनुमति देने के लिए। ऊपरी रजिस्टरों का उपयोग करने वाले निर्देश एक के बजाय दो शब्द / चक्र ले लेंगे, लेकिन कुछ मामलों में ऐसा ट्रेडऑफ अच्छी तरह से सार्थक हो सकता है। उपसर्गों का उपयोग करने में सबसे बड़ी कठिनाई यह है कि एक उपसर्ग और अगले निर्देश के बीच होने से एक अवरोध को रोकना चाहिए या फिर यह सुनिश्चित करना चाहिए कि यदि कोई बाधा उत्पन्न होती है, तो उपसर्ग के बाद भी अनुदेश सही रजिस्टरों का उपयोग करेगा [जैसे कि कार्यक्रम होने से -सबसे बचाने के तर्क को अंतिम गैर-उपसर्ग निर्देश निष्पादित किए गए पते का पता लगाएं]। लेकिन कुछ मामलों में ऐसा ट्रेडऑफ अच्छी तरह से सार्थक हो सकता है। उपसर्गों का उपयोग करने में सबसे बड़ी कठिनाई यह है कि एक उपसर्ग और अगले निर्देश के बीच होने से एक अवरोध को रोकना चाहिए या फिर यह सुनिश्चित करना चाहिए कि यदि कोई बाधा उत्पन्न होती है, तो उपसर्ग के बाद भी अनुदेश सही रजिस्टरों का उपयोग करेगा [जैसे कि कार्यक्रम होने से -सबसे बचाने के तर्क को अंतिम गैर-उपसर्ग निर्देश निष्पादित किए गए पते का पता लगाएं]। लेकिन कुछ मामलों में ऐसा ट्रेडऑफ अच्छी तरह से सार्थक हो सकता है। उपसर्गों का उपयोग करने में सबसे बड़ी कठिनाई यह है कि एक उपसर्ग और अगले निर्देश के बीच होने से एक अवरोध को रोकना चाहिए या फिर यह सुनिश्चित करना चाहिए कि यदि कोई बाधा उत्पन्न होती है, तो उपसर्ग के बाद भी अनुदेश सही रजिस्टरों का उपयोग करेगा [जैसे कि कार्यक्रम होने से -सबसे बचाने के तर्क को अंतिम गैर-उपसर्ग निर्देश निष्पादित किए गए पते का पता लगाएं]।

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


0

इस आदमी के पास डिकोडर के हार्डकोड वाले वायरिंग को समझने में सबसे अच्छा विवरण है, जो हार्डकोडेड सीपीयू के लिए नियंत्रण रेखाओं की व्याख्या करता है: http://minnie.tuhs.org/CompArch/Tutes/week03.html जैसा कि आप देख सकते हैं, आपका ओपकोड में चुनाव वास्तव में प्रभावित करता है कि डिकोड तर्क कितना जटिल है।

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