2015-07-27 10 views
5

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

एक ठोस उदाहरण के लिए, मान एन = 4 और मैं आदानों {एक, ख, ग, घ} है तो मैं निम्नलिखित करना होगा:

a op b => reg1 
c op d => reg2 
reg1 op reg2 => result 

जब पेड़ में एक मंच से विभाज्य नहीं है 2, मैं एक डमी ऑपरेशन डालता हूं जो एक ही विलंबता के साथ केवल 1 इनपुट एक उपज 1 आउटपुट लेता है।

मेरे पास यह मुद्दा है कि मैं कुछ इनपुट एन 9 {25, 49, 81, 121} से संबंधित हूं। एन, 121 के सबसे बड़े आकार में मेरे एफपीजीए कपड़े में 110% लूट की आवश्यकता होती है जबकि अन्य सभी आकार आसानी से फिट होते हैं। इन बाइनरी परिचालनों का पेड़ मेरे डिजाइन में अब तक का सबसे बड़ा उपभोक्ता है।

मुझे पता है कि मैं अपने बोर्ड पर रहने वाले ओप सर्किटों की संख्या को कम करके और उनके इनपुट को मल्टीप्लेक्स करने से लगभग आधा तक कम कर सकता हूं। दुर्भाग्य से, इसका मतलब केवल हर दूसरे घड़ी चक्र का परिणाम हो रहा है और बैंडविड्थ को रोक रहा है।

क्योंकि पूरे पेड़ को बोर्ड ऑफ़र की तुलना में केवल ~ 10% अधिक संसाधनों की आवश्यकता होती है, बैंडविड्थ में 50% की कमी हिट की बहुत महत्वपूर्ण लगती है। क्या कोई वास्तुकला है जहां मैं बैंडविड्थ में अच्छी तरह से बढ़ी हुई कमी के लिए आकार में अधिक बढ़िया अनाज की कमी का व्यापार कर सकता हूं?

+1

कैसे जटिल अपने द्विआधारी operstion है? क्या आपका पेड़ उदाहरण के लिए डबल गति पर चला सकता है? यदि ऐसा है, तो आप 2x F_input पर संबंधित घड़ी का उपयोग कर सकते हैं, जो बैंडविड्थ में आपके नुकसान को क्षतिपूर्ति करता है। – Paebbels

+0

क्या उत्तर में से एक ने आपकी समस्या का समाधान किया? यदि ऐसा है, तो कृपया उत्तर के रूप में चिह्नित करें। – Paebbels

उत्तर

2

ठीक है, मैंने 9 इनपुट के साथ अपना उदाहरण लिया और 75% बाइनरी ऑपरेटरों के साथ अपनी बाइनरी पेड़ की समस्या को हल करने का प्रयास किया।

मैं a,b,c,d,e,f,g,h,i इनपुट का नाम देता हूं। समय में इनपुट मानों को अलग करने के लिए, मैं एक के बाद एक टिक जोड़ दूंगा।

