FPGA फर्मवेयर डिजाइन: कितना बड़ा है बड़ा?


13

मेरे पास विशेष रूप से बड़े सिग्नल प्रोसेसिंग ट्रांसफ़ॉर्म हैं जिन्हें मैटलैब से वीएचडीएल में पोर्ट करने की आवश्यकता है। इसके लिए निश्चित रूप से किसी प्रकार के संसाधन साझाकरण की आवश्यकता होती है। थोड़ी गणना ने मुझे निम्नलिखित दिया:

  • 64-अंक के 512 एफएफटी
  • 41210 गुणा-जोड़ आपरेशन

सबसे बड़े वीरटेक्स 6 एफपीजीए को ध्यान में रखते हुए ~ 2000 डीएसपी 48 ई ब्लॉक है, मुझे पता है कि मैं संसाधनों को कई बार फिर से उपयोग करने के लिए संसाधन साझा कर सकता हूं। निष्पादन समय वास्तव में कोई समस्या नहीं है, प्रसंस्करण समय FPGA के संदर्भ में अपेक्षाकृत लंबा हो सकता है।

संसाधन उपयोग को देखते हुए, मूलांक -2 लाइट आर्किटेक्चर के उपयोग से मुझे 4dsp ब्लॉक / FFT ऑपरेशन = 2048 DSP ब्लॉक, कुल ~ 43k मिलता है। सबसे बड़े Virtex FPGA में 2k ब्लॉक या 20 ऑपरेशन / mux हैं।

जाहिर है कपड़े में इस तरह के बड़े muxes भी स्लाइस लेने के लिए जा रहा है। मुझे इस सीमा का ऊपरी सिरा कहां मिलेगा? मैं FPGA संसाधनों को असीम रूप से साझा नहीं कर सकता। क्या 41210 गुणक बहुत बड़ा है? मैं कैसे गणना करूं कि क्या बहुत बड़ा है?

मैंने अन्य संसाधनों (स्लाइस, ब्रैम आदि) को भी देखा है। मूलांक -2 लाइट 4 x 18k ब्राम्स / fft = 2048 ब्रैम देता है सबसे बड़ा Xilinx FPGA में 2128 एमएमए शामिल हैं। बहुत सीमा रेखा। मुझे चिंता है कि मेरा डिज़ाइन अभी बहुत बड़ा है।


अपडेट करें:

डिज़ाइन के बारे में कुछ और जानकारी। मैं विस्तार में नहीं जा सकता, लेकिन यहाँ मैं क्या दे सकता हूँ:

Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host 

                 ^------re-calculate initial conditions----|

आउटपुट डेटारेट कल्पना: "मैटलैब सिमुलेशन की तुलना में तेज़"

गणना के अनुसार, यह वह जगह है जहां मैं हूं:

एफएफटी चरण: आसान। मैं 1/2/4/8 FFT को लागू कर सकता हूं, एसडीआरएएम में परिणामों को संग्रहीत कर सकता हूं और बाद में पहुंच सकता हूं। अपेक्षाकृत छोटा, भले ही इसमें लंबा समय लगे, यह ठीक है। मूलांक -2 के उपयोग से मुझे 2 DSP48E और 2 18k BRAMS / FFT मिल सकते हैं। स्ट्रीमिंग 6 DSP48Es 0BRAMS / FFT देता है। या तो मामले में, 64 बिंदु FFT FPGA संसाधन शब्दों में छोटा है।

गुणक : यह मेरी समस्या है। गुणन इनपुट को लुकअप टेबल या FFT डेटा से लिया जाता है। यह वास्तव में गुणा-जोड़ का सिर्फ एक पूरा गुच्छा है। अनुकूलन करने के लिए बहुत कुछ नहीं है। एक फिल्टर नहीं है, लेकिन एक फिल्टर के समान विशेषताएं हैं।

