मैं एक साधारण 16 बिट प्रोसेसर मैं एक Altera DE1 बोर्ड पर लागू करने के लिए कर रहा हूँ VHDL कोड में एक परिमित राज्य मशीन लिखने की कोशिश कर रहा हूँ। फाइनेट स्टेट मशीन में, मेरे पास CASE
कथन है जो विभिन्न 16-बिट निर्देशों को संभालता है, जिन्हें 16-बिट STD_LOGIC_VECTOR द्वारा FSM में लाया जाता है। हालांकि, मुझे डिकोड राज्य में थोड़ी सी परेशानी हो रही है जहां परिमित राज्य मशीन निर्देश को डीकोड करती है। निर्देशों में से एक एक एडीडी है जो दो रजिस्टरों को ऑपरेंड के रूप में लेता है और गंतव्य रजिस्टर के रूप में तीसरा होता है। हालांकि, मेरे पास एक एडीडी निर्देश भी है जो एक रजिस्टर और 5-बिट तत्काल मूल्य ऑपरेटरों के रूप में और गंतव्य के लिए दूसरा रजिस्टर लेता है। मेरी समस्या यह है कि CASE
कथन में, मुझे दो अलग-अलग एडीडी निर्देशों के बीच अंतर करने में सक्षम होना चाहिए। इसलिए, मैंने सोचा कि अगर मैं CASE
कथन में "-" या "एक्स" जैसे वाइल्डकार्ड मानों का उपयोग करता हूं, तो मैं संभवतः सभी संभावित रजिस्टर/तत्काल मूल्य संयोजनों को सूचीबद्ध करने के बजाय दोनों के बीच अंतर करने में सक्षम होगा। उदाहरण के लिए:VHDL STD_LOGIC_VECTOR वाइल्डकार्ड मान
CASE IR IS --(IR stands for "Instruction Register")
WHEN "0001------0-----" => (Go to 3-register add);
WHEN "0001------1-----" => (Go to 2-register/immediate value add);
WHEN OTHERS => (Do whatever);
END CASE;
ये मेरे पास केवल दो निर्देश नहीं हैं, मैंने इन पोस्ट को थोड़ा छोटा बनाने के लिए इन दोनों को रखा है। जब मैं संकलित करता हूं और इस कोड को चलाता हूं, तो जब प्रोसेसर "डीकोड" स्थिति में जाता है तो प्रोसेसर निष्पादित करना बंद कर देता है। इसके अलावा, क्वार्टस कई चेतावनियां देता है जैसे "एलसी 3FSM.vhd (37) पर वीएचडीएल पसंद चेतावनी: मेटा-वैल्यू" 0001 ------ 0 ----- "" " इसे पूरा करने के तरीके के बारे में एक नुकसान के रूप में। मैं वास्तव में नहीं करता हूं और शायद हर 16-बिट संयोजन को परिभाषित करने की आवश्यकता नहीं है, और मुझे आशा है कि एसटीडी_LOGIC_VECTOR में वाइल्डकार्ड का उपयोग करने के लिए संयोजनों की संख्या को कम करने के लिए वाइल्डकार्ड का उपयोग करने का एक तरीका है।
क्या कोई यह जानता है कि इसे कैसे पूरा किया जाए?
धन्यवाद
आह, आपके सुझाव के लिए पॉल सिब बहुत बहुत धन्यवाद। कल मैंने सवाल पूछने के बाद, मैंने प्रत्येक ऑपरेशन कोड के लिए 'केस' कथन का उपयोग करने और फिर अन्य आवश्यक तुलना करने के लिए 'IF' कथन का उपयोग करने का विचार किया। आपकी पहली विधि, हालांकि कोड को थोड़ा छोटा बनाता है, इसलिए मैंने इसका इस्तेमाल किया। धन्यवाद, आपके सुझाव के लिए मार्क थॉम्पसन भी। –