Სარჩევი:

WIDI - უკაბელო HDMI გამოყენებით Zybo (Zynq განვითარების დაფა): 9 ნაბიჯი (სურათებით)
WIDI - უკაბელო HDMI გამოყენებით Zybo (Zynq განვითარების დაფა): 9 ნაბიჯი (სურათებით)

ვიდეო: WIDI - უკაბელო HDMI გამოყენებით Zybo (Zynq განვითარების დაფა): 9 ნაბიჯი (სურათებით)

ვიდეო: WIDI - უკაბელო HDMI გამოყენებით Zybo (Zynq განვითარების დაფა): 9 ნაბიჯი (სურათებით)
ვიდეო: Miracast HDMI Dongle Mirascreen Wireless Unboxing and how to Setup Guide 2022 2024, ივლისი
Anonim
WIDI - უკაბელო HDMI გამოყენებით Zybo (Zynq განვითარების დაფა)
WIDI - უკაბელო HDMI გამოყენებით Zybo (Zynq განვითარების დაფა)
WIDI - უკაბელო HDMI გამოყენებით Zybo (Zynq განვითარების დაფა)
WIDI - უკაბელო HDMI გამოყენებით Zybo (Zynq განვითარების დაფა)

ოდესმე გსურდათ რომ შეგეძლოთ თქვენი ტელევიზორის კომპიუტერთან ან ლეპტოპთან დაკავშირება როგორც გარე მონიტორი, მაგრამ არ გინდათ რომ გქონდეთ ყველა ის გამაღიზიანებელი კაბელი? თუ ასეა, ეს გაკვეთილი მხოლოდ თქვენთვისაა! მიუხედავად იმისა, რომ არსებობს პროდუქტები, რომლებიც აღწევენ ამ მიზანს, DIY პროექტი ბევრად უფრო დამაკმაყოფილებელია და პოტენციურად იაფია.

ეს კონცეფცია განსხვავდება ისეთი პროდუქტებისგან, როგორიცაა chromecast, რადგან ის აპირებს დაიკავოს HDMI კაბელის ადგილი, რომელიც აკავშირებს მონიტორს, ვიდრე ნაკადი მოწყობილობა.

ჩვენი პროექტი შეიქმნა როგორც საბოლოო პროექტი ოპერატიული სისტემების რეალურ დროში კურსისთვის კალიფორნიის სახელმწიფო პოლიტექნიკურ უნივერსიტეტში, სან ლუის ობისპო.

პროექტის მიზანია გამოიყენოს ორი Digilent Zybo დაფა, რომ შეასრულოს უკაბელო საკომუნიკაციო ინტერფეისი HDMI გადამცემ მოწყობილობას შორის (კომპიუტერი, blu-ray და ა.შ.) HDMI მიმღებ მოწყობილობაზე (დესკტოპის მონიტორი, პროექტორი, ტელევიზია და ა.შ.).

ერთი Digilent Zybo დაუკავშირდება HDMI- ს გადამცემ მოწყობილობას, მეორე კი HDMI- ით მიმღებ მოწყობილობას.

უკაბელო კომუნიკაცია განხორციელდება უკაბელო ადგილობრივი ქსელის გამოყენებით, რომელიც ეძღვნება გადამცემს და მიმღებს, სახლის როუტერის ან სხვა ამგვარი მოწყობილობის გავლის გარეშე. ამ პროექტისთვის გამოყენებული უკაბელო მოდული არის tplink wr802n nanorouter, რომელთაგან ერთი მუშაობს როგორც წვდომის წერტილი ქსელის შესაქმნელად, ხოლო მეორე მუშაობს როგორც კლიენტი ქსელში დასაკავშირებლად. თითოეული ნანორუტერი დაუკავშირდება Ethernet კაბელს Zybo დაფაზე. როდესაც დაკავშირებულია ამ მარშრუტიზატორებთან, მოწყობილობები დაუკავშირდებიან TCP- ს, თითქოსდა დაკავშირებული იყვნენ ერთი Ethernet კაბელით (რაც იმას ნიშნავს, რომ კავშირის დასამყარებლად საჭიროა მხოლოდ კონფიგურაცია კლიენტის IP მისამართი).

მიუხედავად იმისა, რომ პროექტის მიზანი იყო 1080x720 ვიდეო @ 60Hz ნაკადის გაადვილება, ეს მიუღწეველი იყო უკაბელო ქსელში გამტარუნარიანობის შეზღუდვის გამო და რეალურ დროში ვიდეო შეკუმშვის არარსებობის გამოსაყენებლად საჭირო მონაცემების შესამცირებლად. ამის ნაცვლად, ეს პროექტი ემსახურება მომავალი განვითარების მიზანს ამ მიზნის მისაღწევად, რადგან მან მკაცრად შეზღუდა შეზღუდვები კადრების სიხშირეზე HDMI მონაცემების სწორად გადმოსაცემად.

პროექტის მოთხოვნები:

2x Digilent Zybo განვითარების დაფები (უნდა ჰქონდეს მინიმუმ ერთი HDMI პორტი)

2 x HDMI კაბელი

2x microusb კაბელები (Zybo– ს კომპიუტერთან დასაკავშირებლად განვითარებისათვის)

2x tplink wr802n nanorouters (მათ შორის adtl. 2x microusb და wall outlet power adapters)

2x Ethernet კაბელი

*** შენიშვნა: ეს გაკვეთილი გულისხმობს Vivado- ს დიზაინის კომპლექტის გაცნობას და ახალი პროექტისა და ბლოკის დიზაინის შექმნის გამოცდილებას. ***

ნაბიჯი 1: გადამცემისთვის Zynq პროგრამირებადი ლოგიკის კონფიგურაცია

დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა გადამცემისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა გადამცემისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა გადამცემისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა გადამცემისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა გადამცემისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა გადამცემისთვის

