एम्बेडेड सीपीयू में डीएमए का क्या मतलब है?


17

मैं हाल ही में mbed (LPC1768) के साथ एक परियोजना कर रहा था, विभिन्न तरंगों के उत्पादन के लिए DAC का उपयोग कर रहा था। मैंने डेटाशीट के कुछ हिस्सों को पढ़ा, और इस बारे में बात की कि इसमें बहुत सारे बाह्य उपकरणों के लिए डीएमए कैसे है। ऐसा लग रहा था कि यह उपयोगी होगा, लेकिन आगे पढ़ने पर, मैंने पाया कि डीएमए ने उसी डेटा बस का उपयोग किया है जो सीपीयू (जो मुझे लगता है कि सामान्य है)। क्या इसका मतलब यह है कि डैक डेटा प्राप्त करते समय सीपीयू कैंट किसी भी मेमोरी के साथ इंटरैक्ट करता है? इसके अलावा, चूंकि डीएसी के पास बफर नहीं था (जहां तक ​​मैं बता सकता था) और इसलिए बहुत बार डीएमए करना पड़ता है, डीएमए की बात क्या है? यदि CPU मेमोरी ट्रांजेक्शन नहीं कर सकता है, तो क्या यह कुछ भी कर सकता है?


8
मेरा सुझाव है कि आप अपने सीपीयू की विशेषताओं को देखें और यदि यह एक्सेस मेमोरी के अलावा और कुछ भी कर सकता है। मैंने कुछ सीपीयू के बारे में सुना है जो निर्णय या गणना जैसी चीजें कर सकता है, यह सुनिश्चित नहीं है कि क्या यह बिल्कुल सामान्य है ..
PlasmaHH

क्या CPU को I / O पोर्ट में डेटा स्थानांतरित करने में समय बिताना चाहिए या किसी समर्पित डिवाइस को कार्य सौंपना चाहिए?
स्टेनलेससैटराट

हाँ CPU अन्य सामान कर सकता है, लेकिन एक एम्बेडेड सिस्टम में यह संभवतः अपना बहुत समय बिता रहा है परिधीयों, विशेष रूप से I / O बंदरगाहों के साथ इंटरफेस। क्या सिर्फ डीएमए के लिए अतिरिक्त डेटा बस रखना अधिक समझदारी नहीं होगी? या कि आम तौर पर आवश्यक नहीं है? वह स्थिति जहां आप एक अतिरिक्त बस चाहते हैं, जब आप अपने हार्डवेयर की सीमाओं को आगे बढ़ाने की कोशिश कर रहे हों, जो मुझे लगता है कि जब आप किसी भी तरह डीएमए करना चाहते हैं?
BeB00

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

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

जवाबों:


17

LPC1768 डेटापत्रक मैंने पाया निम्नलिखित उद्धरण (जोर मेरा) होते हैं:

एएचबी मल्टीलेयर मैट्रिक्स पर आठ चैनल जनरल पर्पस डीएमए कंट्रोलर (जीपीडीएमए) जिसका उपयोग एसएसपी, आई 2 एस-बस, यूएआरटी, एनालॉग-टू-डिजिटल और डिजिटल-से-एनालॉग कनवर्टर बाह्य उपकरणों, टाइमर मैच सिग्नल और मेमोरी-टू के लिए किया जा सकता है। -मोरोरी ट्रांसफर।

स्प्लिट एपीबी बस सीपीयू और डीएमए के बीच कुछ स्टालों के साथ उच्च थ्रूपुट की अनुमति देता है

पृष्ठ 6 पर ब्लॉक आरेख AHB मैट्रिक्स के बीच कई चैनलों के साथ SRAM को दिखाता है और निम्नलिखित उद्धरण इसे वापस करता है:

