अच्छी तरह से आप गणनाओं का उपयोग कर सकते हैं, सबसे अच्छा तरीका std_logic का अपना वेक्टर घोषित करना होगा, जो पूर्णांक के बजाय गणना द्वारा अनुक्रमित किया गया है।
type Control_Signals is record
Clk : std_logic,
En : std_logic,
Foo : std_logic,
Bar : std_logic,
Baz : std_logic
end record;
अधिक जानकारी के लिए संपादन, टिप्पणी निम्नलिखित:
std_logic_vector (और सामान्य में VHDL के प्रकार प्रणाली) का ख़याल से बाहर उपयोग कर रहा है VHDL
लेकिन शायद बेहतर एक वेक्टर के बजाय एक रिकार्ड होगा पीछे ...
यदि यह शीर्ष स्तर की इकाई है, तो std_logic_vector पोर्ट आपको शीर्ष स्तर testbench में अपने संश्लेषित डिज़ाइन के लिए पोस्ट-संश्लेषण नेटलिस्ट को प्रतिस्थापित करने की अनुमति देता है। या आपको antdated कोडिंग शैली दिशानिर्देशों का पालन करना पड़ सकता है जो std_logic_vector बंदरगाहों पर जोर देते हैं।
लेकिन किसी अन्य परिस्थिति में मैं एक पैकेज में रिकॉर्ड घोषित करता हूं, पूरे पैकेज में उस पैकेज का उपयोग करता हूं, और रिकॉर्ड प्रकार के बंदरगाहों का उपयोग करता हूं। जब आपको वास्तव में std_logic_vectors की आवश्यकता होती है तो पैकेज में to_slv
और to_control_sigs
फ़ंक्शन शामिल होना चाहिए (दुर्लभ, यदि आपको यह सही लगता है) अवसरों के लिए।
ही enumerations के साथ लागू होता है:
type Controls is (Clk, En, Foo, Bar, Baz);
type Control_Signals is array(Controls) of std_logic;
My_Bus_Ctrl : Control_Signals := (Clk => '1', En => '1', others => '0');
My_External_SLV_Port <= std_logic_vector(My_Bus_Ctrl);
और बेशक, enumerations में थोड़ा और अधिक सी में ज्यादा शक्तिशाली हैं; साथ ही सरणी इंडेक्स प्रकारों के रूप में उनका उपयोग करके, आप उन पर लूप कर सकते हैं। जब भी आप गणना अद्यतन करते हैं, जो आपके लूप को लाइन में रखता है!
रिकॉर्ड्स या सरणी दोनों कार्यों द्वारा अनुक्रमित अनुक्रमित; मैं ऑब्जेक्ट उन्मुख अभ्यास के साथ रिकॉर्ड को थोड़ा क्लीनर और अधिक पसंद करता हूं।
किसी भी मामले में यदि आप इकाई बंदरगाहों के लिए इसका उपयोग करते हैं तो यह अधिक उपयोगी हो जाता है। आउटगोइंग बस सिग्नल (पता और डेटा सहित) और दूसरे आने वाले सिग्नल के लिए एक रिकॉर्ड (या सरणी!) घोषित करें, क्योंकि आप एक ही बंदरगाह में दिशानिर्देशों को मिश्रण नहीं कर सकते ... (इन दिनों एफपीजीए में कोई द्विपक्षीय सिग्नल नहीं हैं, इसलिए तीसरे बंदरगाह की कोई आवश्यकता नहीं है)
अब आपका डिज़ाइन बस संरचना में परिवर्तनों के विरुद्ध संरक्षित है; पता चौड़ाई बदलना या एक इंटरप्ट सिग्नल जोड़ना केवल रिकॉर्ड घोषणा और किसी भी वास्तविक उपयोगकर्ता को बदलता है; पूरे पदानुक्रम में नया सिग्नल जोड़ने की जरूरत नहीं है ...
पहला सुझाव कैसा दिखता है? साथ ही, cntrl_signals को std_logic_vector होने की आवश्यकता है क्योंकि यह इकाई बंदरगाह घोषणा में है और बाहर के लिए दृश्यमान है। – c0m4
+1: 'std_logic_vector (और सामान्य रूप से वीएचडीएल की प्रकार प्रणाली) का आकस्मिक उपयोग वीएचडीएल को वापस रख रहा है ... ' –
वाह, अच्छी जानकारी! धन्यवाद! – c0m4