VHDL: डिज़ाइन में गुणक लागू करते समय '*' ऑपरेटर का उपयोग करना


10

वर्तमान में FPGAs ने DSP ब्लॉकों में बनाया है, नवीनतम FPGAs ने IEEE-754 संगत फ्लोटिंग पॉइंट इकाइयों में भी बनाया है।

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

वास्तविक DSP ब्लॉकों को इंस्टेंट करने के एक डिज़ाइन में हमें इस तरह के micromanagment की आवश्यकता कब होती है और जब हम कोड में एक '*' ऑपरेटर दर्ज करते हैं और संश्लेषण उपकरण को निम्न स्तर के विवरण को संभालने देते हैं? कौनसा अच्छा है?

बाइनरी गुणा करने के लिए कई अलग-अलग प्रकार के गुणन एल्गोरिदम हैं। चूंकि अब हमने सिलिकॉन पर डीएसपी ब्लॉकों में बनाया है और यहां तक ​​कि फ्लोटिंग पॉइंट मल्टीप्लायरों में भी बनाया है, इसका मतलब यह है कि उन सभी एल्गोरिदम प्रभावी रूप से अप्रचलित नहीं हुए हैं।


कपड़े में FPGA के 754-संगत एफपीयू हैं?
मार्टिन थॉम्पसन

जवाबों:


6

मैंने खुद कुछ बार ऐसा किया है।

आमतौर पर, डिज़ाइन उपकरण एक कपड़े के कार्यान्वयन और संश्लेषण सेटिंग्स के आधार पर एक डीएसपी स्लाइस के बीच चयन करेंगे।

उदाहरण के लिए, Xilinx ISE के लिए, संश्लेषण प्रक्रिया सेटिंग्स, एचडीएल ऑप्शंस में, विकल्पों के साथ एक सेटिंग "-use_dsp48" है: ऑटो, ऑटोमैक्स, हां, नहीं। जैसा कि आप कल्पना कर सकते हैं, यह नियंत्रित करता है कि उपकरण कितनी मेहनत करते हैं। डीएसपी स्लाइस करते हैं। मुझे एक बार एक समस्या हुई थी जहाँ मैंने एक पूर्णांक को 3 से गुणा किया था, जो एक डीएसपी स्लाइस का अनुमान लगाता था - सिवाय इसके कि मैं पहले से ही चिप में प्रत्येक डीएसपी स्लाइस को मैन्युअल रूप से संदर्भित कर रहा था, इसलिए सिंथेसिस विफल हो गया! मैंने सेटिंग को No में बदल दिया, क्योंकि मैं पहले से ही प्रत्येक dsp स्लाइस का उपयोग कर रहा था।

यह संभवतः अंगूठे का एक अच्छा नियम है (मैं अभी बना हुआ हूं): यदि आपका डिज़ाइन 50 मेगाहर्ट्ज से कम पर है, और आप संभवतः चिप में 50% से कम डीएसपी स्लाइस का उपयोग करने जा रहे हैं, तो बस उपयोग करें *, +, और - ऑपरेटर। यह डीएसपी स्लाइस को बिना किसी पाइप लाइन रजिस्टर के बांधेगा। यह वास्तव में शीर्ष गति को सीमित करता है। (मुझे नहीं पता कि जब आप विभाजन का उपयोग करते हैं तो क्या होता है)

हालांकि, अगर ऐसा लगता है कि आप स्लाइस को डीएसपी स्लाइस की अधिकतम गति (स्पार्टन 6 सामान्य स्पीड ग्रेड के लिए 333 मेगाहर्ट्ज) के करीब चलाने जा रहे हैं, तो आप सभी स्लाइस का उपयोग करने जा रहे हैं, आपको मैन्युअल रूप से इनका पता लगाना चाहिए ।

इस मामले में, आपके पास दो विकल्प हैं।

विकल्प 1: मैन्युअल रूप से कच्चे DSP तात्कालिकता टेम्पलेट का उपयोग करें। विकल्प 2: Xilinx Core जेनरेटर से IP ब्लॉक का उपयोग करें। (मैं इस विकल्प का उपयोग करूंगा। उसी समय, आप सभी कोर जीन के बारे में जानेंगे, जो भविष्य में मदद करेगा)

इससे पहले कि आप इनमें से कोई भी करें, डीएसपी स्लाइस उपयोगकर्ता गाइड के पृष्ठों के पहले जोड़े को पढ़ें। स्पार्टन 6, (DSP48A1) के मामले में, यह Xilinx doc UG389 होगा: http://www.xilinx.com/support/documentation/user_guides/ug389.pdf

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

कोर जीन में, उन विभिन्न आईपी ब्लॉकों पर एक नज़र डालें जिनसे आप चुन सकते हैं - कुछ दर्जन हैं, जिनमें से अधिकांश बहुत अच्छे हैं।

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

जब मैं पिछले साल 5 क्रम 3 आईआईआर फ़िल्टर बना रहा था, तब से मुझे मैनुअल इंस्टेंटेशन टेम्प्लेट का उपयोग करना पड़ा क्योंकि मैं एक बहुत ही कस्टम कार्यान्वयन का निर्माण कर रहा था, 2 डीएसपी स्लाइस के साथ नमूना दर की तुलना में 4 गुना तेज था। यह कुल दर्द था।


13