LPC17xx में कुल 64 kB ऑन-चिप स्टैटिक रैम मेमोरी है। इसमें मुख्य 32 kB SRAM शामिल है, जो एक उच्च गति वाली बस में CPU और DMA नियंत्रक द्वारा सुलभ है, और AHB बहुपरत मैट्रिक्स पर एक अलग दास बंदरगाह पर स्थित दो अतिरिक्त 16 kB प्रत्येक SRAM ब्लॉक है । यह आर्किटेक्चर सीपीयू और डीएमए एक्सेस को तीन अलग-अलग रैमों में फैलाने की अनुमति देता है जिन्हें एक साथ एक्सेस किया जा सकता है

और यह निम्नलिखित उद्धरण द्वारा प्रबलित है:

जीपीडीएमए परिधीय-से-मेमोरी, मेमोरी-टू-पेरीफेरल, पेरीफेरल-टू-पेरीफेरल और मेमोरी-टू-मेमोरी लेनदेन को सक्षम करता है।

इसलिए आप अन्य कार्यों के लिए मुख्य SRAM का उपयोग करते हुए, एक अलग SRAM ब्लॉक से या एक अलग परिधीय से अपने DAC को डेटा स्ट्रीम कर सकते हैं।

इस तरह के परिधीय-परिधीय डीएमए छोटे भागों में आम है जहां मेमोरी इंटरफ़ेस काफी सरल है (आधुनिक इंटेल प्रोसेसर कहने की तुलना में)।


आह, धन्यवाद, मुझे एहसास नहीं था कि यह संभव था, मैं दयालु के लिए नया हूँ। क्या इसका मतलब यह है कि सीपीयू बाह्य उपकरणों का उपयोग कर सकता है जबकि डीएसी अलग SRAM का उपयोग कर रहा है?
BeB00

1
हां - यह वही है जो एएचबी मैट्रिक्स के लिए है। यह विभिन्न नियंत्रकों (सीपीयू, डीएमए, ईथरनेट और यूएसबी जैसे कुछ बाह्य उपकरणों) को एक ही समय में विभिन्न चीजों तक पहुंचने की अनुमति देता है। यही कारण है कि SRAM में कई 'पोर्ट' हैं।
डेविड

हाँ, इन सस्ते छोटे क्रिटर्स में AHB समांतर मेमोरी बैंकों के कारण पागल मेमोरी बैंडविड्स डिलीवर करता है: आपके पास ईथरनेट, USB2 और सब कुछ अधिकतम थ्रूपुट पर चल सकता है और सीपीयू भी ध्यान नहीं देता है ...
peufeu

इसके अलावा अंगूठे का कोड एक 32-बिट शब्द में 2 निर्देश डाल सकता है, इसलिए सीपीयू को बस तक पहुंचने की आवश्यकता नहीं हो सकती है जो अक्सर गणित या संचालन करते समय जिसमें ज्यादातर रजिस्टर शामिल होते हैं ... दूसरी तरफ, मुझे लगता है कि एम 3 और एम 4 कर सकते हैं कई busses होने के कारण प्रति घड़ी (निर्देश और डेटा) प्रति मेमोरी एक्सेस करता है।
Peufeu

30

लंबी और छोटी बात यह है कि डीएमए अपनी मूल गति से सीपीयू को प्रभावी ढंग से व्यवहार करने की अनुमति देता है, जबकि परिधीय प्रभावी रूप से अपनी मूल गति से व्यवहार कर सकते हैं। उदाहरण में अधिकांश संख्याएँ बनी हैं।

आइए एक एडीसी से समय-समय पर डेटा एकत्र करने के लिए दो विकल्पों की तुलना करें:

  1. आप ADC को एक व्यवधान (आवधिक या अन्यथा) के भाग के रूप में सेट कर सकते हैं
  2. आप बफ़र बना सकते हैं, और ADC रीडिंग को बफ़र में स्थानांतरित करने के लिए DMA को बता सकते हैं।

आइए एडीसी से 1000 नमूनों को रैम में स्थानांतरित करें।

विकल्प 1 का उपयोग करना: प्रत्येक नमूने के लिए है

  • 12 चक्र रुकावट में प्रवेश कर रहे हैं
  • पढ़िए adc (s)
  • राम में स्टोर
  • 12 चक्र रुकावट से बाहर निकल रहे हैं

