Სარჩევი:

Zynq გამოსახულების გაძლიერების სისტემა: 7 ნაბიჯი
Zynq გამოსახულების გაძლიერების სისტემა: 7 ნაბიჯი

ვიდეო: Zynq გამოსახულების გაძლიერების სისტემა: 7 ნაბიჯი

ვიდეო: Zynq გამოსახულების გაძლიერების სისტემა: 7 ნაბიჯი
ვიდეო: Начало работы с Zynq 2024, ივნისი
Anonim
Zynq გამოსახულების გაძლიერების სისტემა
Zynq გამოსახულების გაძლიერების სისტემა
Zynq გამოსახულების გაძლიერების სისტემა
Zynq გამოსახულების გაძლიერების სისტემა

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

პროექტი აშენდა და გამოცდა Digilent Zybo დაფაზე, მაგრამ სხვა ZYNQ მოწყობილობებმაც უნდა იმუშაონ.

ჩვენ დავყოფთ ამ პროექტს 3 ნაწილად:

1) INPUT = შეიყვანეთ სურათი Ethernet– ით კომპიუტერიდან/კამერიდან

2) პროცესი = სურათის დამუშავება

3) OUTPUT = გამოუშვით სურათი HDMI ინტერფეისის საშუალებით

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

ნაბიჯი 1: მასალები

მასალები
მასალები

ამ პროექტის დასასრულებლად დაგჭირდებათ:

HARDWARE

- ნებისმიერი ZYNQ დაფა HDMI და Ethernet უნდა მუშაობდეს / მე ვიყენებ Digilent Zybo- ს

- USB A to micro B USB კაბელი

- HDMI კაბელი

- Ethernet კაბელი

- ჩვენება HDMI შეყვანის საშუალებით

პროგრამული უზრუნველყოფა

- Xilinx Vivado

- Xilinx SDK

ნაბიჯი 2: გამოსავალი - VGA კონტროლერი ნაწილი 1

OUTPUT - VGA კონტროლერი ნაწილი 1
OUTPUT - VGA კონტროლერი ნაწილი 1

ჩვენ გამოვიყვანთ ჩვენს ვიზუალურ მონაცემებს დაფაზე არსებული HDMI პორტის გამოყენებით. HDMI პორტი დაკავშირებულია ZYNQ– ის PL (პროგრამირებადი ლოგიკა = FPGA) მხარეს და ჩვენ დაგვჭირდება VHDL– ში კონტროლერის დიზაინი. თუ თქვენ ოდესმე შეიმუშავეთ VGA კონტროლერი, თქვენ ნახავთ მას ძალიან ჰგავს. HDMI და VGA– ის ვადები ფაქტობრივად ერთი და იგივეა, სინამდვილეში თქვენ შეგიძლიათ დაეყრდნოთ არსებულ VGA კონტროლერს HDMI კონტროლერის მისაღებად.

იმის გასაგებად, თუ რა ხდება სინამდვილეში, ჩვენ პირველად შევიმუშავებთ VGA კონტროლერს

ჩვენ გვინდა გამოვაქვეყნოთ 1920x1080 რეზოლუციით.

VGA კონტროლერი პასუხისმგებელია პიქსელის მონაცემების (RGB ფორმატში) თანმიმდევრულად, პიქსელურად პიქსელურად ეკრანზე გადაცემაზე. 1920x1080 რეალურ ჩვენების არეალის გარეთ არის ასევე რამდენიმე "სასაზღვრო" უბანი, კერძოდ: წინა ვერანდა, უკანა ვერანდა და უკანა ადგილი. ამ სფეროების პიქსელებში ზომა სტანდარტულია და სპეციფიკურია ყველა რეზოლუციისთვის. ეს ადგილები რეალურად არ ჩანს ეკრანზე, მაგრამ ისინი სავალდებულოა და პიქსელების ფერი ამ მხარეში უნდა იყოს შავი. ლოგიკური კითხვა იქნება, რატომ არის საჭირო ეს დამატებითი ტერიტორიები. ეს კითხვა ეწინააღმდეგება ამ სასწავლო მიზანს, მაგრამ თუ თქვენ გაინტერესებთ, მე გირჩევთ, რომ განახორციელოთ შემდგომი კვლევა ინტერნეტით.