यदि आप बस दो संख्याओं को गुणा करना चाहते हैं और वे डीएसपी ब्लॉक के अनुरूप हैं तो *ऑपरेटर को डीएसपी ब्लॉक का पता लगाना चाहिए। यदि नहीं, तो संश्लेषण उपकरण वापस भेजें :)

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

  • पूर्व-योजक का उपयोग
  • पोस्ट संचायक का उपयोग
  • पैटर्न डिटेक्टर का उपयोग
  • तर्क इकाई का उपयोग

और विशेष रूप से उपरोक्त के संयोजन।

संश्लेषण उपकरण अभी तक तर्क और अंकगणित के पूरी तरह से मनमाने ढंग से संयोजन के रूप में कुशलता से मैप करने के लिए पर्याप्त नहीं हैं जितना कि आप उम्मीद कर सकते हैं।


4

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

हालाँकि, मैं GUI टूल में जाने से पहले DSP ब्लॉक्स का संदर्भ लेता हूँ। Xilinx XST मैनुअल में शुद्ध वर्सिलोग / VHDL के साथ DSP ब्लॉक को तुरंत कैसे प्राप्त करने के लिए HDL 'प्राप्तियां' हैं। मूल रूप से, यदि आप गुणक से पहले और / या बाद में पर्याप्त रजिस्टर जोड़ते हैं, तो XST एक स्वचालित रूप से ऑपरेशन को लागू करने के लिए DSP ब्लॉक का उपयोग करेगा। आप संश्लेषण लॉग में देख सकते हैं कि यह डीएसपी ब्लॉकों को सही ढंग से संदर्भित कर रहा है या नहीं। मुझे लगता है Altera कुछ इसी तरह की है।

संयोग से, मैं कुछ मिनट पहले ही इस बारे में बात कर रहा था क्योंकि मैं वर्तमान में मर्सिएन ट्विस्टर कार्यान्वयन पर काम कर रहा हूं जो केवल शुरुआती बीज के लिए एक गुणक का उपयोग करता है। मेरा पहला पास कार्यान्वयन समय पूरा नहीं करता है, लेकिन कार्यक्षमता सही है। एक्सएसटी ने भी डीएसपी ब्लॉकों में बहुक्रियाशील संचालन को रखा, हालांकि इसे अनुकूलित नहीं किया गया है, इसलिए यह लगभग उतना ही तेज चलता है जितना मैं चाहूंगा। मुझे संभवतः एक शिफ्ट-एंड-ऐड तकनीक का उपयोग करके गुणा किया जाएगा जो कि घड़ी के चक्रों की संख्या 32x लेगा, लेकिन अब हार्डवेयर गुणक की आवश्यकता नहीं होगी।


हार्डवेयर गुणक का उपयोग करते समय यह समय क्यों विफल होना चाहिए?
क्वांटम 231

32 बिट द्वारा 32 बिट गैर-पाइपलाइज्ड गुणा 8 एनएस से अधिक लेता है, जाहिरा तौर पर।
alex.forencich

हम्म मैं देख रहा हूँ, उस पर विचार नहीं किया। इसलिए डीएसपी ब्लॉक को पाइपलाइन नहीं किया गया है। मुझे आश्चर्य है कि वास्तव में वे गुणन को कैसे लागू करते हैं। क्या यह एक वास्तविक कठिन समानांतर गुणक है?
क्वांटम 231

मुझे लगता है कि इसे कुछ अलग तरीकों से काम करने के लिए कॉन्फ़िगर किया जा सकता है। एक्सएसटी मैनुअल के अनुसार, इनपुट और आउटपुट पर पर्याप्त रजिस्टर जोड़ने से एक्सएसटी को डीएसपी 48 स्लाइस में पाइपलाइज्ड मल्टीप्लायर का उपयोग करने की अनुमति मिलेगी। मेरे मामले में केवल एक आउटपुट रजिस्टर और कोई इनपुट रजिस्टर नहीं था, इसलिए यह इसका लाभ उठाने में असमर्थ था। चूँकि यह केवल इनिशियलाइज़ेशन के लिए था (PRNG को बोने के लिए), मैंने संसाधन उपयोग पर सहेजने के लिए समानांतर को थोड़ा सा सीरियल मल्टीप्लायर से बदल दिया।
अलेक्स.फोनिच

2

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

मुझे नहीं पता था कि FPGAs में एफपी मल्टीप्लायरों में क्या होता है।

सीपीयू के लिए उपयुक्त एक वास्तविक IEEE P754 अनुरूप गुणन ऑपरेटर में एक बड़े गुणक से अधिक शामिल होता है: आपको घातांक, शिफ्ट डेनर्मल को जोड़ने, इन्फिनिटी का प्रबंधन करने और कुछ बेकार बेकार झंडे (अक्षम, कमज़ोर ...) की आवश्यकता होती है।


नवीनतम पीढ़ी के FPGAs जैसे Altera 10 श्रृंखला में IEEE-754 अनुरूप फ़्लोटिंग पॉइंट मल्टीप्लायर हार्डवेयर पर है! हालांकि मुझे उन्हें स्वयं उपयोग करने का अवसर नहीं मिला।
क्वांटम 231

यदि हमने डीएसपी ब्लॉकों में बनाया है, तो एफपीजीए को कॉम्बिनेटरियल मल्टीप्लायर के बजाय उनका उपयोग करना चाहिए या कुछ अन्य एल्गोरिदम का उपयोग करना चाहिए जैसे कि मेमोरी ब्लॉक का सही उपयोग करता है?
क्वांटम 231

2

मैंने यह दस्तावेज़ http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf पढ़ा :

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

काश, मैं उनके निष्कर्षों की जांच करने के लिए उनके उपकरणों का स्रोत पा सकता।

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