आइए दिखाते हैं कि यह रुकावट फ़ंक्शन 76 निर्देश है, एकल चक्र निष्पादन (सबसे अच्छा मामला) मानते हुए, पूरी दिनचर्या 100 निर्देश लंबी है। इसका मतलब है कि विकल्प 1 सीपीयू समय निष्पादन के 100,000 चक्र खर्च करेगा।

विकल्प 2: ADC के 1000 नमूने एकत्र करने के लिए DMA को कॉन्फ़िगर किया गया है। मान लें कि ADC में टाइमर काउंटर से एक हार्डवेयर ट्रिगर है।

  • एडीसी और डीएमए ने 1000 सैंपल डेटा को रैम में ट्रांसफर किया
  • डीएमए 1000 नमूनों के बाद आपके सीपीयू को बाधित करता है
  • 12 चक्र रुकावट में प्रवेश कर रहे हैं
  • कोड होता है (मान लें कि यह रैम को अधिलेखित करने के लिए DMA बताता है)
  • 12 चक्र रुकावट से बाहर निकल रहे हैं

पूरे इंटरप्ट को रोकना (प्रवेश और निकास के साथ ओवरहेड) 100 एकल-चक्र निर्देश हैं। डीएमए का उपयोग करते हुए, आप केवल 1000 नमूनों को बचाने के लिए 100 चक्र खर्च करते हैं।

अब, हर बार डीएमए बस तक पहुंचता है, हां, सीपीयू और डीएमए के बीच विवाद हो सकता है। सीपीयू को भी डीएमए के खत्म होने का इंतजार करने के लिए मजबूर किया जा सकता है। लेकिन एडीएम की सर्विसिंग के लिए सीपीयू को लॉक करने की तुलना में डीएमए खत्म होने की प्रतीक्षा बहुत कम है। यदि CPU कोर घड़ी 2x बस घड़ी है, तो CPU कुछ कोर चक्रों को बर्बाद कर सकता है जो DMA के समाप्त होने की प्रतीक्षा कर रहे हैं। इसका अर्थ है कि स्थानांतरण का आपका प्रभावी निष्पादन समय 1000 (सीपीयू कभी इंतजार नहीं करता) और 9000 चक्रों के बीच है। फिर भी 100,000 चक्रों से बेहतर होगा।


2
यह ध्यान रखना महत्वपूर्ण है कि रैम एकमात्र ऐसी जगह नहीं है जहां सीपीयू डेटा स्टोर कर सकता है। सामान्य तौर पर सीपीयू इस पर काम करने से पहले डेटा को रैम से रजिस्टरों में लोड करता है।
एरन

याह, बिलकुल सही। मेरा उदाहरण विशुद्ध रूप से एक मोटा स्केच है।
pgvoorhees

कई माइक्रोकंट्रोलर के पास एक बहुपरत बस भी है, इसलिए समवर्ती संचालन संभव है। जैसे: adc-> ram and flash-> एक ही समय में रजिस्टर करें। इसके अलावा, कई निर्देश 1 घड़ी से अधिक हैं, इसलिए डीएमए के लिए बहुत समय है।
Jeroen3

9

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

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

यहां तक ​​कि उन मामलों में जहां हर डीएमए चक्र के कारण सीपीयू को एक चक्र के लिए रोक दिया जाता है, हालांकि, डीएमए अभी भी बहुत उपयोगी हो सकता है यदि डेटा एक दर पर आता है जो काफी धीमा है कि सीपीयू आने वाली डेटा वस्तुओं के बीच अन्य काम करने में सक्षम होना चाहिए , लेकिन इतनी तेजी से कि प्रति-आइटम ओवरहेड को कम से कम करने की आवश्यकता है। यदि कोई SPI पोर्ट प्रत्येक 16 सीपीयू चक्रों की दर से एक बाइट की दर से एक उपकरण को डेटा खिला रहा था, उदाहरण के लिए, प्रत्येक हस्तांतरण के लिए सीपीयू को बाधित करने से संभवतः लगभग सभी अपना समय व्यतीत करने और व्यवधान सेवा दिनचर्या से लौटने में खर्च होगा और कोई नहीं कोई भी वास्तविक कार्य करना। डीएमए का उपयोग करना, हालांकि, ओवरहेड को 13% तक कम किया जा सकता है, भले ही प्रत्येक डीएमए हस्तांतरण के कारण सीपीयू को दो चक्रों के लिए रोक दिया गया हो।

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


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

5

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

  1. मतदान विधि। यह वह जगह है जहां आप रजिस्टर झंडे पर प्रतीक्षा करते हैं ताकि आप अगले बाइट को अंदर / बाहर शिफ्ट कर सकें। समस्या यह है कि आप इसके लिए प्रतीक्षा करते समय सीपीयू के सभी निष्पादन को पकड़ रहे हैं। या, यदि आपको एक ऑपरेटिंग सिस्टम में सीपीयू समय साझा करना है, तो आपका स्थानांतरण काफी धीमा हो जाएगा।

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

  3. डीएमए। आप DMA को स्रोत / गंतव्य बिंदुओं, स्थानान्तरण की संख्या और इसे बंद करने के साथ कॉन्फ़िगर करते हैं। यह हस्तांतरण को पूरा करने के लिए बस चक्र और सीपीयू समय चुराएगा, और सीपीयू इस समय में अन्य काम करने के लिए स्वतंत्र है। स्थानांतरण होने पर इंगित करने के लिए आप किसी ध्वज या अवरोध को कॉन्फ़िगर कर सकते हैं। यह आमतौर पर आईएसआर की तुलना में एक स्पर्श तेजी से होता है और आमतौर पर आपका सबसे तेज स्थानांतरण विकल्प होता है।

एक प्रोग्रामर के रूप में, मैं डीएमए को पसंद करता हूं क्योंकि यह कोड करना सबसे आसान है और अनिवार्य रूप से स्थानांतरण करने के लिए सबसे तेज़ तकनीक है। आमतौर पर, आपको बस स्रोत और गंतव्य बिंदुओं के लिए कुछ रजिस्टरों को कॉन्फ़िगर करने की आवश्यकता होती है और इसे स्थानांतरित करने और बंद करने के लिए स्थानान्तरण की संख्या। मैं DMA- त्वरित कोड में ISR कोड में काम करने में अधिक समय व्यतीत करता हूं क्योंकि ISR कोड को महत्वपूर्ण डिजाइन कौशल की आवश्यकता होती है और इसे कोडित, परीक्षण, सत्यापित, आदि करना पड़ता है। DMA कोड बहुत छोटा होता है और कोड मुझे स्वयं लिखना होता है अपेक्षाकृत तुच्छ है, और मैं सौदेबाजी में अधिकतम स्थानांतरण गति प्राप्त कर रहा हूं।

मेरे अनुभव में, हाल ही में Atmel SAM3 / 4 प्रोसेसर के साथ, DMA मेरे ही क्राफ्टिंग के एक कुशल ISR की तुलना में तेजी से एक स्पर्श चलाता है। मेरे पास एक एप्लिकेशन था जो हर 5 मिसे पर SPI से बाइट्स के ढेर में पढ़ता था। बहुत सारे फ़्लोटिंग पॉइंट गणित पृष्ठभूमि के कार्यों में हो रहे थे इसलिए मैं चाहता था कि सीपीयू उन कार्यों के लिए यथासंभव मुक्त हो। प्रारंभिक कार्यान्वयन ISR था, और मैं नमूनों के बीच थोड़ा और सीपीयू समय खरीदने की कोशिश करने के लिए डीएमए में चला गया। हस्तांतरण की गति में थोड़ा सुधार हुआ, लेकिन केवल थोड़ा ही। यह ओ-स्कोप पर मुश्किल से औसत दर्जे का था।

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

दुर्लभ मामलों में, मैंने उन परिधीयों को देखा है जिनके पास अपना RAM क्षेत्र है जो केवल DMA द्वारा सुलभ है। यह ईथरनेट एमएसीएस या यूएसबी पर था।


