2012-12-19 11 views
10

क्या यह VHDL में किसी प्रक्रिया के लिए दो या अधिक अनुक्रमिक रन संभव है?वीएचडीएल पुनर्वित्त में प्रक्रिया है?

क्या होगा यदि कोई अन्य घटना होती है (संवेदनशीलता सिग्नल सूची पर) जबकि प्रक्रिया के अनुक्रमिक निष्पादन को पूरा नहीं किया जाता है?

क्या यह संभव है या प्रक्रिया के लिए मेरे VHDL मॉडल को पूरी तरह से गलत है?

+0

आप अपने प्रश्न को स्पष्ट करना चाहते हैं – briantyler

+0

क्या आप स्थिति के कुछ उदाहरण कोड के साथ स्पष्टीकरण दे सकते हैं? मुझे विश्वास है कि मैं जानता हूं कि आप क्या पूछ रहे हैं, लेकिन बिना किसी ठोस समस्या के जवाब देना मुश्किल है। –

उत्तर

39

प्रक्रिया चल रही है, जबकि कोई घटना कभी नहीं होगी!

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

इस प्रक्रिया के दौरान, सभी संकेतों के पास मूल रूप से वह मूल्य होता है जब प्रक्रिया जागृत होती है, और किसी भी सिग्नल असाइनमेंट को बाद में होने के लिए संग्रहीत किया जाता है। (चर अद्यतन तुरंत; प्रक्रिया में बाद में बयान नए मान देखें)।

जब प्रक्रिया निलंबित ("प्रतीक्षा" या "अंत प्रक्रिया" पर), तब तक कुछ भी नहीं होता जब तक कि अन्य सभी प्रक्रियाएं भी निलंबित न हों। (लेकिन याद रखें कि वे सभी शून्य समय लेते हैं!)। यदि कोई प्रक्रिया "अंत प्रक्रिया" पर निलंबित होती है तो यह शुरुआत से फिर से शुरू हो जाएगी जब इसकी संवेदनशीलता सूची इसे जगाती है। यदि यह एक स्पष्ट "प्रतीक्षा" पर निलंबित करता है, तो "प्रतीक्षा" एक घटना या भविष्य का समय निर्दिष्ट करेगा, जो "प्रतीक्षा करें" के बाद इसे पुनरारंभ करेगा। (नोट्स: 1: संवेदनशीलता सूची को मिश्रित न करें और उसी प्रक्रिया में शैलियों की प्रतीक्षा करें! 2: प्रतीक्षा करें जब तक कि कुछ घटना संश्लेषित नहीं हो जाती है (हालांकि कुछ उपकरण ऑब्जेक्ट कर सकते हैं); कुछ समय के लिए प्रतीक्षा करें केवल सिमुलेशन है)

फिर सभी सिग्नल असाइनमेंट किया जाता है। चूंकि सभी प्रक्रियाएं सो रही हैं, यह सभी दौड़ की स्थिति और समय के खतरों को समाप्त करती है। इनमें से कुछ असाइनमेंट (जैसे घड़ी के लिए '1') घटनाओं को उनके लिए संवेदनशील प्रक्रियाओं पर निर्धारित करने का कारण बनेंगे।

सभी सिग्नल असाइनमेंट किए जाने के बाद, समय एक असीमित लघु टिक (जिसे डेल्टा चक्र कहा जाता है) आगे बढ़ाता है, और फिर अनुसूचित घटनाओं के साथ सभी प्रक्रियाएं जागृत होती हैं।

यह तब तक जारी रहता है जब तक कोई डेल्टा चक्र नहीं होता है जिसमें कोई भी नई घटना निर्धारित नहीं होती है, और अंत में सिमुलेशन वास्तविक समय के चरण से आगे बढ़ सकता है।

इस प्रकार

process(clk) 
begin 
if rising_edge(clk) then 
    A <= B; 
    B <= A; 
end if; 
end process; 

खतरा मुक्त VHDL में है।

यदि आपको कभी भी वेरिलोग का उपयोग करने की आवश्यकता है, तो ध्यान रखें कि इनमें से कुछ अलग-अलग होते हैं, और आप अनुकरण परिणामों में पूर्वानुमान के समान स्तर पर भरोसा नहीं कर सकते हैं।


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

तो जब तक टूल सफलता की रिपोर्ट करता है (और आप घड़ी की गति जैसे समय की बाधाओं को सही ढंग से सेट कर रहे हैं) तो आप उपरोक्त "शून्य समय" मॉडल का नाटक कर सकते हैं, और वास्तविक हार्डवेयर व्यवहार से मेल खाता है, सिमुलेशन। उपकरण कीड़े को छोड़कर गारंटीकृत!

+4

यह उत्तर वास्तव में प्रत्येक वीएचडीएल ट्यूटोरियल में क्यों नहीं है? मैं कुछ समय से वीएचडीएल के साथ सामान कर रहा हूं और आपने अभी भी मेरे लिए कुछ मूलभूत बातें स्पष्ट की हैं! –

+0

प्रशंसा के लिए धन्यवाद! –

+0

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

5

वीएचडीएल (या उस मामले के लिए कोई अन्य एचडीएल) का उपयोग शुरू करते समय, अनुक्रमिक कोड के सभी विचारों को त्यागना और हार्डवेयर के माध्यम से डेटा के प्रवाह पर ध्यान देना बेहद महत्वपूर्ण है। हार्डवेयर में, सबकुछ मूल रूप से समानांतर होता है (सबकुछ एक साथ होता है), लेकिन लगातार बदलते परिणामों (आउटपुट सिग्नल) की गणना करने के लिए लगातार बदलते डेटा (इनपुट सिग्नल) का उपयोग करता है!

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

यह इस तरह से काम करता है कि मान सिग्नल को सौंपा गया है। सिग्नल को मान निर्दिष्ट करते समय, सिग्नल का मूल्य तुरंत बदल नहीं जाता है! इसके बजाए, असाइन किए गए मान को याद किया जाता है और बाद में वास्तविक सिग्नल वैल्यू के रूप में किया जाएगा (अगले डेल्टा चक्र की तैयारी में, जो प्रभावी रूप से अगली मात्रा में प्रभावी होता है)।

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

यदि कोई प्रक्रिया सिग्नल के प्रति संवेदनशील होती है तो यह भी लिखती है, आपके पास एक संयोजक लूप के रूप में जाना जाता है, उदाहरण के लिए, एक गेट जहां आउटपुट इनपुट को खिलाता है। यह आपके सर्किट में हमेशा (लगभग) त्रुटि है, और आम तौर पर सिमुलेटर को अनंत डेल्टा-चक्र लूप में प्रवेश करने का कारण बनता है।

सब मैं अब के लिए लिखेंगे है यही कारण है, के रूप में ब्रायन ड्रमंड के जवाब अभी पॉप रूप में मैं इस लिख रहा था, लेकिन एक टिप्पणी छोड़ने के लिए स्वतंत्र लग रहा है और मैं कुछ और जानकारी जोड़ देंगे। एक बार एक प्रक्रिया (एक घटना की वजह से) प्रदर्शन शुरू होने के http://www.sigasi.com/content/vhdls-crown-jewel

3

आप इस ब्लॉग पोस्ट पढ़ना चाहिए।

2

, यह पूरा करने चलाने वाले किसी भी अन्य घटनाओं कुछ और गति प्रदान करने के लिए अनुमति दी जाती से पहले:

+0

कि पूरे 'entity' में या सिर्फ' process' भीतर else_ _anything है? – atomh33ls

+1

बस प्रक्रिया।प्रक्रिया समाप्त हो जाने के बाद, आपके पास यह जानने का कोई तरीका नहीं है कि एक ही डेल्टा चक्र चलाने के लिए तैयार कौन सी प्रक्रिया अगले निर्धारित की जाएगी। यह एक ही इकाई से हो सकता है, ऐसा नहीं हो सकता है। और (जब तक आप साझा चर का उपयोग नहीं कर रहे हैं) इससे कोई फर्क नहीं पड़ता –

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