ეს არის კარგი ვიდეო, რომელიც განმარტავს VGA ინტერფეისს

ჩვენს შემთხვევაში ჩვენ გვინდა ჩვენება 1920*1080 რეზოლუციით და ეს არის დრო:

ჰორიზონტალური ჩვენების არე = 1920 პიქსელი

ჰორიზონტალური ფრონტის ვერანდა = 88 პიქსელი

ჰორიზონტალური უკანა ვერანდა = 148 პიქსელი

ჰორიზონტალური ხელახალი მიტოვება = 44 პიქსელი

ვერტიკალური ჩვენების არე = 1080 პიქსელი

ვერტიკალური წინა ვერანდა = 4 პიქსელი

ვერტიკალური უკანა ვერანდა = 36 პიქსელი

ვერტიკალური უკან დახევა = 5 პიქსელი

(აქ შეგიძლიათ იხილოთ სხვა გადაწყვეტილებების დრო

ასე რომ, ჩვენი რეზოლუცია იქნება 2200 x 1125. ჩვენ გვინდა 60 კადრი / წმ (კადრი წამში), ასე რომ, ჩვენი პიქსელის საათი იქნება 60*2200*1125 = 148.5 მჰც. Zybo დაფაზე არის 125 Mhz საათი. ჩვენ გამოვიყენებთ MMCM IP- ს, რომ შევქმნათ ჩვენთვის საჭირო 148.5 MHz Pixel საათი.

ნაბიჯი 3: გამოსავალი - VGA კონტროლერი ნაწილი 2

OUTPUT - VGA კონტროლერი ნაწილი 2
OUTPUT - VGA კონტროლერი ნაწილი 2

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

VGA პორტების უმეტესობა არ მოგცემთ 8 ბიტს თითო ფერადი არხისთვის პიქსელზე (იხ. სურათი ზემოთ), ასე რომ თქვენ დაგჭირდებათ დიზაინის ადაპტირება დაფის მიერ მოწოდებული ქინძისთავების რაოდენობაზე (თუმცა ეს არ არის პრობლემა HDMI– სთვის).

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

გადახედეთ ფიგურას nr. 2. შეგახსენებთ, რომ სანამ ჩვენი VGA კონტროლერი გამოდის 5/6 ბიტს თითო ფერიზე, ეს ბიტები კაბელის გავლის წინ გარდაიქმნება ერთ ანალოგიურ სიგნალად თითოეული ფერის არხისთვის (წითელი, მწვანე და ლურჯი).

ნაბიჯი 4: გამოსავალი - HDMI კონტროლერი ნაწილი 1

OUTPUT - HDMI კონტროლერი ნაწილი 1
OUTPUT - HDMI კონტროლერი ნაწილი 1

ახლა, როდესაც ჩვენ ვიცით, როგორ მუშაობს VGA კონტროლერი და გვაქვს სამუშაო დიზაინი, შეგვიძლია გავაგრძელოთ HDMI კონტროლერი. HDMI კონტროლერი რეალურად გამოიყენებს VGA კონტროლერში შემუშავებულ მთელ კოდს. HDMI და VGA იყენებენ ერთსა და იმავე დროს და ერთსა და იმავე სიგნალებს. განსხვავება ჩნდება ამომავალი ქინძისთავებზე.

მიუხედავად იმისა, რომ VGA იყენებს ერთ მავთულს თითოეული ფერისთვის და გადასცემს ანალოგიურ სიგნალს მის გასწვრივ, HDMI გადასცემს მონაცემებს ციფრულად 1 ბიტ ერთდროულად თითოეული ფერისთვის და იყენებს დიფერენციალურ სიგნალს. დიფერენციალური სიგნალი ნიშნავს, რომ თითოეული ბიტისთვის HDMI– ს აქვს 2 ქინძისთავი, ერთი მეორის საპირისპიროდ. ასე რომ, თუ ჩვენ გვსურს სიგნალის გადაცემა '1', ჩვენ გადავცემთ '1' მავთულს და '1' უარყოფს მეორე მავთულს. ეს უზრუნველყოფს სიგნალის მთლიანობას და ამის შესახებ მეტი შეგიძლიათ წაიკითხოთ აქ https://goo.gl/6CPCzB. ჩვენ გვაქვს ერთი ასეთი არხი თითოეული ფერისთვის, წითელი, მწვანე და ლურჯი და ერთი საათისათვის. დიფერენციალური სიგნალის სპეციფიკის გამო, სიგნალები, რომლებსაც ჩვენ ვიგზავნით hdmi– ს საშუალებით, უნდა იყოს DC დაბალანსებული, რაც იმას ნიშნავს, რომ 1 – ისა და 0 – ის რიცხვი უნდა იყოს დაახლოებით თანაბარი დროის გარკვეულ ფანჯარაში. ამის მისაღწევად ჩვენ გამოვიყენებთ 8b/10b კოდირებას. თქვენ შეგიძლიათ გაიგოთ ბევრი რამ იმის შესახებ, თუ როგორ მუშაობს დიფერენციალური სიგნალიზაცია და 8b/10b კოდირება DVI სპეციფიკაციიდან აქ https://goo.gl/hhh8Ge (DVI და HDMI იყენებენ ერთსა და იმავე ვიდეო სიგნალებს).

ნაბიჯი 5: გამოსავალი - HDMI კონტროლერი ნაწილი 2

OUTPUT - HDMI კონტროლერი ნაწილი 2
OUTPUT - HDMI კონტროლერი ნაწილი 2

საკმარისია თეორია, მოდით გადავიდეთ ჩვენს პროექტზე. მიუხედავად იმისა, რომ VGA კონტროლერში მივიღეთ 148.5 MHz საათი, აქ ჩვენ მოგვცემს 10 -ჯერ ამ სიხშირეს, რადგან ჩვენ გვსურს გადავიტანოთ 8 ბიტი თითოეული ფერისთვის და 8b/10b კოდირების გამოყენებით, რაც ითარგმნება 10 ბიტი პიქსელზე და 10 *148.5 მჰც = 1485 მჰც. ეს არის უზარმაზარი სიხშირე, რომლის მიღება შეუძლებელია Zybo დაფაზე. საბედნიეროდ ჩვენ მივიღეთ რამდენიმე ხრიკი ჩვენს ყელში. ჩვენ შეგვიძლია მართოთ 5*148.5MHz = 742.5MHz და ჩვენ გამოვიყენებთ OSERDES (სერიალიზატორი) IP მონაცემების გადასაცემად 742.5Mhz საათის ამომავალ და დაღმავალ ზღვარზე, ასე რომ ჩვენ რეალურად მივიღებთ მონაცემებს 1485 მჰც სიხშირით. Vivado მოგვცემს დროულ გაფრთხილებებს და თქვენ ყოველთვის შეგიძლიათ მიმართოთ უფრო დაბალ რეზოლუციას უფრო პატარა საათით, მაგრამ რადგან ის მუშაობს, ჩვენ ამას ახლა ნამდვილად არ ვაწუხებთ (გაფრთხილებები უკავშირდება იმას, რომ საათის ბუფერები ოფიციალურად არ მუშაობს 464 მჰც -ზე მაღალი სიხშირის მხარდაჭერა).

ასე რომ, ის, რაც ჩვენ გვჭირდება, არის ჩვენი VGA კონტროლერის გამომავალი მონაცემების კოდირება 8b/10b ფორმატში და შემდეგ მისი სერიალიზაცია, როგორც ზემოთ აღინიშნა. ჩვენ ასევე დაგვჭირდება პროექტში კიდევ ერთი MMCM დამატება, რათა შეიქმნას 742.5MHz საათი სერიალიზაციისათვის.

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

მაგალითი წითელი არხისთვის:

TMDS_encoder_RED: TMDS_encoder

პორტის რუკა (clk148, red_channel_8bits, c_red, video_on, encoded_red_10bits);

Serialiser_RED: Serialiser10_1

პორტის რუკა (clk148, clk742, encoded_red_10bits, reset, red_serial_1bit);

TMDS_encoder- ის "c" შეყვანა არის "00" წითელი და მწვანე და "vsync & hsync" ლურჯისთვის (ეს არის DVI სპეციფიკაციის ნაწილი

ნაბიჯი 6: გამოსახულების ჩვენება ოპერატიული მეხსიერებიდან

გამოსახულების ჩვენება ოპერატიული მეხსიერებიდან
გამოსახულების ჩვენება ოპერატიული მეხსიერებიდან

HDMI კონტროლერის მიზანია დამუშავებული სურათების ჩვენება. ახლა, კონტროლერის დანერგვით და წასასვლელად, ჩვენ უნდა ვიფიქროთ ამ კონტროლერის მონაცემებით კვებაზე. იმის გათვალისწინებით, რომ სურათის გაფართოების ბევრი პროცესი ჩატარდება PS- ში (დამუშავების სისტემა = ARM პროცესორი) და შედეგად მიღებული სურათები განთავსდება DDR RAM- ში. ასე რომ, ჩვენ გვჭირდება გზა, რომ მივიღოთ მონაცემები RAM– დან HDMI კონტროლერამდე.

ამის მისაღწევად დაგჭირდებათ 3 IP:

1) VDMA (ვიდეო პირდაპირი მეხსიერების წვდომა)

2) VTC (ვიდეო დროის კონტროლერი)