3

डीएमए का सबसे अधिक उपयोग यहां किया जाता है ताकि डीएसी के कुछ नियमित समय हो सकें, कुछ ज्ञात अंतराल पर एनालॉग आउटपुट को बदलकर एक तरंग उत्पन्न करें।

हाँ अगर यह एक साझा बस है तो ... आपको साझा करना होगा।

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

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

कोई एक सार्वभौमिक जवाब नहीं है। "यह निर्भर करता है" ... आपके द्वारा उपयोग की जा रही विशिष्ट चीज़ के विशिष्ट डिज़ाइन पर। यहां तक ​​कि एक चिप / बोर्ड / सिस्टम डिज़ाइन में कई dma इंजन हो सकते हैं और यह मानने का कोई कारण नहीं है कि वे सभी एक ही तरह से काम करते हैं। हर उदाहरण के लिए आपको यह पता लगाना होगा, और दुर्भाग्य से, वे अक्सर इसे दस्तावेज नहीं करते हैं या इसे पर्याप्त रूप से दस्तावेज नहीं करते हैं। इसलिए आपको कुछ प्रयोग करने पड़ सकते हैं यदि यह एक चिंता का विषय है।


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

1

अब तक के जवाब "गति" के बारे में बात करते हैं कि सीपीयू काम कर सकता है और डीएमए कैसे लाभ उठाता है। हालाँकि एक और विचार है, शक्ति

यदि CPU धीमे लिंक पर डेटा का एक पैकेट भेजना चाहता है, तो उसे मतदान या व्यवधान का उपयोग करते समय अधिकांश समय जागना होगा, हालांकि मुख्य CPU शायद नींद की स्थिति में सक्षम है जबकि DMA किया जा रहा है ।


0

कुछ प्रोसेसर जैसे STM32H7 श्रृंखला में बहुत सारे रैम विकल्प होते हैं और करीब युग्मित रैम के ढेर होते हैं। अलग-अलग रैम बैंकों के पास डीएमए रैम को एक बहुत से हथौड़ा करने की अनुमति देता है, जबकि प्रोसेसर क्लोज-कपेड रैम में डेटा को संसाधित कर रहा है जिसे कैशिंग की आवश्यकता नहीं है और डीएमए द्वारा अंकित नहीं किया जाता है। अपने चारों ओर डेटा स्थानांतरित करने के लिए आप MDMA का उपयोग कर सकते हैं। मैंने इनमें से एक का उपयोग करके एफएमसीडब्ल्यू रडार सेट बनाया। ADC को एक SRAM में दो इनपुट से IQ डेटा मिलता है। मैं तब डेटा को स्केल करता हूं और dtcm ram में फ्लोटिंग पॉइंट 256 बिन कॉम्प्लेक्स फफ्ट करता हूं। फिर FIFO MDMA का उपयोग करके AXI RAM में 2d सरणी में परिणाम देता है।

मैं वेग वेक्टर के लिए फीफो में एक दूसरा फेट 64 बिन लेता हूं। मैं तब जटिल डेटा का परिमाण करता हूं और परिणामी डेटा 128 और 64 फ़्लोटिंग पॉइंट मानों को दूसरे H7 के लिए SPI का उपयोग करके पता लगाने के लिए 12.5 मेगाहर्ट्ज पर भेजता हूं। मैं यह सब 4 एमएस में करता हूं।

नमूने की दर एडीसी की है और 84 kHz है और ओवरसमलिंग के उपयोग से मुझे लगभग 18 बिट्स रिज़ॉल्यूशन मिल रहा है।

केवल मेगाहर्ट्ज रेंज में और बिना किसी बाहरी रैम के चलने वाले सामान्य उद्देश्यों के प्रोसेसर के लिए बुरा नहीं है।

इसके अलावा बड़े caches इस उपकरण ने dtcm के बाहर बछड़ों के लिए भी बेहतर प्रदर्शन किया है।

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