VHDL: संश्लेषण के लिए पूर्णांक?


17

अगर मैं संश्लेषण संकेतों और बंदरगाहों, आदि के लिए VHDL में पूर्णांक का उपयोग कर रहा हूं, तो मैं थोड़ा उलझन में हूं।

मैं शीर्ष स्तर के बंदरगाहों पर std_logic का उपयोग करता हूं, लेकिन आंतरिक रूप से मैं पूरे स्थान पर राउंडेड पूर्णांक का उपयोग कर रहा था । हालाँकि, मैंने कुछ संदर्भों में लोगों को यह कहते हुए ठोकर दी है कि आपको केवल संश्लेषण-लक्षित कोड के लिए हस्ताक्षरित / अहस्ताक्षरित का उपयोग करना चाहिए।

मैं गया और अहस्ताक्षरित का उपयोग करने के लिए अपनी वर्तमान परियोजना को फिर से तैयार किया ... और, ठीक है, यह बिल्कुल बदसूरत है।

क्या पूर्णांक का उपयोग करना एक बुरा अभ्यास है? समस्या क्या है? क्या कोई अनिश्चितता है कि उपकरण किस चौड़ाई में पूर्णांक को मैप करेगा?


अच्छा प्रश्न। मैं सोच रहा था कि खुद को। मैंने पूर्णांक, सकारात्मक और अन्य प्रकारों का उपयोग करना शुरू कर दिया, लेकिन यह ठीक से संश्लेषित होने के लिए बहुत बालों वाला निकला। मैं उम्मीद कर रहा हूं कि कोई व्यक्ति यह समझा सकता है कि हर कोई उच्च टाइप की भाषा में std_logic का उपयोग क्यों करता है।
ट्राईवेग लॉगस्टोएल

1
हाँ। क्या वह पागल नहीं है? वर्तमान अभ्यास में टाइप किया गया DATA_I का बहुत परिणाम देता है <= TO_UNSIGNED (32010, DATA_I'LENGTH); सामान टाइप करें ... जो किसी को परेशान न करे? :) यह ज़रूर लगता है कि बहुत सारा अनावश्यक सामान है। (विशेष रूप से उस समय STD_LOGIC_VECTOR () को जोड़ते हुए ) मैंने अपना प्रकार और आकार घोषित कर दिया है, यह DATA_I <= 32010 होना चाहिए ; जिसका निहितार्थ होना चाहिए। हस्ताक्षर किए गए / अहस्ताक्षरित, आदि के बीच जा सकते हैं और स्पष्ट होना चाहिए ... लेकिन पूर्णांक पर एक सीधा काम या संचालन निहित होना चाहिए।
डार्रोन

जवाबों:


15

इंटेर्जेस संश्लेषण में ठीक हैं, मैं हर समय उनका उपयोग करता हूं।

मैं शीर्ष स्तर के बंदरगाहों पर std_logic का उपयोग करता हूं, लेकिन आंतरिक रूप से मैं पूरे स्थान पर राउंडेड पूर्णांकों का उपयोग कर रहा था

कोई बात नहीं!

जागरूक रहें:

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

चढ़ाई पर:

  • वे अहस्ताक्षरित / हस्ताक्षरित वैक्टर की तुलना में अनुकरण करने के लिए बहुत तेज़ हैं
  • वे स्वचालित रूप से सिमुलेशन में रोल-ओवर नहीं करते हैं (हाँ, यह दोनों सूचियों में है :)। यह आसान है - उदाहरण के लिए आपको जल्दी चेतावनी मिलती है कि आपका काउंटर बहुत छोटा है।

जब आप वेक्टर प्रकारों का उपयोग करते हैं, तो आप उपयोग कर रहे हैं ieee.numeric_std, नहींieee.std_logic_arith तुम नहीं कर रहे हैं?

मैं integerएस का उपयोग करता हूं जहां मैं कर सकता हूं, लेकिन अगर मैं स्पष्ट रूप से "रोल-ओवर एन-बिट काउंटरर्स" चाहता हूं, तो मैं उपयोग करना चाहता हूं unsigned


हां, मैं num_std का उपयोग करता हूं। मुझे लगता है कि मैं ज्यादातर Xilinx टूल्स के बारे में चिंतित हूं ... वे अभी भी सब कुछ के लिए std_logic_vector उत्पन्न करते हैं और "UNSIGNED" सिंटैक्स हाइलाइटिंग में भी नहीं है।
डे्रॉन

1
@darron सिंटैक्स हाइलाइटिंग के बारे में चिंता न करें। संपादक और इसके सिंटैक्स हाइलाइटर संश्लेषण उपकरण से सॉफ्टवेयर का एक बिल्कुल अलग टुकड़ा है। इसके अलावा, अहस्ताक्षरित "सिर्फ" एक डेटाटाइप है। यह एक मानक पुस्तकालय का हिस्सा है, भाषा का नहीं।
फिलिप

इसके बजाय निचला बाउंड -2 ^ 32 + 1 नहीं है? यदि यह -2 ^ 31 था - 1 तो आपको केवल एक ही संख्या का प्रतिनिधित्व करने के लिए केवल एक बिट की आवश्यकता होगी - बहुत अजीब।
ब्रेगलाद

@ ब्रेग्लाद - अच्छी पकड़ - यह काफी समय से गलत है!
मार्टिन थॉम्पसन

अगर आप माइनस साइन रखना पसंद करते हैं तो @MartinThompson या शायद आप इसे इस तरह लिख सकते हैं - (2 ^ 32-1)।
ब्रेगलाद

7

Jan Decaluwe ने पूर्णांक बनाम बिट वैक्टर की समस्याओं पर एक संपूर्ण श्वेत पत्र लिखा। मुझे उम्मीद है कि जब भी संभव हो, पूर्णांक का उपयोग करने के लिए उनके उत्तर होंगे । http://www.jandecaluwe.com/hdldesign/counting.html


6

वहाँ RTL के लिए पूर्णांकों का उपयोग कर के बारे में कुछ भी नहीं गलत है दर असल , लेकिन वहाँ कारण हैं कुछ से बचने के लिए यह है कि। यह वास्तव में व्यक्तिपरक "सर्वोत्तम अभ्यास" के बारे में एक सवाल है और आपको अंततः खुद को पता लगाना होगा कि आप क्या पसंद करते हैं। उस की मदद के रूप में, मैं इस पर अपने अनुभव और विचार साझा करूंगा।

मुख्य रूप से , मैं (विवश) पूर्णांक का उपयोग करने के पक्ष में हूं, जब संश्लेषण के लिए भी लिख रहा हूं। मैं कभी-कभी ऐसा करता हूं, लेकिन व्यवहार में , आमतौर पर मैं signedऔर से चिपकता हूं unsigned। मैं क्यों पर विस्तार से बताऊंगा।

आप वैसे भी अपने डिजाइन के हिस्से में एक सदिश डेटाटाइप्स का उपयोग करने के लिए मजबूर होंगे:

  • शायद ही कोई विक्रेता-आईपी या 3 पार्टी-आईपी integerबंदरगाहों के लिए प्रकार का उपयोग करेगा

  • उदाहरण के लिए, ब्लॉकरैम के माध्यम से डेटा भेजते समय, भले ही आप इसका अनुमान लगाते हों और इसलिए कभी भी किसी भी आईपी / मैक्रो / आदिम को इंटरफ़ेस करने की आवश्यकता नहीं होती है, आपको सबसे अधिक वैसे भी सदिश प्रकार में बदलने की आवश्यकता होगी।

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

चूंकि आप integerपूर्ण डिजाइन के लिए उपयोग नहीं कर सकते हैं , आप इसे सभी को एक साथ छोड़ना चाह सकते हैं, क्योंकि:

  • कुछ बिंदुओं पर, आपको वैसे भी रूपांतरण करने की आवश्यकता होगी, और यह integerपहली जगह में उपयोग करने के बिंदु से दूर ले जाता है

  • इसके अलावा, सिमुलेशन के लिए, इन रूपांतरणों को आम तौर पर 'U'या 'X'तो रीसेट करने से पहले या अन्य समयों के वैक्टर के साथ बुलाया जाएगा , और इस तरह के हर एक फ़ंक्शन कॉल पैकेज फ़ंक्शन से चेतावनी संदेश उत्पन्न करेगा, जो आपके सिमुलेशन चेतावनी / संकेत को अव्यवस्थित करेगा।

उपयोग की कमियांinteger :

  • वेक्टरकृत प्रकारों के विपरीत, पूर्णांक नहीं होते हैं 'U'और 'X'; मुझे वे सिमुलेशन में बहुत मददगार लगते हैं। आप देखते हैं कि डिजाइन के माध्यम से कैसे अनइंस्टाल्यूट किए गए सिग्नल फैलते हैं, और यदि आप रीसेट के बाद बहुत सारे अनइंस्टाल्यूटेड सिग्नल देखते हैं तो आप शायद प्रतिक्रिया देंगे। पूर्णांक का उपयोग करते समय यह मामला नहीं होगा।

  • पूर्णांक के साथ, जोड़-तोड़ / मिलान के दौरान गलत तरीके से अनुकरण / संश्लेषण गलत मिलान का अधिक जोखिम होता है, जिसके परिणामस्वरूप अंडर-ओवरफ्लो होता है। (जैसा कि पहले ही किसी और ने बताया है।)

विशिष्ट मामले जहां मुझे integerवास्तव में एक अच्छा विकल्प लगता है:

  • डीबग सिग्नल / काउंटर के लिए जिसे आप चिपस्कॉप / सिग्नलटैप आदि के माध्यम से मॉनिटर करते हैं।

  • पूरी तरह से काउंटरों का आंतरिक प्रतिनिधित्व, जो कभी भी आपके स्वयं के कोड में या बाहर नहीं जाते हैं। हां, ऐसे मामले हैं, जैसे यदि आप एक फीफो लिख रहे हैं और आप डेड-रेकिंग कर रहे हैं full, तो सिग्नल बनाने के लिए लिखते हैं / पढ़ते हैं empty, almostFullआदि (हालांकि पॉइंटर्स पर अंकगणित इस मामले में डेड-रेकिंग से बेहतर तरीका है। ..)

मेरे अपने निष्कर्ष: मैं कभी-कभी पूर्णांक का उपयोग करता हूं, लेकिन संयम से, और अधिकतर ऊपर वर्णित मामलों में। मैं पूर्णांक का उपयोग करने के बजाय unsignedऔर अधिक ओवरहेड नहीं देखता signed, और इसलिए, आमतौर पर उनसे चिपक जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.