3) ნაკადი ვიდეოდან (ამიერიდან მას S2VO დავარქმევთ)

S2VO რეალურად უზრუნველყოფს RGB 24BIT სიგნალს გამომავალზე და საჭირო HSYNC და VSYNC სიგნალებს. ასე რომ, ჩვენ შეგვიძლია HDMI კონტროლერის ის ნაწილი გამოვტოვოთ.

თქვენ უნდა დაამატოთ ეს IP თქვენს დიზაინს, დააკონფიგურიროთ ისინი და დაამყაროთ შესაბამისი კავშირები.

დაბოლოს, თქვენ უნდა მიიღოთ რაღაც მსგავსი სქემატური ზემოთ.

ნაბიჯი 7: გამომავალი - SDK END

OUTPUTUT - SDK END
OUTPUTUT - SDK END

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

1) ფაილი -> ექსპორტი -> აპარატურის ექსპორტი -> შეამოწმეთ ჩართეთ Bitstream და დააჭირეთ OK

2) ფაილი -> დაიწყე SDK

SDK– ში შექმენით ახალი პროგრამის პროექტი.

3) ფაილი -> ახალი -> განაცხადის პროექტი

4) შეარჩიეთ თქვენი პროექტის სახელი და დააჭირეთ შემდეგი

5) შეარჩიეთ შაბლონი "გამარჯობა მსოფლიო" და დააჭირეთ ღილაკს დასრულება

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

ჩვენი დიზაინის შესამოწმებლად ჩვენ გამოვიყენებთ SDK აღდგენას (Xilinx ინსტრუმენტები -> ნაგავსაყრელი/აღდგენა) ფუნქციას, რომ სურათი ჩავდოთ DDR RAM მეხსიერებაში და გამოვაჩინოთ იგი ჩვენი HDMI კონტროლერის გამოყენებით. თქვენ შეგიძლიათ ჩატვირთოთ სურათი სადაც გსურთ (მეხსიერების დასაწყისში მცირე შეზღუდული ადგილების გარდა). ჩვენი მაგალითისთვის ჩვენ ავირჩიეთ მისამართი 16777216 და ფაილის ზომა 8294400 = 1920*1080*4 (4 არხი = RGB + ალფა).

Მუშაობს !

Გაგრძელება იქნება

გირჩევთ: