सॉफ्ट-सीपीयू सत्यापन


18

मैं अभी Xilinx ISE और ISIM का उपयोग करके VHDL में एक साधारण CPU डिजाइन करने की प्रक्रिया में हूँ। डिजाइन भाग उल्लेखनीय रूप से अच्छा चल रहा है, लेकिन मैं सुसंगत तरीके से सत्यापन करने का एक तरीका नहीं खोज सकता।

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

मैंने एक व्यापक परीक्षण सूट विकसित करने के बारे में सोचा है, लेकिन समस्या यह है कि सीपीयू के रूप में सामान्य उद्देश्य वाले हिस्से की संभावित स्थिति कम जेनेरिक घटकों की तुलना में बहुत बड़ी है।

मैं एक ऐसी विधि की तलाश में हूं जो मुझे डिजाइन और परीक्षण को अधिक नियंत्रित तरीके से करने की अनुमति दे। यदि आप करेंगे तो कुछ प्रकार के "हार्डवेयर टीडीडी"। क्या ऐसी किसी वस्तु का अस्तित्व है? क्या यह सीपीयू जैसे सामान्य प्रयोजन भागों में अपेक्षाकृत आसानी से लागू हो सकता है?

जवाबों:


16

सीपीयू सत्यापन का पूरा मुद्दा सुपर बड़ा और कठिन है। ऐसे लोग हैं जो इस से बाहर अपना कैरियर बनाते हैं। मैं आपको सिर्फ अवलोकन दूंगा ...

  1. एक असेंबली लैंग्वेज प्रोग्राम लिखें जो हर निर्देश और हर निर्देश की हर छोटी बारीकी का परीक्षण करता है। उदाहरण के लिए, जब ADD निर्देश का परीक्षण करते हैं, तो आप इसे उन संख्याओं के साथ परीक्षण कर सकते हैं जो सकारात्मक, नकारात्मक दोनों हैं, और प्रत्येक (दो बार) में से एक है। फिर आप कैरी फ़्लैग, ज़ीरो फ़्लैग, आदि का परीक्षण करेंगे। सीपीयू की अन्य विशेष विशेषताएँ (जैसे शाखा भविष्यवाणी, आदि) इस परीक्षण का अपना विशेष हिस्सा होगा।

  2. लिखें, C / C ++ या कुछ और, अपने CPU का एक मॉडल। यह आपका वर्चुअल CPU है। यह आपका "गोल्डन सीपीयू" भी है, जिसका अर्थ है कि यह सीपीयू है जो बाकी सब की तुलना में है। आदर्श रूप से VHDL लिखने वाला व्यक्ति C / C ++ मॉडल लिखने वाला वही व्यक्ति नहीं है।

  3. एक ऐसी प्रणाली लिखें / बनाएं जहां आप C / C ++ मॉडल और VHDL मॉडल को एक साथ चला सकते हैं, और परिणामों की तुलना साइकिल के आधार पर कर सकते हैं। चरण 1 से अपना असेंबली प्रोग्राम चलाएं और सुनिश्चित करें कि दो मॉडल मेल खाते हैं।

  4. यादृच्छिक "निर्देश" पर अपने दो मॉडल चलाएं। असल में, यादृच्छिक डेटा के साथ "राम" भरें और उस यादृच्छिक डेटा को निष्पादित करें जैसे कि यह वास्तविक निर्देश है। VHDL और C / C ++ मॉडल दोनों पर समान यादृच्छिक डेटा चलाएं और परिणामों की तुलना करें। यह C / C ++ मॉडल कुछ वर्कस्टेशन और / या सर्वर (नया CPU ही नहीं) पर चलेगा।

  5. चरण 4 को अनिवार्य रूप से हमेशा के लिए दोहराने के लिए एक मशीन या कई मशीनों को सेट करें। यहां तक ​​कि अगर आपका सीपीयू "समाप्त" है और एक साल या उससे अधिक समय से उत्पादन में है, तब भी आप इस परीक्षण को चला रहे होंगे।

  6. जब भी अनुकरण करने के लिए अधिक सामान हो तो इन चरणों को दोहराएं। उदाहरण के लिए, आप इसे पोस्ट-मार्ग VHDL पर उस समय के साथ चलाएंगे जब यह उपलब्ध होगा।

इस बात की कोई गारंटी नहीं है कि VHDL और C / C ++ वर्जन की तुलना करना हर एक बग को पकड़ लेगा - लेकिन वास्तव में एक बेहतर तरीका नहीं है। और यादृच्छिक निर्देशों पर सीपीयू का परीक्षण करने में समय लगता है, लेकिन यह भी बहुत उपयोगी है। इसका एकमात्र वास्तविक विकल्प सीपीयू के विभिन्न हिस्सों का परीक्षण करने के लिए सभी लोगों को बस पूरे दिन कोड लिखना है - और बड़ी कंपनियां ऐसा करती हैं, लेकिन वे यादृच्छिक डेटा सामान भी करते हैं।

VHDL कोड लिखने वाले किसी एकल व्यक्ति के लिए, आमतौर पर यह केवल चरण # 1 होता है। लेकिन अगर आप सीपीयू बेचने जा रहे हैं, तो कम से कम कुछ अन्य चरण होने चाहिए (और वास्तव में, आपको उन सभी को करना चाहिए)।


बहुत बढ़िया जवाब, धन्यवाद! इसके बहुत सारे अर्थ निकलते हैं। "गोल्डन सीपीयू" वास्तव में पहेली का अनुपलब्ध टुकड़ा है जो आपको परीक्षण के दौरान चक्र-दर-चक्र सत्यापन करने में सक्षम बनाता है। चूंकि यह ज्यादातर एक खिलौना परियोजना है, मुझे लगता है कि मैं अंतिम पैराग्राफ के पहले वाक्य के अनुरूप हूं और # 1 चरण पर कदम रखता हूं। लेकिन यह जानना कि मुझे क्या करना चाहिए, वह अमूल्य है।
drxzcl

आपके पास एक सुनहरा, लेकिन गैर-चक्र-सटीक, सी ++ मॉडल हो सकता है जो इसे बहुत सरल बनाने की अनुमति देता है और इसलिए इसके सही होने की अधिक संभावना है - उदाहरण के लिए ALU कार्यक्षमता का परीक्षण करने के लिए उपयोगी ("2 + 2 = 4 और कुछ झंडे, I परवाह न करें जब "एक टिक के बाद" 2 + 2 = 4 के बजाय "और 2 टिक्स के बाद झंडे")
मार्टिन थॉम्पसन

इसके अलावा, कोड-कवरेज को चलाएं (यह जांचने के लिए कि आपने यह सब प्रयोग किया है) और परीक्षण-कवरेज (सभी परीक्षणों को पेस और असफल दोनों के लिए जांचा गया है)
मार्टिन थॉम्पसन

अनुवर्ती: "चरण एक" प्रक्रिया का उपयोग करते हुए, मैं बहुत सारे दोष खोजने में कामयाब रहा ... मेरे कोडांतरक में: पी खुद को अपेक्षाकृत ठीक लगता है।
drxzcl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.