linux - सॉफ्टवेयर उपकरण से Zynq में ऐक्सआई-स्ट्रीम में डेटा कैसे भेजा जाए?




arm fpga (2)

मैं अपने सॉफ्टवेयर ऐप से कुछ डेटा को Zynq के ऐक्सआई-स्ट्रीम इंटरफ़ेस में लिखे जाने के लिए भेज रहा हूं। कुछ इस तरह

open(/dev/axistream);
send_data(data);

मैं लिनक्स को आर्म हिस्से पर चला रहा हूं और अब मैं इसे प्रोग्राम योग्य तर्क भाग से जोड़ना चाहता हूं।


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

  1. सामान्य प्रयोजन AXI पोर्ट: 2x मास्टर (सीपीयू से एफपीजीए) और 2x स्लेव पोर्ट (एफपीजीए से सीपीयू तक)। इन बंदरगाहों को प्रसंस्करण प्रणाली के केंद्रीय इंटरकनेक्ट से जुड़ा है और डीडीआर मेमोरी या ऑन-चिप मेमोरी (ओसीएम) से डेटा ट्रांसफर करने के लिए इस्तेमाल किया जा सकता है।
  2. उच्च निष्पादन अक्सआई पोर्ट: 4x स्लेव पोर्ट (एफपीजीए से सीपीयू तक) डीडीआर या ओसीएम तक उच्च बैंडविड्थ पहुंच प्रदान करते हैं
  3. एसीपी (एक्सीलेरेटर कोलिज पोर्ट): स्लेव पोर्ट (एफपीजीए से सीपीयू तक) उच्च ट्रॉफ़्ट पोर्ट जो सीधे स्नूप कंट्रोल यूनिट (एससीयू) से जुड़ा होता है। एससीयू कैश कॉजरेसी (कैश फ़्लश / अमान्य के लिए आवश्यक ओमिट्स) का रखरखाव करता है

आपके प्रश्न से, मैं समझता हूं कि आपके मामले में सीपीयू संचार का मास्टर है। आपको सामान्य प्रयोजन के एकसी मास्टर बंदरगाहों का उपयोग करना होगा। आप AXI इंटरकनेक्ट में AXI4 स्ट्रीमिंग इंटरफ़ेस कनेक्ट नहीं कर सकते। आपको ऐक्सआई 4 स्ट्रीमिंग को एक्सी में बदलना होगा। आपके प्रदर्शन के आधार पर एएक्सआई डीएमए आईपी कोर ( ऐक्सआई डीएमए आईपी कोर ) की जरूरत है एक अच्छा समाधान हो सकता है

यदि आप "खुले (/ dev /)" का उपयोग करके सॉफ़्टवेयर बिंदु दृश्य से संवाद करना चाहते हैं तो आपको एक लिनक्स डिवाइस ड्राइवर की आवश्यकता होगी। यदि आप डीएमए कोर का उपयोग कर रहे हैं तो आपका संचार आम तौर पर इस तरह दिखाई देगा:

  1. डेटा को एक निश्चित मेमोरी पते से लाने के लिए आप डीएमए कोर को कॉन्फ़िगर करेंगे
  2. डीएमए कोर शुरू करें
  3. डीएमए कोर डेटा प्राप्त करेगा और इसे आपके आईपी ब्लॉक के एक्सएआई 4 स्ट्रीमिंग इंटरफ़ेस में फ़ीड करेगा
  4. आपका आईपी ब्लॉक डेटा पर कुछ ऑपरेशन करेगा और मेमोरी पर वापस भेज देगा (डीएमए का उपयोग करके) या कुछ और करें (बाहरी इंटरफ़ेस को भेजें, ...)

आपके डीएमए कोर के रजिस्टर सेट मेमोरी मैप होंगे और आपके द्वारा लिनक्स डिवाइस ड्राइवर के माध्यम से पहुंच योग्य होगा। डीबगिंग के प्रयोजनों के लिए मैं रजिस्टरों तक पहुंचने के लिए एमएमएपी का इस्तेमाल करने का सुझाव देता हूं और अपने हार्डवेयर के संचालन को शीघ्रता से मान्य करता हूं। एक बार जब आप लिनक्स कर्नेल डिवाइस ड्रायवर के लिए जाते हैं तो मैं आपको यह पुस्तक पढ़ना चाहूंगा: लिनक्स डिवाइस ड्रायवर 3 ए संस्करण


अगर मैं सही ढंग से समझता हूं, तो आप डीएमए इंजन से पीएस से पीएल के डीएमए डेटा चाहते हैं। उस मामले में, आपको लिनक्स में एक ड्राइवर लिखना होगा जो या तो एएक्सआई डीएमए इंजन ड्राइवर का उपयोग करेगा या उपयोगकर्ता अंतरिक्ष से डीएमए इंजन को कॉन्फ़िगर करेगा।

क्या यह वही है जिसको आप ढूंढ रहें थे।





zynq