FPGA पर संसाधन साझाकरण को ध्यान में रखते हुए, गणित निम्नानुसार काम करता है: एक LUT-6 का उपयोग 4-वेक्स के रूप में किया जा सकता है। N-way, M bit mux का सूत्र इस प्रकार है:

N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).

मेरे कार्यान्वयन के लिए संख्याओं को क्रंच करने से अच्छे परिणाम नहीं मिलते हैं। गुणक -6 परिवार के 90% के पास 40k ऑपरेशन करने के लिए संसाधन DSP को साझा करने के लिए पर्याप्त स्लाइस नहीं है।


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

1
यह आपके प्रश्न का हिस्सा नहीं है, लेकिन आपकी संसाधन गणना में आपने यह नहीं बताया है कि किस आकार का ऑपरेंड। 512 एफएफटी x 64 अंक x कितने बिट्स? एक FPGA में ऑपरेंड का आकार पूरी तरह से आप पर निर्भर करता है, इसलिए आपको अपनी समस्या के आकार पर काम करते समय इस पर विचार करना होगा।
फोटॉन

मुझे नहीं पता कि आपको एहसास हुआ है, लेकिन उन बड़े FPGAs काफी महंगे हैं। कुछ $ 5k से ऊपर हो सकते हैं। शायद आपको उस पर भी विचार करना चाहिए, जब तक कि लागत कोई समस्या न हो।
गुस्तावो लिटोव्स्की 17

1
दुर्भाग्य से, अब तक के उत्तरों में आपको मिले वैकल्पिक समाधान सुझावों से परे, मुझे संदेह है कि क्या हम आपके लिए और भी बहुत कुछ कर सकते हैं। मेरा मतलब है, आप सिर्फ एक एफएफटी कोर बना सकते हैं और एक के बाद एक इसके माध्यम से अपने 512 आदानों को चला सकते हैं, और जाहिर है कि यह भी काफी छोटे एफपीजीए में फिट होगा। उसके बीच कहीं और समानांतर में सब कुछ करना आपके आवेदन के लिए गति बनाम संसाधनों का सही संतुलन है ... लेकिन यह किसी के लिए भी कठिन है लेकिन आप यह कहना चाहते हैं कि संतुलन कहां होना चाहिए।
फोटॉन

1
क्या आपके पास इसके लिए बजट संख्या है? जैसे गुस्तावो ने बताया, उच्च अंत एफपीजीए महंगे हैं, जैसा कि उन पर बैठने के लिए एक पीसीबी विकसित कर रहा है। जबकि सिर्फ हार्डवेयर को दोगुना (या चौगुना या ...) कंप्यूट हार्डवेयर की मात्रा और मौजूदा, सिद्ध (?) का उपयोग करने के लिए जारी रहता है, मैटलैब कोड शायद दिए गए गति कल्पना को पूरा कर सकता है।
फोटॉन

जवाबों:


8

मुझे आश्चर्य है कि क्या समस्या को देखने का एक और तरीका है?

512 एफएफटी ऑपरेशंस (64 पॉइंट प्रत्येक) और 42k मैक ऑपरेशंस के अपने अनुमान को निभाते हुए ... मुझे लगता है कि आपको एल्गोरिथ्म के माध्यम से एक पास के लिए क्या चाहिए?

अब आपको 4 डीएसपी इकाइयों का उपयोग करके एक एफएफटी कोर मिला है ... लेकिन एफएफटी के अनुसार यह कितने घड़ी चक्र लेता है? (थ्रूपुट, विलंबता नहीं)? मान लीजिए कि 64, या 1 चक्र प्रति बिंदु है। फिर आपको उन 42k मैक ऑपरेशन को 64 चक्रों में पूरा करना होगा - शायद 1k मैक प्रति चक्र, प्रत्येक मैक संचालन के साथ 42 संचालन।

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

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

एप्लिकेशन को जाने बिना मैं अधिक विवरण नहीं दे सकता हूं, लेकिन इस तरह के कुछ विश्लेषणों से कुछ बड़े सरलीकरण संभव हो सकते हैं।

इसके अलावा - चूंकि ऐसा लगता है जैसे आपके पास कोई निश्चित प्लेटफ़ॉर्म नहीं है - विचार करें कि क्या आप कई FPGAs में विभाजन कर सकते हैं ... इस बोर्ड पर नज़र डालें या यह जो एक सुविधाजनक मंच में कई FPGAs प्रदान करता है। उनके पास 100 स्पार्टन -3 उपकरणों के साथ एक बोर्ड भी है ...

(पी एस मैं निराश था जब सॉफ्टवेयर वालों ने इस अन्य प्रश्न को बंद कर दिया - मुझे लगता है कि यह कम से कम वहां उपयुक्त है)

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

एक ही एफएफटी इकाई के माध्यम से अलग-अलग एफएफटी संचालन को अनुक्रमित करना एफएफटी आउटपुट को इस गुणक के अतीत में स्वचालित रूप से अनुक्रमित करेगा। अन्य MPY इनपुट में सही गुणांक प्राप्त करना अब सही समय पर सही ROM पते को व्यवस्थित करने का एक मामला है: MUXes के विशाल सिरदर्द के बजाय एक संगठनात्मक समस्या।

प्रदर्शन पर: मुझे लगता है कि डेव ट्वीड अनावश्यक रूप से निराशावादी हो रहा था - एफएफटी एन * लॉग (एन) संचालन ले रहा है, लेकिन आपको ओ (एन) तितली इकाइयों और ओ (लॉगएन) चक्रों, या ओ (लॉगएनएन) इकाइयों और ओ ( n) अपने संसाधन और गति लक्ष्यों के अनुरूप चक्र, या कुछ अन्य संयोजन। ऐसा ही एक संयोजन दूसरों की तुलना में पोस्ट-एफएफटी संरचना को बहुत सरल बना सकता है ...


एकल हार्डवेयर बटरफ्लाई के साथ कार्यान्वित एक FFT को पूरा करने के लिए NlogN घड़ी चक्र की आवश्यकता होती है; 512 अंक के लिए, यह 256 * 8 तितलियों, या 2048 घड़ियों होगा। इसका मतलब है कि 41210 (या 32768?) एमएसीएस को केवल 8-10 हार्डवेयर गुणक की आवश्यकता होगी ताकि एक ही समय में किया जा सके।
डेव ट्वीड

मेरा मतलब है, 16-20 गुणक।
डेव ट्वीड

क्षमा करें, मुझे एहसास हुआ कि मुझे वह पीछे की ओर मिला है। इंडिविजुअल एफएफटी 64 अंक हैं, इसलिए एकल-तितली कार्यान्वयन के लिए 32 * 5 = 160 घड़ियों की आवश्यकता होगी। एमएसीएस तब 200-250 हार्डवेयर मल्टीप्लायरों के साथ किया जा सकता है।
डेव ट्वीड

यह वही है जो मुझे रोकता है। Xilinx एक कोर को 16k / 32k ffts करने में सक्षम कैसे बना सकता है जिसके लिए 400k मल्टीप्ले-ऐड ऑपरेशंस (NlogN) की आवश्यकता होती है और फिर भी मैं अपने 41k के साथ संघर्ष कर रहा हूं? वहां कोई रास्ता अवश्य होना चाहिए!
stanri

@ क्या: मेरा मानना ​​है कि आपका मतलब 160 गुणा है, 160 चक्र नहीं? एफएफटी में कुछ भी इतना स्वाभाविक रूप से क्रमबद्ध नहीं है ...
ब्रायन ड्रमंड बाद

2

