2008-08-29 7 views
15

यदि Verilog में स्वचालित कीवर्ड के साथ कोई कार्य घोषित किया गया है तो इसका क्या अर्थ है?Verilog स्वचालित कार्य

task automatic do_things; 
    input [31:0] number_of_things; 
    reg [31:0] tmp_thing; 
    begin 
    // ... 
    end 
endtask; 

ध्यान दें: यह सवाल ज्यादातर अगर वहाँ साइट पर किसी भी हार्डवेयर प्रोग्रामर रहे हैं, क्योंकि मैं उत्सुक हूँ है। :)

उत्तर

14

इसका मतलब है कि कार्य फिर से प्रवेश करने वाला है - कार्य के भीतर घोषित वस्तुओं को कार्य के विभिन्न आमंत्रणों के बीच साझा करने के बजाय गतिशील रूप से आवंटित किया जाता है।

तुम देखो - हम में से कुछ कर Verilog ... (ओह)

3

"स्वचालित" कीवर्ड भी आप (2001 verilog के बाद से) पुनरावर्ती कार्यों लिखने के लिए अनुमति देता है। मेरा मानना ​​है कि अगर वे नीचे आते हैं तो उन्हें संश्लेषित होना चाहिए, लेकिन मुझे यकीन नहीं है कि उनके पास उपकरण का समर्थन है या नहीं।

मैं भी, verilog करो!

1

जैसा विल और मार्टी कहते हैं, स्वचालित स्वचालित रूप से पुनरावर्ती कार्यों के लिए था।

यदि सामान्य (यानी स्वचालित नहीं) फ़ंक्शन को अलग-अलग मानों के साथ बुलाया जाता है और एक ही समय में सिम्युलेटर द्वारा संसाधित किया जाता है, तो लौटाया मूल्य अनिश्चित है। यह जगह के लिए काफी मुश्किल बग हो सकता है! यह केवल एक सिमुलेशन मुद्दा है, जब तर्क संश्लेषित सही होगा।

फ़ंक्शन को स्वचालित बनाना इसे ठीक करता है।

21

"स्वचालित" वास्तव में "पुनः प्रवेश" का अर्थ है। शब्द स्वयं को सॉफ़्टवेयर भाषाओं से चुराया जाता है - उदाहरण के लिए, सी में "ऑटो" कीवर्ड को वैरिएबल घोषित करने के लिए वैरिएबल के रूप में आवंटित किया जाता है, जब उस दायरे को निष्पादित किया जाता है, और बाद में हटा दिया जाता है, ताकि एक ही दायरे के एकाधिक आमंत्रण उस चर के निरंतर मूल्यों को न देखें। सी में इस कीवर्ड के बारे में आपने जो कारण नहीं सुना है, वह यह है कि यह सभी प्रकार के लिए डिफ़ॉल्ट स्टोरेज क्लास है :-) विकल्प "स्थैतिक" हैं, जिसका अर्थ है "इस चर को स्थिर रूप से आवंटित करें (स्मृति में एक वैश्विक स्थान पर), और इस निष्पादन के दौरान इस स्मृति स्थान को संदर्भित करें, इस पर ध्यान दिए बिना कि फ़ंक्शन कितनी बार लागू किया जाता है ", और" अस्थिर ", जिसका अर्थ है" यह मेरे एसओसी पर कहीं और एक अन्य डिवाइस पर कुछ है जो मेरे पास नहीं है कंट्रोलर पर नियंत्रण करें, कृपया मुझे दूर पढ़ने के लिए अनुकूलन न करें, भले ही आपको लगता है कि आप पिछली पठन से अपना मूल्य जानते हैं, कोड में कोई मध्यवर्ती लिखने के साथ "।

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

कई मामलों में, आपका कोड कार्य या कार्य को "स्वचालित" के रूप में घोषित किए बिना ठीक होगा, लेकिन इसे तब तक रखने का अच्छा अभ्यास है जब तक कि आपको विशेष रूप से अन्यथा होने की आवश्यकता न हो।

संबंधित मुद्दे