გადამცემი პროგრამირებადი ლოგიკის შემუშავებისადმი ჩვენი მიდგომა იყო შეასრულოს hdmi-to-hdmi გადაცემა კომპიუტერიდან მონიტორის გამოყენებით ვიდეო პირდაპირი მეხსიერების ორი წვდომის (VDMA) ბლოკის გამოყენებით, ერთი წერისთვის და ერთი წასაკითხად.

ორივე შერჩეულია უფასო გაშვების, 3 ჩარჩო-ბუფერული რეჟიმისთვის (0-1-2). ვინაიდან ვიდეო ბირთვი ოპტიმიზირებულია 60 კადრი წამში, ეს ნიშნავს, რომ VDMA წერს ან წაიკითხავს ახალ კადრზე ყოველ 16,67 წამში ამ თანმიმდევრობით: 0, 1, 2, 0, 1, 2, 0, 1, 2. DDR მეხსიერების ადგილები თითოეული ჩარჩოსთვის განსხვავებულია ორი VDMA– სთვის, რადგან ისინი აღარ არიან ერთმანეთთან სინქრონიზებული. სამაგიეროდ, ტექნიკური ქრონომეტრი (TTC1), კონფიგურირებული 60 Hz, გამოიყენება მონაცემების მოძრაობის სინქრონიზაციისათვის მეხსიერების ორ ადგილს შორის.

ზემოთ მოყვანილი სურათი გვიჩვენებს 3 ჩარჩოს, მათ ზომებს და მეხსიერების რაოდენობას, რომელიც თითოეულ მათგანს სჭირდება (ჩარჩოს მარჯვნივ). თუ ჩვენ მივანიჭებთ ჩაწერის VDMA ამ მეხსიერების ადგილებს, მაშინ ჩვენ შეგვიძლია მივანიჭოთ წაკითხული VDMA მეხსიერების ადგილმდებარეობები ამ ნაკრების მიღმა, ვთქვათ 0x0B000000 – დან დაწყებული. თითოეული ჩარჩო შედგება 1280*720 პიქსელიდან და თითოეული პიქსელი შედგება წითელი, მწვანე და ლურჯი 8 ბიტიდან, სულ 24 ბიტი. ეს ნიშნავს, რომ ჩარჩო შედგება 1280*720*3 ბაიტიდან (2.76 მბ).

ტაიმერის IRQ შიგნით, რომელიც აღწერილია VDMA დრაივერის დაყენებაში, გაუმკლავდება მონაცემების კოპირებას VMDA მეხსიერების ორ ადგილს შორის. VDMA აჩვენებს მომდევნო ჩარჩოს, სადაც იწერება ან იკითხება. ჩარჩო წარმოდგენილია კონკრეტული ნაცრისფერი კოდით, რომელიც გადაკეთებულია პროგრამულ უზრუნველყოფაში. ნაცრისფერი კოდის განმარტება 3 ჩარჩო-ბუფერის კონფიგურაციისთვის შეგიძლიათ იხილოთ AXI VDMA პროდუქტის სახელმძღვანელოში დანართში C.

ეს გვაძლევს საშუალებას გადავიწეროთ მეხსიერებაში ჩაწერილი შინაარსი იმ ჩარჩოდან წაკითხვის გარეშე, რომელზეც ამჟამად იწერება.

*** გაითვალისწინეთ, რომ წაკითხული VDMA არ გამოიყენება მონაცემების გაგზავნისას უკაბელო ქსელში. მისი ერთადერთი მიზანია შეამოწმოთ VMDA– ს მეხსიერების კოპირების სწორი მოქმედება. წაკითხული VMDA უნდა იყოს გამორთული. ***