a' = a at time 1 
a''' = a at time 3 
(ab)' = result of a' and b' 

9 इनपुट के लिए 8 बाइनरी ऑपरेशंस की आवश्यकता होती है। मैं अपनी प्रसंस्करण योजना को 6 ऑपरेटरों तक सीमित करता हूं, इसलिए यह 75% आवश्यक ऑपरेटरों का उपयोग करता है। निम्नलिखित स्कीमा में प्रत्येक पंक्ति एक ऑपरेटर का प्रतिनिधित्व करती है।

time 1  time 2   time 3   time 4    | time 1+4 
a'b'  (abcd)'(efgh)' (ab)''(cd)''  e'''f'''   | a'b' 
c'd'  (abcdefgh)'i' (ef)''(gh)''  g'''h'''   | c'd' 
e'f'  a''b''   (abcd)''(efgh)'' (ab)'''(cd)'''  | e'f' 
g'h'  c''d''   (abcdefgh)''i'' (ef)'''(gh)'''  | g'h' 
(ab)'(cd)' e''f''   a'''b'''   (abcd)'''(efgh)''' | (ab)'(cd)' 
(ef)'(gh)' g''h''   c'''d'''   (abcdefgh)'''i''' | (ef)'(gh)' 

स्कीमा दोहराए जाने के 4 चक्रों के बाद। तो 3 इनपुट सेटों की प्रसंस्करण के लिए 4 चक्र की आवश्यकता होती है:
=> 33% ओवरहेड।

यह स्कीमा को छांटा जा सकता है ताकि हर पंक्ति प्रक्रियाओं केवल 2 अलग आदानों:
=> इनपुट एक 2 से muxed जा सकता है: 1 बहुसंकेतक।

time 1  time 2   time 3   time 4    | time 1+4 
a'b'  a''b''   a'''b'''   (ab)'''(cd)'''  | a'b' 
c'd'  c''d''   c'''d'''   (ef)'''(gh)'''  | c'd' 
e'f'  e''f''   (ab)''(cd)''  e'''f'''   | e'f' 
g'h'  g''h''   (ef)''(gh)''  g'''h'''   | g'h' 
(ab)'(cd)' (abcd)'(efgh)' (abcd)''(efgh)'' (abcd)'''(efgh)''' | (ab)'(cd)' 
(ef)'(gh)' (abcdefgh)'i' (abcdefgh)''i'' (abcdefgh)'''i''' | (ef)'(gh)' 

अगर मैं कोई गलती, इस आपरेशन नेटवर्क होना चाहिए:

schema
(क्लिक करने योग्य)

+0

सामान्य रूप से संसाधनों को संसाधित करने के लिए शेड्यूलिंग समस्या होती है, जहां उपलब्ध संसाधन कम संसाधनों के बाद कम होते हैं। (संसाधन = बाइनरी ऑपरेटर)। – Paebbels

3

आप 3, 4, 5, या 6 इनपुट ऑपरेटर्स का उपयोग पर विचार किया है? वर्तमान अल्टेरा और एक्सिलिनक्स एफपीजीए में एलयूटीएस 6 इनपुट हैं। यदि आपके ऑपरेटर वास्तव में सरल हैं (यानी। AND, OR, XOR) तो आप 6 इनपुट फ़ंक्शन के बजाय केवल 2 इनपुट फ़ंक्शन का उपयोग करके अपने वर्तमान कार्यान्वयन में बहुत सारे LUT को बर्बाद कर सकते हैं (मानते हैं कि आप पाइपलाइन के प्रत्येक चरण को पंजीकृत करते हैं)। यह आपके बाइनरी पेड़ को संचालन के के-आरी पेड़ में बदल देगा। अपने नंबरों के साथ एन

की पसंद के आधार पर कई LUTs बर्बाद होगा यहाँ कश्मीर के विकल्प है, जो निरर्थक होता हैं:

N | K | LUTs/bit | LUTs | LUTs/bit @k=2 | LUTs @k=2 
-----|---|----------|------|---------------|----------- 
9 | 3 |  4 | 128 |  11  | 352 
25 | 5 |  6 | 192 |  25  | 800 
49 | 5 | 13 | 416 |  50  | 1600 
81 | 6 | 18 | 576 |  75  | 2400 
121 | 6 | 26 | 832 |  123  | 3936 
+0

मुझे लगता है कि ओपी सरल द्विआधारी संचालन का उपयोग नहीं करता है जैसे ए: ए) 120 32-बिट और-गेट्स किसी भी एफपीजीए को भरते नहीं हैं b) संश्लेषण एलयूटी को तब तक जोड़ता है जब तक कि पाइपलाइन रजिस्टर्स नहीं होते हैं) बाइनरी ऑपरेशन का मतलब है 2 इनपुट के साथ एक ऑपरेशन यह नहीं कि इनपुट बाइनरी एन्कोडेड हैं। – Paebbels

+0

@Paebbels मुझे लगता है कि ओपी ने पाइपलाइन रजिस्टरों का उपयोग किया था और एक छोटा एफपीजीए था। मैं अपनी धारणाओं को और स्पष्ट करने के लिए अपना उत्तर अपडेट करूंगा। – Lincoln

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

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