यदि इस समस्या में कठिन रीयल-टाइम बाधाएँ नहीं हैं, और ऐसा लगता है कि ऐसा नहीं है - आप बस इसे "तेज" चलाना चाहते हैं, तो ऐसा लगता है कि यह एक या एक से अधिक GPU पर त्वरण के लिए काफी उत्तरदायी हो सकता है। कई सॉफ्टवेयर लाइब्रेरी हैं जो इसे एक अपेक्षाकृत सरल प्रस्ताव बनाती हैं, और यह कस्टम FPGA हार्डवेयर पर सीधे जाने से आसान परिमाण के एक आदेश के बारे में होगा।

आरंभ करने के लिए बस "जीपीयू-सक्षम पुस्तकालय" या "जीपीयू-त्वरित पुस्तकालय" के लिए Google।


दिलचस्प रूप से पर्याप्त है, जब मैंने इस परियोजना के बारे में सुना, तो मैंने ग्राहक को जीपीयू का उल्लेख किया और उसकी कोई दिलचस्पी नहीं थी।
stanri

@StaceyAnneRieck: क्या उन्होंने ऐसा क्यों कहा?
डेव ट्वीड

वह वास्तव में यह नहीं कहता था कि, FPGA का उपयोग करने से पहले उसने सिर्फ इस पर ध्यान दिया था कि वह कम काम की तरह लग रहा था। मैं इसे फिर से लाने जा रहा हूं।
stanri

@stanri: यहां तक ​​कि अगर आप अंततः एक FPGA कार्यान्वयन को समाप्त करते हैं, तो मुझे लगता है कि GPU समग्र सिस्टम आर्किटेक्चर को "ब्रेडबोर्ड" करने का एक अच्छा तरीका हो सकता है। क्या आपके पास (और क्या आप साझा कर सकते हैं?) एल्गोरिथ्म के लिए किसी प्रकार का उच्च-स्तरीय डेटाफ्लो ग्राफ है, और क्या आप हमें इसमें शामिल डेटा की मात्रा का अंदाजा दे सकते हैं? इस तरह के सवालों के जवाब के बिना, आपको वास्तव में बहुत ही सामान्य सलाह के अलावा कुछ भी देना मुश्किल है।
डेव ट्वीड

यह वास्तव में एक बहुत ही सरल एल्गोरिथ्म है, यह सिर्फ पैमाना है जो इसे इतना जटिल बनाता है। मूल रूप से निम्नानुसार है: प्रारंभिक शर्तें -> समानांतर में 512 ffts -> 32768 एफएफटी आउटपुट पर बहुक्रिया संचालन -> प्रारंभिक स्थितियों को समायोजित करें -> कुल्ला और दोहराएं
स्टेनरी

1

कुछ विशेष प्रकार के गणित कार्यों में तेजी लाने के लिए एक विशेष हार्डवेयर या एक FPGA (या यहां तक ​​कि CPLD) का उपयोग करना संभव है। गणित के संचालन में तेजी लाने के लिए हार्डवेयर (सर्किटरी या FPGA लॉजिक) को डिजाइन करने की कोशिश करते समय ध्यान में रखने वाली महत्वपूर्ण बात यह है कि आपके डिवाइस में किस ऑर्डर डेटा को जाने की जरूरत है। एक कुशल I / O लेआउट वाला डिवाइस एक अक्षम लेआउट के साथ एक से अधिक बेहतर प्रदर्शन की पेशकश कर सकता है, भले ही बाद वाले डिवाइस को बहुत अधिक सर्किटरी की आवश्यकता हो।