აქ მოცემულია ნაბიჯები გადამცემების დიზაინის ბლოკის შესაქმნელად:

  1. ახალი პროექტის შექმნისას მიზანშეწონილია მიანიჭოთ ჩიპი ან დაფა პროექტს. ეს ბმული აღწერს როგორ დაამატოთ ახალი დაფის ფაილები Vivado დირექტორიაში და დააკავშიროთ სწორი დაფა თქვენს პროექტთან. ის გამოსადეგი იქნება დამუშავების სისტემის ბლოკის დამატებისას და ტექნიკიდან პროგრამულ უზრუნველყოფაზე გადასვლისას (SDK მხარე).
  2. დაამატეთ შემდეგი ბლოკები:

    • dvi2rgb
    • ვიდეო Axi4- ნაკადში
    • დროის კონტროლერი
    • axi4- ნაკადი vid out
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • საათის ოსტატი
    • მუდმივი
    • Zynq დამუშავების სისტემა
  3. დამუშავების სისტემის დამატებისას დააწკაპუნეთ "გაუშვით ბლოკირების ავტომატიზაცია" ზედა მწვანე ფერის ბარიდან და დარწმუნდით, რომ არჩეულია "მიმართვა დაფის წინასწარ". დანარჩენი ყველაფერი ნაგულისხმევად დატოვეთ.
  4. თითოეული ბლოკის კონფიგურაციის ფანჯრის სურათები შეგიძლიათ იხილოთ ზემოთ მოცემულ სურათებში. თუ თქვენ ვერ ხედავთ სურათს კონკრეტული ფანჯრისთვის, უბრალოდ დატოვეთ ის ნაგულისხმევად.
  5. დაიწყეთ Zynq დამუშავების სისტემის კონფიგურაცია:

    • PS-PL კონფიგურაციაში AXI Non Secure Enable GP Master AXI, ჩართეთ M AXI GP0 ინტერფეისი
    • PS-PL კონფიგურაციაში HP Slave AXI ინტერფეისი, ჩართეთ ორივე HP0 და HP1
    • MIO კონფიგურაციაში დარწმუნდით, რომ ENET0 ჩართულია I/O პერიფერიის ქვეშ, შემდეგ განაცხადის პროცესორის განყოფილება, ჩართეთ Timer0
    • საათის კონფიგურაციის PL Fabric Clocks ჩართეთ FCLK_CLK0 და დააყენეთ 100 MHz.
    • დააწკაპუნეთ Ok
  6. სანამ დააწკაპუნებთ "გაუშვით კავშირის ავტომატიზაცია", დარწმუნდით, რომ დააკავშირებთ ვიდეო ბლოკებს, როგორც ჩანს ზემოთ TX ბლოკის დიზაინის სურათზე. თქვენ გსურთ გადაარქვათ მუდმივი VDD და დააყენოთ მნიშვნელობა 1. შეაერთეთ ვიდეო ბლოკები შესაბამისად.
  7. გააკეთეთ HDMI TMDS საათი და მონაცემთა ქინძისთავები გარე rgb2dvi და dvi2rgb ბლოკებზე
  8. შექმენით შეყვანის და გამომავალი პორტი ცხელი დანამატის გამოვლენის სიგნალისთვის (HPD) და დააკავშირეთ ისინი ერთმანეთთან, ეს განსაზღვრულია შეზღუდვების ფაილში
  9. პიქსელის საათი ამოღებულია TMDS_Clk_p– დან, რომელიც იქმნება შეზღუდვების ფაილში. ეს იქნება 74.25 MHz 720p რეზოლუციის შესაბამისად. მნიშვნელოვანია პიქსელის საათის დაკავშირება (dvi2rgb ბლოკიდან) შემდეგ ქინძისთავებთან:

    • vid_io_in_clk (vid in axi stream block)
    • vid_io_out_clk (ღერძული ნაკადი ბლოკის გასასვლელად)
    • clk (დროის კონტროლერი)
    • PixelClk (rgb2dvi)
  10. *** შენიშვნა: ამჟამად, პიქსელის საათის აღდგენის გასააქტიურებლად, HDMI rx და tx კონექტორები უნდა იყოს ჩართული აქტიურ წყაროს/ჩაძირვაში. ამის ერთი გზაა ვიდეოს rx და tx ბლოკების გამოყოფა საათის სხვადასხვა დომენში (სხვა სიტყვებით რომ ვთქვათ, შექმენით ახალი 74.25 MHz საათი, რომელიც მიეწოდება tx ბლოკს). ***
  11. შემდეგ დააყენეთ საათის ოსტატი ისე, რომ გქონდეთ 100 MHz შეყვანა (გლობალური ბუფერული წყარო) და 3 გამომავალი საათი @ 50 MHz (AXI-Lite საათი), 150 MHz (AXI4-Stream clock), 200 MHz (dvi2rgb RefClk pin).
  12. შეაერთეთ FCLK_CLK0 დამუშავების სისტემის პინი საათის ოსტატის შეყვანასთან
  13. ამ ეტაპზე დააწკაპუნეთ "გაუშვით კავშირის ავტომატიზაცია" მწვანე ზოლიდან დიზაინის ფანჯრის ზედა ნაწილში. კარგი იდეაა ამის გაკეთება ერთდროულად ერთი ბლოკისთვის და მიჰყევით TX ბლოკის დიზაინის სურათს ზემოთ.
  14. ინსტრუმენტი შეეცდება დაამატოთ AXI Interconnect, რომელიც მოქმედებს როგორც მთავარი/მონათესავი კავშირი იმ ბლოკებისთვის, რომლებიც იყენებენ AXI-Lite ავტობუსს (VDMA და GPIO).
  15. იგი ასევე დაამატებს AXI SmartConnect- ს, რომელიც მოქმედებს როგორც ძირითადი/მონადიროვანი კავშირი AXI4-Stream და მაღალი ხარისხის პროცესორის ინტერფეისებისთვის, რომელსაც იყენებს VDMA (ნაკადი მეხსიერების რუქაზე და პირიქით).
  16. ინსტრუმენტი ასევე დაამატებს პროცესორის სისტემის გადატვირთვას. დარწმუნდით, რომ ეს მხოლოდ VDMA, GPIO და პროცესორთან დაკავშირებულ ბლოკებთან არის დაკავშირებული. არ დააკავშიროთ იგი ვიდეო ბლოკებთან (მაგ. Dvi2rgb, დროის კონტროლერი, ვიდეო ნაკადი და ა.
  17. კავშირის ავტომატიზაციის დასრულების შემდეგ, დარწმუნდით, რომ კავშირები ემთხვევა TX ბლოკის დიზაინის სურათს. თქვენ შეამჩნევთ სისტემის დამატებით ILA ბლოკს, რომელიც არ არის ნახსენები. ეს მხოლოდ გამართვისთვისაა და ჯერ არ არის საჭირო. ის იყენებს 150 მ პროცესორის გადატვირთვას, ასე რომ არც ეს არის საჭირო. ყველგან, სადაც ხედავთ პატარა მწვანე "შეცდომებს" ავტობუსებზე, ეს არის ILA- ს გამო და მათი იგნორირება შესაძლებელია.
  18. ბოლო ნაბიჯი არის მარჯვენა ღილაკით დააწკაპუნოთ ბლოკის დიზაინზე პროექტის წყაროების ხეზე და შეარჩიოთ "შექმნა HDL Wrapper". თუ თქვენ გეგმავთ ლოგიკის დამატებას შეფუთვაში, ის გადაწერილი იქნება ყოველ ჯერზე, როდესაც ეს შერჩეულია.
  19. იხილეთ VDMA დრაივერის დაყენების განყოფილება SDK- ის მხარეს დეტალებისთვის.

საათები და გადატვირთვა

მე აღმოვაჩინე, რომ ნებისმიერი პროგრამირებადი ლოგიკური პროექტის ყველაზე მნიშვნელოვანი ასპექტია საათის დომენების ფრთხილად განხილვა და სიგნალების გადატვირთვა. თუ ისინი სწორად არის კონფიგურირებული, თქვენ კარგად შეძლებთ თქვენი დიზაინის მუშაობას.

Pixel საათი და დრო ჩაკეტილი

იმის დასადასტურებლად, რომ გარკვეული სიგნალები აქტიურია, კარგი იდეაა, რომ ეს სიგნალები დაუკავშიროთ LED- ებს (საათები, გადატვირთვა, ჩამკეტები და ა. შ.). ორი სიგნალი, რომელიც დამხმარე აღმოჩნდა გადამცემთა დაფაზე, იყო პიქსელის საათი და "ჩაკეტილი" სიგნალი AXI4-Stream- ზე, ვიდეო ბლოკის გასავლელად, რაც გეუბნებათ, რომ ვიდეოს დრო სინქრონიზებულია დროის კონტროლერთან და ვიდეოს წყაროსთან მონაცემები. მე დავამატე ლოგიკა დიზაინის ბლოკის შესაფუთად, რომელიც აკონტროლებს პიქსელის საათს PvixelClkLocked სიგნალის გამოყენებით dvi2rgb ბლოკზე გადატვირთვის სახით. მე აქ დავამატე ფაილი, როგორც hdmi_wrapper.v. შეზღუდვების ფაილი ასევე თან ერთვის აქ.

ნაბიჯი 2: დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა მიმღებისთვის

დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა მიმღებისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა მიმღებისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა მიმღებისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა მიმღებისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა მიმღებისთვის
დააინსტალირეთ Zynq პროგრამირებადი ლოგიკა მიმღებისთვის

მიმღებისთვის პროგრამირებადი ლოგიკური ბლოკი უფრო მარტივია. მთავარი განსხვავება, გარდა დაკარგული HDMI შეყვანის ბლოკებისა, არის ამოღებული პიქსელის საათის არარსებობა. ამ მიზეზით ჩვენ უნდა შევქმნათ საკუთარი საათი საათის ოსტატიდან. ეს დიზაინი უნდა გაკეთდეს გადამცემიდან ცალკეულ პროექტში. ჩვენი მიზნებისათვის მიმღების პროექტი მოჰყვა Zybo 7Z-20 დაფას, ხოლო გადამცემი Z7-10 დაფას. დაფებზე FPGA განსხვავებულია, ასე რომ … იყავით ფრთხილად.

აქ არის ნაბიჯები მიმღების დიზაინის ბლოკის შესაქმნელად:

  1. დაამატეთ შემდეგი ip ბლოკები თქვენს დიზაინში:

    • დროის კონტროლერი
    • AXI4-ნაკადი ვიდეოდან
    • RGB DVI– დან
    • AXI VDMA
    • AXI GPIO
    • დამუშავების სისტემა
    • საათის ოსტატი
    • მუდმივი (VDD დაყენებულია 1 -ზე)
  2. დაიცავით იგივე ნიმუში ამ ბლოკების კონფიგურაციისთვის, როგორც გადამცემი. აქ მოცემულია კონფიგურაციის შესამჩნევი განსხვავებების სურათები. დანარჩენი იგივე რჩება, როგორც გადამცემი.
  3. დააკონფიგურირეთ VDMA ამ დიზაინისთვის მხოლოდ წაკითხული არხისთვის. გამორთეთ ჩაწერის არხი.
  4. საათის ოსტატი უნდა იყოს კონფიგურირებული შემდეგი შედეგებისთვის:

    • clk_out1: 75 MHz (პიქსელის საათი)
    • clk_out2: 150 MHz (ნაკადის საათი)
    • clk_out3: 50 MHz (Axi-lite საათი)
  5. შეაერთეთ ვიდეო ბლოკები, როგორც ეს ნაჩვენებია RX ბლოკის დიზაინის სურათში.
  6. შემდეგ გაუშვით კავშირის ავტომატიზაცია, რომელიც დაამატებს AXI Interconnect, AXI SmartConnect და System Reset ბლოკებს და შეეცდება შესაბამისი კავშირების დამყარებას. ნელა წადით აქ, რათა დარწმუნდეთ, რომ ის არ ასრულებს არასასურველ კავშირებს.
  7. გააკეთეთ HDMI TMDS საათი და მონაცემთა ქინძისთავები გარე rgb2dvi ბლოკში
  8. ამ დიზაინზე არ არის საჭირო ცხელი დანამატის სიგნალი.

ნაბიჯი 3: დააყენეთ VDMA დრაივერი

VDMA დრაივერის დაყენება
VDMA დრაივერის დაყენება

სხვადასხვა ბლოკების დაყენება, რომლებიც კონფიგურირებულია AXI-Lite ინტერფეისის საშუალებით, საუკეთესოდ კეთდება BSP– სთან ერთად დემო პროექტების გამოყენებით, როგორც მითითება. დიზაინის აპარატურის ექსპორტისა და Vivado– დან SDK– ის გაშვების შემდეგ, თქვენ გსურთ დაამატოთ დაფის მხარდაჭერის ახალი პაკეტი და ჩართოთ lwip202 ბიბლიოთეკა BSP პარამეტრების ფანჯარაში. გახსენით system.mss ფაილის ფაილი BSP– დან და ნახავთ პერიფერიულ დრაივერებს, რომლებიც წარმოდგენილია თქვენი ბლოკის დიზაინიდან. "მაგალითების იმპორტის" ვარიანტი საშუალებას გაძლევთ შემოიტანოთ დემო პროექტები, რომლებიც იყენებენ ამ პერიფერიულ მოწყობილობებს და ამით გაჩვენებთ როგორ დააკონფიგურიროთ ისინი პროგრამულ უზრუნველყოფაში არსებული Xilinx დრაივერების გამოყენებით (იხ. თანდართული სურათი).

ეს იყო მეთოდი, რომელიც გამოიყენება VDMA, Timer & Interrupt და GPIO კონფიგურაციისთვის. აქ არის ჩართული გადაცემის და მიღების წყაროს კოდი. განსხვავებები თითქმის ექსკლუზიურად მთავარშია.გ.

*** შენიშვნა: ვინაიდან სისტემა სრულად არ ფუნქციონირებს ამ სახელმძღვანელოს წერის დროს, ამ განყოფილების წყაროს კოდი არ შეიცავს უკაბელო ქსელის კოდს. ვიდეო შეცდომების გადაცემის/მიღების პროექტების ქსელური გადაცემის/მიღების პროექტების შერწყმის შედეგად საჭიროა რამდენიმე ხარვეზის აღმოფხვრა. ამრიგად, ეს სახელმძღვანელო ამჟამად მათ ცალკე განიხილავს. ***

TX Interrupt Handler ფუნქცია (IRQHandler)

ეს ფუნქცია კითხულობს ნაცრისფერ კოდებს, რომლებიც მოცემულია VDMA– ს წაკითხვისა და ჩაწერის საშუალებით GPIO ბლოკების საშუალებით. ნაცრისფერი კოდები გადაყვანილია ათეულში და გამოიყენება მიმდინარე ჩარჩოს ჩარჩოს ბაზის მეხსიერების ადგილმდებარეობის შესარჩევად. გადაწერილი ჩარჩო არის წინა ჩარჩო, რომელიც ჩაწერილია VDMA– ს მიერ (მაგალითად, თუ VDMA წერს ჩარჩო 2 – ზე, ჩვენ ვაკოპირებთ ჩარჩოს 1 – ს;

ფუნქცია იღებს მხოლოდ ყოველ მეექვსე ჩარჩოს, რათა შეამციროს კადრების სიხშირე 10 ჰერცამდე და არა 60 ჰერცამდე. ქსელის ზედა ზღვარია 300 Mbps. წამში 10 კადრი სიჩქარით საჭიროა გამტარობა 221.2 Mbps.

ამ ფუნქციის ორი სტრიქონის კომენტარი/კომენტირება საშუალებას მისცემს მომხმარებელს გადავიდეს HDMI passthru რეჟიმში შეცდომის გამართვის/გამოცდის მიზნით (კოდი არის კომენტარი შესაბამისი ხაზების მითითების მიზნით). ის ამჟამად აკოპირებს ჩარჩოს მეხსიერების ადგილას, რომელსაც იყენებს Ethernet კოდი.

RX შეწყვეტის დამმუშავებლის ფუნქცია (IRQHandler)

ეს ფუნქცია ძალიან წააგავს TX ფუნქციას, მაგრამ ასლებს 2 ბუფერული FIFO– დან, რომელსაც იყენებს Ethernet შემომავალი მონაცემების დასაწერად. Ethernet კოდი მიუთითებს რომელ ჩარჩოზე იწერება FIFO, მონაცემები კოპირებულია საპირისპირო ჩარჩოდან. მონაცემები კოპირებულია ჩარჩოში, პირდაპირ VDMA– ს მიერ წაკითხულის უკან, ცრემლის თავიდან ასაცილებლად.

ნაბიჯი 4: დააყენეთ Nanorouter ქსელი

დააყენეთ Nanorouter ქსელი
დააყენეთ Nanorouter ქსელი

TPlink ნანო მარშრუტიზატორების გამოყენებით ქსელის შესაქმნელად, ჩართეთ ისინი ინდივიდუალურად და დაუკავშირდით მოწყობილობებისთვის ნაგულისხმევ wifi SSID– ს. ამ მოწყობილობის კონფიგურაციის პარამეტრების შესახებ მეტი ინფორმაცია შეგიძლიათ იხილოთ მოწყობილობის მომხმარებლის სახელმძღვანელოში.

დააყენეთ ერთი მოწყობილობა, როგორც წვდომის წერტილი, ეს იქნება როგორც მთავარი კავშირი ქსელისთვის. დარწმუნდით, რომ დაასახელეთ ქსელი და ჩაწერეთ სახელი და გამორთეთ DHCP (ჩვენ არ გვინდა როუტერმა დინამიურად დააკონფიგურიროს IP მისამართები, ჩვენ გვინდა, რომ მიმღები და მიმღები Zybo დაფები თავად დააყენონ თავიანთი IP მისამართები ისე რომ ისინი თანმიმდევრულები იყვნენ). კონფიგურაციის შემდეგ, დარწმუნდით, რომ მოწყობილობა გადატვირთულია და შეიქმნება ეს ქსელი.

დააყენეთ სხვა მოწყობილობა, როგორც კლიენტი და დარწმუნდით, რომ ის უკავშირდება თქვენს მიერ შექმნილ SSID ქსელს პირველ ნანორუტერთან. კიდევ ერთხელ, დარწმუნდით, რომ DHCP გამორთულია კლიენტისთვის.

კლიენტის დასრულების და გადატვირთვის შემდეგ, ის უნდა დაუკავშირდეს წვდომის წერტილს nanorouter (თუ ეს არ მოხდა, სავარაუდოდ, პრობლემა იქნება ერთ -ერთი მოწყობილობის კონფიგურაციაში). თქვენ შეამჩნევთ, რომ კლიენტის LED შუქი იქნება მყარი მას შემდეგ, რაც ის დაკავშირდება წვდომის წერტილთან.

წვდომის წერტილის nanorouter LED სავარაუდოდ გააგრძელებს ციმციმებას ამ ეტაპზე, ეს ნორმალურია! მოციმციმე შუქი ნიშნავს, რომ ის არ არის დაკავშირებული სხვა მოწყობილობასთან მისი Ethernet პორტიდან და კონფიგურაციულ Zybo- სთან დაკავშირებისთანავე LED დარჩება მყარი, რაც მიუთითებს წარმატებულ ქსელურ კავშირზე.

ახლა, როდესაც ჩვენ გვაქვს ჩვენი ნანო მარშრუტიზატორების დაყენება, ჩვენ გვაქვს უკაბელო ქსელი, რომელიც საშუალებას მოგვცემს დავამყაროთ კომუნიკაცია. მნიშვნელოვანი შენიშვნა ის არის, რომ ჩვენი კონფიგურაციის მეთოდი ნანო მარშრუტიზატორებისთვის (როგორც წვდომის წერტილი და კლიენტი) საშუალებას გვაძლევს კომუნიკაცია გადავიტანოთ Zybo დაფაზე მიმღები Zybo დაფაზე, თითქოს ეს ორი ერთმანეთთან დაკავშირებული იყოს ერთი Ethernet მავთულით. ეს ართულებს ჩვენს ქსელის დაყენებას, რადგან ალტერნატივა სავარაუდოდ მოიცავს Zybo დაფების კონფიგურაციას სერვერთან მკაფიოდ დასაკავშირებლად, დაგეგმილ კავშირთან ერთად.

ორივე მოწყობილობის დაყენების შემდეგ, ნანო მარშრუტიზატორები კონფიგურირებული არიან და მზად არიან თქვენს WIDI ქსელში დანერგვისთვის. არ არსებობს კონკრეტული დაწყვილება ნანორუტერებსა და Zybo დაფებს შორის, რადგან ან წვდომის წერტილი ან კლიენტი იმუშავებს გადამცემი ან მიმღები მოწყობილობისთვის.

ნაბიჯი 5: დააინსტალირეთ Zynq დამუშავების სისტემა მონაცემთა გადაცემისათვის Ethernet– ის საშუალებით

დააინსტალირეთ Zynq დამუშავების სისტემა მონაცემთა გადაცემისათვის Ethernet– ის საშუალებით
დააინსტალირეთ Zynq დამუშავების სისტემა მონაცემთა გადაცემისათვის Ethernet– ის საშუალებით
დააინსტალირეთ Zynq დამუშავების სისტემა მონაცემთა გადაცემისათვის Ethernet– ის საშუალებით
დააინსტალირეთ Zynq დამუშავების სისტემა მონაცემთა გადაცემისათვის Ethernet– ის საშუალებით

HDMI მონაცემების გადასატანად ერთი Zybo დაფიდან მეორეზე, ჩვენ უნდა ჩავრთოთ Ethernet პროტოკოლი ჩვენს VDMA დრაივერთან. ჩვენი მიზანი აქ არის ინდივიდუალური ვიდეო ჩარჩოების გადაცემა Ethernet პერიფერიული საშუალებით დამუშავების სისტემაში, დადგენილი სიჩქარით, რომელიც შეესაბამება ჩვენი ქსელის გამტარობას. ჩვენი პროექტისთვის ჩვენ გამოვიყენეთ TCP, რომელიც მოწოდებულია შიშველი ლითონის LwIP API- ით. ვინაიდან პროექტის ორივე წევრი შედარებით გამოუცდელია ქსელური პროგრამებით, ეს არჩევანი გაკეთდა TCP– სთან დაკავშირებული ზემოქმედების და შეზღუდვების სრულად გაცნობიერების გარეშე. ამ განხორციელების მთავარი პრობლემა იყო შეზღუდული გამტარუნარიანობა და ის ფაქტი, რომ ის ნამდვილად არ არის შექმნილი მონაცემთა დიდი მოცულობის აორთქლების მიზნით. ალტერნატიული გადაწყვეტილებები ამ პროექტში TCP– ის ჩანაცვლებისა და გაუმჯობესების მიზნით მოგვიანებით იქნება განხილული.

TCP– ის მოკლე აღწერა LwIP– ით: მონაცემები იგზავნება ქსელში tcp_mss ზომის პაკეტებში (TCP სეგმენტის მაქსიმალური ზომა), რომელიც ზოგადად არის 1460 ბაიტი. Tcp_write– ის გამოძახება მიიღებს მაჩვენებელზე მითითებულ მონაცემებს და დააკონფიგურირებს pbufs (პაკეტის ბუფერებს) მონაცემების შესანახად და სტრუქტურის უზრუნველსაყოფად TCP ოპერაციებისთვის. მონაცემთა მაქსიმალური რაოდენობა, რომელიც შეიძლება ერთდროულად იყოს რიგში დგინდება, როგორც tcp_snd_buf (TCP გამგზავნის ბუფერული სივრცე). ვინაიდან ეს პარამეტრი არის 16 ბიტიანი რიცხვი, ჩვენ შემოიფარგლება გაგზავნის ბუფერის ზომით 59695 ბაიტი (გაგზავნის ბუფერში არის გარკვეული შევსება). მას შემდეგ, რაც მონაცემები რიგშია, tcp_output იძახება მონაცემთა გადაცემის დასაწყებად. მონაცემების შემდეგი სეგმენტის გაგზავნამდე აუცილებელია ყველა წინა პაკეტის წარმატებით გადაცემა. ეს პროცესი ხორციელდება recv_callback ფუნქციის გამოყენებით, რადგან ეს არის ის ფუნქცია, რომელსაც ეძახიან, როდესაც აღიარება ჩანს მიმღებიდან.

Vivado SDK– ში მაგალითის პროექტების გამოყენება ძალიან გამოსადეგია იმის სწავლაში, თუ როგორ მუშაობს LwIP TCP და არის კარგი ამოსავალი წერტილი ახალი პროექტის დასაწყებად.

WiDi გადამცემი მოწყობილობის პროცედურა ასეთია:

  1. ინიციალიზაცია TCP ქსელის გამოყენებით შიშველი ლითონის LWIP მძღოლი ფუნქცია ზარები.
  2. მიუთითეთ ნებისმიერი ფუნქცია, რომელიც აუცილებელია ქსელის ოპერაციებისთვის.
  3. დაუკავშირდით WiDi მიმღებს მისი IP მისამართისა და პორტის შეერთებით (ჩვენი კონფიგურაცია: მიმღების IP არის 192.168.0.9, დაუკავშირდით პორტს 7).
  4. როდესაც VDMA დრაივერის ტაიმერი იწურება, შეიყვანეთ TX ISR.
  5. განსაზღვრეთ მიმდინარე ჩარჩო ბუფერი წვდომისათვის VDMA ნაცრისფერი კოდის საფუძველზე
  6. მოათავსეთ მონაცემთა პირველი სეგმენტი TCP გაგზავნის ბუფერში
  7. გამოაქვეყნეთ მონაცემები და განაახლეთ ადგილობრივი ცვლადები, რათა თვალყური ადევნოთ რამდენი მონაცემები გაიგზავნა მიმდინარე ჩარჩოდან.
  8. მიღებულ გამოძახებაზე (ფუნქციის გამოძახება მას შემდეგ, რაც გადამცემი მიიღებს მონაცემების მოპოვების აღიარებას), დაალაგეთ რიგში მონაცემების შემდეგი სეგმენტი.
  9. გაიმეორეთ ნაბიჯები 7 და 8 სანამ მთელი ჩარჩო არ გაიგზავნება.
  10. დაუბრუნდით უმოქმედო მდგომარეობას დაელოდეთ მომდევნო ტაიმერის შეწყვეტას, რომ მიუთითოს ახალი ჩარჩო მზად არის (უკან ნაბიჯი 4).

დარწმუნდით, რომ დააინსტალირეთ დაფის დამხმარე პაკეტის LwIP პარამეტრები, როგორც ეს მოცემულია ზემოთ მოცემულ სურათზე. ყველა მნიშვნელობა ნაგულისხმევია გარდა tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. ასევე გაითვალისწინეთ, რომ დეტალური გამართვის მიღწევა შესაძლებელია BSP პარამეტრების შეცვლით debug_options ჯგუფისათვის.

ნაბიჯი 6: დააინსტალირეთ Zynq დამუშავების სისტემა მონაცემთა მიღებისათვის Ethernet– ის საშუალებით

Zybo განვითარების დაფა, რომელიც იმოქმედებს როგორც უკაბელო მიმღები, იმუშავებს გადამცემი მოწყობილობის მსგავსად. დაფის მხარდაჭერის პაკეტის პარამეტრები LwIP იდენტური იქნება წინა საფეხურზე.

მოწყობილობა მიიღებს პაკეტებს, რომლებიც შეიცავს ვიდეო ჩარჩოს სეგმენტებს ნანორუტიდან და ის დააკოპირებს ვიდეო ჩარჩოს მონაცემებს მიმღები VDMA- ს სამკადრიანი ბუფერული სივრცეში. ნებისმიერი მონაცემის გადაწერის თავიდან ასაცილებლად, მონაცემთა ორმაგი ბუფერი (ჩვენ მოვიხსენიებთ როგორც ქსელის ბუფერი) გამოიყენება ნანორუტერიდან მონაცემების შეგროვებისას, რათა ქსელის ტრაფიკმა გააგრძელოს ნაკადი სანამ წინა სრული ვიდეო ჩარჩო კოპირდება VDMA ბუფერი.

WiDi მიმღები მოწყობილობის პროცედურა მოითხოვს ორ ამოცანას, რომელთაგან ერთი არის Ethernet მონაცემების მიღება, ხოლო მეორე არის ვიდეო ჩარჩოების კოპირება ქსელის ბუფერიდან VDMA- ს სამკადრიანი ბუფერზე.

Ethernet მიღების ამოცანა:

  1. TCP ქსელის ინიციალიზაცია შიშველი ლითონის LWIP დრაივერის ფუნქციის ზარების გამოყენებით (კონფიგურაცია IP მისამართით, რომელსაც გადამცემი დაუკავშირდება, ჩვენში 192.168.0.9)
  2. მიუთითეთ ნებისმიერი ფუნქცია, რომელიც აუცილებელია ქსელის ოპერაციებისთვის.
  3. მიღებული Ethernet პაკეტის შემდეგ, დააკოპირეთ პაკეტის მონაცემები მიმდინარე ქსელის ბუფერში, გაზარდეთ მიმდინარე დაგროვილი მონაცემები.
  4. თუ პაკეტი ავსებს ქსელის ჩარჩოს ბუფერს, განაგრძეთ ნაბიჯები 5 და 6. წინააღმდეგ შემთხვევაში, გადადით ამ ნაბიჯზე 3 -ე საფეხურზე.
  5. სიგნალი იმისა, რომ VDMA სამკადრიანი ბუფერული ამოცანა უნდა კოპირდეს ახლად დასრულებული ქსელის ბუფერიდან.
  6. გადაერთეთ სხვა ქსელის ბუფერზე და განაგრძეთ მონაცემების შეგროვება ethernet– ის საშუალებით.
  7. უმოქმედო სანამ ახალი Ethernet პაკეტი მიიღება (ნაბიჯი 3).

დააკოპირეთ ქსელის ბუფერი VDMA სამკადრიანი ბუფერში:

  1. როდესაც VDMA დრაივერის ტაიმერი იწურება, შეიყვანეთ RX ISR.
  2. განსაზღვრეთ მიმდინარე ჩარჩო ბუფერი წვდომისათვის VDMA ნაცრისფერი კოდის საფუძველზე.
  3. განსაზღვრეთ რომელი ქსელის ბუფერი იქნება კოპირებული VDMA ბუფერზე და დააკოპირეთ ეს მონაცემები

ნაბიჯი 7: შეაერთეთ თქვენი Zybo დაფები HDMI წყაროსთან და HDMI ჩაძირვასთან

შეაერთეთ თქვენი Zybo დაფები HDMI წყაროსთან და HDMI ჩაძირვასთან
შეაერთეთ თქვენი Zybo დაფები HDMI წყაროსთან და HDMI ჩაძირვასთან

ახლა შეაერთეთ HDMI კაბელები როგორც მიმღებისთვის, ასევე გადამცემისთვის, დაპროგრამეთ FPGA და გაუშვით დამუშავების სისტემა. კადრების სიხშირე სავარაუდოდ ძალიან ნელი იქნება, LwIP ოპერაციის უზარმაზარი ხარჯების და შეზღუდული გამტარობის გამო. თუ რაიმე პრობლემაა, დაუკავშირდით UART– ს საშუალებით და შეეცადეთ განსაზღვროთ გაფრთხილებები ან შეცდომები.

ნაბიჯი 8: გაუმჯობესების ალტერნატიული იდეები

გაუმჯობესების ალტერნატიული იდეები
გაუმჯობესების ალტერნატიული იდეები

ამ პროექტის მთავარი პრობლემა იყო wifi– ზე გადაგზავნისთვის საჭირო მონაცემების რაოდენობა. ეს მოსალოდნელი იყო, თუმცა ჩვენ არასათანადოდ ვაფასებდით მის გავლენას და შედეგად მივიღეთ ეკრანზე უფრო მეტად სურათების აფეთქება ვიდრე ვიდეო არხი. ამ პროექტის გასაუმჯობესებლად რამდენიმე გზა არსებობს:

  • რეალურ დროში ვიდეო შეკუმშვა. შემომავალი ვიდეო არხის ჩარჩო -ჩარჩო შეკუმშვა მნიშვნელოვნად შეამცირებს ქსელში გაგზავნისთვის საჭირო მონაცემების რაოდენობას. იდეალურ შემთხვევაში, ეს შეიძლება გაკეთდეს აპარატურაში (რაც არ არის ადვილი ამოცანა), ან ეს შეიძლება გაკეთდეს პროგრამულ უზრუნველყოფაში სხვა ARM ბირთვის გამოყენებით შეკუმშვის ალგორითმების გასაშვებად (ამას დასჭირდება შემდგომი ანალიზი დროის შემუშავების უზრუნველსაყოფად). არსებობს ღია კოდის რეალურ დროში ვიდეო შეკუმშვის კომპონენტები, რომლებიც ვნახეთ ინტერნეტში, მაგრამ უმრავლესობა არის IP.
  • Ethernet ნაკადის დანერგვა ტექნიკაში და არა პროგრამულ უზრუნველყოფაში. იყო ერთი ტონა ოვერჰედისტი იმის გამო, რომ ადგილი არ იყო გადამცემში გამავალი მონაცემების რიგში დგომა, სეგმენტის ზომის შეზღუდვის გამო. ბევრად უფრო ეფექტური პროცესია AXI Ethernet IP– ის გამოყენება FIFO ბუფერთან ან DMA– სთან მონაცემების შესანახად. ეს შეამცირებს დამატებით ბარგს LwIP TCP– დან და საშუალებას მისცემს მეტი მონაცემთა ნაკადს.

ნაბიჯი 9: ხელმისაწვდომობა

ამ WiDi პროექტის შედეგად მიღებული პროდუქტი უნდა იყოს სრულად ინტეგრირებული, კომპაქტური წყვილი მოწყობილობა, რომელსაც მომხმარებელი შეძლებს დაუკავშირდეს ნებისმიერ HDMI წყაროს და შემდეგ ჩაირთოს ვიდეო არხი HDMI შესაძლებლობების უკაბელო ეკრანზე. მოწყობილობებს გააჩნიათ Zyq-7000 SoC, რომელიც ნაპოვნია Zybo საცნობარო დაფაზე და აერთიანებს ქსელის ტექნიკას, რომელიც ნაპოვნია TP-Link ნანო მარშრუტიზატორებში. იდეალურ შემთხვევაში, მომხმარებელს შეეძლო გააკონტროლოს გადამცემი მოდული დისკრეტული მდებარეობიდან სამიზნე ოპერაციული სისტემის შიგნით, მნიშვნელოვანი ტექნიკური შესაძლებლობების მცირე საჭიროების შემთხვევაში.

უსაფრთხოება და კავშირი

მოწყობილობებმა ასევე უნდა შეიცავდეს სატრანსპორტო ფენის უსაფრთხოებას (TLS) და აქვთ შეზღუდული ავტომატური დაკავშირების უნარი, როგორც კონფიდენციალურობის მიზნით. დიზაინერების განზრახვაა, უკაბელო ინტერფეისის ეკრანთან კავშირი გახადონ მომხმარებლის სახელით მიზანმიმართული ქმედება, რათა თავიდან აიცილონ შეცდომით მგრძნობიარე მასალის მაუწყებლობა.

ახლანდელი სტატუსი

ამ დრომდე, პროექტის მდგომარეობა ჯერ კიდევ ძალიან მიმდინარეობს. იმისათვის, რომ ამჟამინდელი საბოლოო წერტილის მომხმარებელმა ისარგებლოს ამ სამეურვეო პროგრამით, მას უნდა ჰქონდეს ძლიერი ტექნიკური გაგება ჩამონტაჟებული სისტემის დიზაინის შესახებ და უნდა იცოდეს პროგრამირებადი აპარატურა და ჩაშენებული პროგრამული უზრუნველყოფა ერთად.

ქსელში გაგზავნილი მონაცემები ამ ეტაპზე არ არის დაშიფრული და ვარაუდობენ, რომ ეს არის TCP/IP პაკეტების უმი გადაცემა.

ვიდეო ბირთვის პროექტი წარმატებით იქნა გამოცდილი როგორც გადაცემის, ასევე მიღებისათვის. მეორეს მხრივ, შეიქმნა უსადენო კავშირი ორ ზიბო დაფას შორის და ტესტის ჩარჩოს მონაცემები წარმატებით გაიგზავნა. ამასთან, ჯერ კიდევ აუცილებელია ქსელის კოდის გაერთიანება თითოეულ ვიდეო ბირთვულ პროექტში და შეამოწმოთ ფაქტობრივი ვიდეო ჩარჩოების გადაცემა.

გირჩევთ: