2015-06-02 8 views
5

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

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

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

+0

कनेक्ट कर सकते हैं Zynq हार्डवेयर में एक्सी-स्ट्रीम इंटरफेस नहीं है। इसका मतलब है कि आपका पीएल में जोड़ा गया था, और आपकी कनेक्टिविटी पर अधिक जानकारी के बिना यह आपकी मदद करना संभव नहीं होगा। –

उत्तर

5

कॉर्टेक्स-ए 9 प्रोसेसर और एफपीजीए के बीच एक zynq डिवाइस संचार पर AXI प्रोटोकॉल का उपयोग करके किया जाता है।

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

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

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

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

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

0

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

क्या आप यही देख रहे हैं?

1

कुशल डेटा स्थानांतरण के लिए सबसे अच्छा विकल्प डीएमए सक्षम पीएस-पीएल संचार का उपयोग कर रहा है। पीएल के अंदर एक डीएमए नियंत्रक को लागू करने के बाद, जैसे कि एएक्सआई सीडीएमए आप इसे अपने वांछित आईपी कोर पर एक एक्सआई 4-स्ट्रीम आईपी से कनेक्ट कर सकते हैं। यदि आप एक सामान्य ढांचे को स्थापित नहीं करेंगे तो आप mmap() सिस्टम कॉल का उपयोग कर डीडीआर-मेमोरी के डीएमए-सक्षम भाग तक पहुंच सकते हैं। यहां उपयोगकर्ता स्थान से डेटा को आईपी कोर में स्थानांतरित करने के लिए एक टेम्पलेट है जिसमें लूप-बैक लागू किया गया है। https://github.com/h-nasiri/Zynq-Linux-DMA Zynq AXI CDMA

AXI सीडीएमए प्रोसेसिंग सिस्टम हिमाचल प्रदेश गुलाम पोर्ट का उपयोग करता पढ़ने/डीडीआर सिस्टम स्मृति के लिए लेखन पहुँच पाने के लिए। एक लिनक्स ओएस आधारित एप्लिकेशन सॉफ़्टवेयर भी है जो डीएमए कोर को आरंभ करने के लिए एमएमएपी() का उपयोग करता है और फिर डेटा ट्रांसफर करता है। आप आसानी से एएक्सआई 4-स्ट्रीम इंटरकनेक्ट को एक्सीआई सीडीएमए में जोड़ सकते हैं और

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