मैंने FFT के लिए हार्डवेयर-सहायता डिज़ाइन तैयार करने का प्रयास नहीं किया है, लेकिन जो मैंने देखा है वह बड़े गुणा संचालन के लिए हार्डवेयर सहायता है (जैसा कि RSA एन्क्रिप्शन के लिए उपयोग किया जा सकता है)। कई माइक्रोकंट्रोलर, यहां तक ​​कि विशेष फास्ट-गुणा हार्डवेयर वाले, ऐसे ऑपरेशनों में बहुत कुशल नहीं हैं, क्योंकि उन्हें बहुत सारे रजिस्टर फेरबदल की आवश्यकता होती है। हार्डवेयर जो रजिस्टर स्वैपिंग को कम से कम करने के लिए डिज़ाइन किया गया था, बहु-परिशुद्धता गुणन कार्यों के साथ बहुत बेहतर प्रदर्शन प्राप्त कर सकता था, भले ही हार्डवेयर स्वयं उतना परिष्कृत न हो। उदाहरण के लिए, हार्डवेयर जो एक समय में एक पाइपलाइज्ड 16xN गुणन दो बिट्स कर सकता है (मल्टीप्लेक्स के दो निचले बिट्स में स्थानांतरण, और परिणाम के दो ऊपरी बिट्स को शिफ्ट करना) हार्डवेयर की तुलना में बेहतर प्रदर्शन प्राप्त कर सकता है जो एक चक्र में 8 गुणा 8 गुणा प्रदर्शन कर सकता है। भले ही पूर्व कम सर्किटरी ले सकता है (और, पाइपलाइनिंग के आधार पर, एक छोटा महत्वपूर्ण डेटा पथ है)। कुंजी यह पता लगाना है कि आवश्यक कोड के "इनर लूप" क्या दिखेंगे, और यह पता करें कि क्या कोई अक्षमता है जिसे आसानी से समाप्त किया जा सकता है।


इस प्रकार के अनुकूलन के लिए किस प्रकार के संचालन विशेष रूप से अनुकूल हैं? मैंने ऊपर दिए गए प्रश्न को एक से अधिक विस्तार से संपादित किया है जो कि बहुगुणित संचालन की प्रकृति के बारे में है। हार्डवेयर-सहायता डिजाइन वास्तव में दिलचस्प लगता है!
श्लोक

0

किसी मुद्दे पर अमल करने में हमें कितना समय लगता है?

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

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


1
एक FPGA पर एक नरम कोर सीपीयू में भारी गणना करना मूर्खतापूर्ण है; यदि आप एक संगृहीत प्रोग्राम आर्किटेक्चर में गणना करने जा रहे हैं (कुछ ऐसा जिसे माना जाना चाहिए), इसके कारण उच्च प्रदर्शन / डॉलर हार्ड सीपीयू (एस) पर जहां आप तुलनात्मक फैब पर लचीले तर्क की गति का जुर्माना नहीं देते हैं- पीढ़ी कठिन तर्क।
क्रिस स्ट्रैटन

@ क्रिसह्राटन - अच्छा बिंदु। उस प्रभाव के लिए एक अतिरिक्त नोट जोड़ा गया।
कॉनर वुल्फ

1
यहां तक ​​कि बिल्ट-इन हार्ड-सीपीयू भी सॉफ्टवेयर-आधारित कार्यों के लिए कमोडिटी पारंपरिक प्रोसेसर / जीपीयू के लिए एक मोमबत्ती को रखने नहीं जा रहे हैं, और बहुत अधिक खर्च होंगे।
क्रिस स्ट्रैटन

@ChrisStratton - मुझे लगा कि सबसे आम एकीकृत हार्ड-सीपीयू आर्किटेक्चर एआरएम या पावर था? उस मामले में, यह मूल रूप से एक वस्तु सीपीयू है।
कॉनर वुल्फ

1
आपके अन्य FPGA प्रश्न को देखते हुए, FPGA बोर्ड का निर्माण एक सीखने का अनुभव होने की संभावना है जो अनुमानित से काफी अधिक खर्च होगा। मुझे लगता है कि इस बिंदु पर करने की बात यह होगी कि ग्राहक को ट्रायल कंप्यूट क्लाउड रन (जो अंततः खरीदे गए हार्डवेयर बन सकते हैं) से कुछ कठिन मूल्य / प्रदर्शन संख्या देनी होगी, बनाम उच्च कीमत के कुछ विचार और FPGA प्रयास का बहुत अधिक जोखिम। ।
क्रिस स्ट्रैटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.