Мазмұны:

WIDI - Zybo (Zynq Development Board) көмегімен сымсыз HDMI: 9 қадам (суреттермен)
WIDI - Zybo (Zynq Development Board) көмегімен сымсыз HDMI: 9 қадам (суреттермен)

Бейне: WIDI - Zybo (Zynq Development Board) көмегімен сымсыз HDMI: 9 қадам (суреттермен)

Бейне: WIDI - Zybo (Zynq Development Board) көмегімен сымсыз HDMI: 9 қадам (суреттермен)
Бейне: Zybo Z7 Introduction 2024, Шілде
Anonim
WIDI - Zybo көмегімен сымсыз HDMI (Zynq Development Board)
WIDI - Zybo көмегімен сымсыз HDMI (Zynq Development Board)
WIDI - Zybo көмегімен сымсыз HDMI (Zynq Development Board)
WIDI - Zybo көмегімен сымсыз HDMI (Zynq Development Board)

Сіз теледидарды компьютерге немесе ноутбукке сыртқы монитор ретінде қосқыңыз келетінін армандадыңыз ба, бірақ бұл сымсыз сымдардың болуын қаламадыңыз ба? Олай болса, бұл оқулық сізге арналған! Бұл мақсатқа қол жеткізетін кейбір өнімдер бар болса да, DIY жобасы әлдеқайда қанағаттанарлық және ықтимал арзан.

Бұл тұжырымдама chromecast сияқты өнімдерден ерекшеленеді, себебі ол ағынды құрылғы емес, мониторға қосылатын HDMI сымының орнын алуға арналған.

Біздің жоба Калифорния Мемлекеттік Политехникалық Университетінде, Сан -Луис Обисподағы нақты уақыттағы операциялық жүйелер курсының соңғы жобасы ретінде құрылды.

Жобаның мақсаты-HDMI қабылдағыш құрылғыға (жұмыс үстелі мониторы, проектор, теледидар және т.

Бір Digilent Zybo HDMI арқылы таратушы құрылғыға, екіншісі HDMI арқылы қабылдағыш құрылғыға қосылады.

Сымсыз байланыс үйдегі маршрутизатор немесе басқа құрылғы арқылы жіберілместен, таратқыш пен қабылдағышқа арналған сымсыз жергілікті желінің көмегімен жүзеге асады. Бұл жобада қолданылатын сымсыз модуль tplink wr802n nanorouter болып табылады, олардың бірі желі құру үшін кіру нүктесі, екіншісі желіге қосылу үшін клиент ретінде жұмыс істейді. Әрбір наноқабылдағыш Ethernet кабелі арқылы Zybo тақтасына қосылады. Бұл маршрутизаторларға қосылған кезде, құрылғылар бір Ethernet кабелімен байланысқан сияқты TCP арқылы байланысады (байланыс орнату үшін қажет жалғыз конфигурация клиенттің IP -адресі).

Жобаның мақсаты 60 Гц жиіліктегі 1080x720 бейне ағынын жеңілдету болғанымен, сымсыз желідегі өткізу қабілеттілігінің шектеулеріне және жіберуге қажетті деректерді азайту үшін нақты уақыттағы бейне қысудың болмауына байланысты бұған қол жеткізу мүмкін болмады. Оның орнына, бұл жоба осы мақсатқа жету үшін болашақ дамудың негізі болып табылады, себебі ол HDMI деректерін мақсатты түрде дұрыс тарату үшін кадр жиілігінің шектеулерін қатаң шектеді.

Жобаға қойылатын талаптар:

2x Digilent Zybo дамыту тақтасы (кем дегенде бір HDMI порты болуы керек)

2x HDMI кабельдері

2x microusb кабельдері (Zybo -ны компьютерге қосу үшін)

2x tplink wr802n nanorouters (оның ішінде 2x microusb және розеткадағы қуат адаптерлері)

2x Ethernet кабельдері

*** Ескерту: Бұл оқулық Vivado дизайн жиынтығымен танысады және жаңа жоба мен блок дизайнын жасау тәжірибесін білдіреді. ***

1 -қадам: таратқыш үшін Zynq бағдарламаланатын логикасын теңшеңіз

Таратқыш үшін Zynq бағдарламаланатын логикасын теңшеңіз
Таратқыш үшін Zynq бағдарламаланатын логикасын теңшеңіз
Таратқыш үшін Zynq бағдарламаланатын логикасын теңшеңіз
Таратқыш үшін Zynq бағдарламаланатын логикасын теңшеңіз
Таратқыш үшін Zynq бағдарламаланатын логикасын теңшеңіз
Таратқыш үшін Zynq бағдарламаланатын логикасын теңшеңіз

Біздің таратқыштың бағдарламаланатын логикасын дамытудағы көзқарасымыз-компьютерден hdmi-hdmi-ге өтуді мониторға екі Video Direct Memory Access (VDMA) блоктарын қолдана отырып, біреуі жазуға және екіншісі оқуға арналған.

Екеуі де бос жұмыс, 3 кадрлық буферлік режим үшін таңдалады (0-1-2). Бейне ядросы секундына 60 кадрға оңтайландырылғандықтан, бұл VDMA әрбір 16,67 мс сайын келесі ретпен жазады немесе оқиды дегенді білдіреді: 0, 1, 2, 0, 1, 2, 0, 1, 2. Әр кадр үшін DDR жадының орналасуы екі VDMA үшін әр түрлі, себебі олар енді бір -бірімен синхрондалмайды. Оның орнына 60 Гц үшін конфигурацияланған аппараттық таймер (TTC1) екі жад орны арасындағы деректердің қозғалысын синхрондау үшін қолданылады.

Жоғарыдағы суретте 3 кадр, олардың өлшемдері мен әрқайсысы қажет жад көлемі көрсетілген (кадрдың оң жағында). Егер біз VDMA жазуды осы жад орындарына тағайындайтын болсақ, онда біз 0x0B000000 -ден басталатын VDMA жадының оқылатын орындарын осы жиыннан тыс тағайындай аламыз. Әр кадр 1280*720 пиксельден тұрады және әр пиксель 8 бит қызыл, жасыл және көк түстен тұрады, барлығы 24 бит. Бұл кадр 1280*720*3 байттан (2,76 МБ) тұрады дегенді білдіреді.

VDMA драйверінің қондырғысында сипатталған IRQ таймерінің ішінде VMDA жадының екі орны арасындағы деректерді көшіру өңделеді. VDMA ағымдағы кадрға жазылатын немесе одан оқылатын көрсеткішті көрсетеді. Рамка бағдарламалық қамтамасыз етуде түрлендірілген белгілі бір сұр кодпен ұсынылған. 3 кадрлық буферлік конфигурацияның сұр кодының анықтамаларын AXI VDMA өнім нұсқаулығынан С қосымшасынан табуға болады.

Бұл бізге жазылған кадрларды оқымай -ақ жадқа жазылған мазмұнды көшіруге мүмкіндік береді.

*** Деректерді сымсыз желі арқылы жіберу кезінде оқылатын VDMA қолданылмайтынын ескеріңіз. Оның мақсаты - VMDA жазбасынан жадты көшірудің дұрыс жұмысын тексеру. VMDA оқуды өшіру керек.

Міне, таратқыштың конструкторлық блогын құру қадамдары:

  1. Жаңа жоба жасаған кезде жобаға чип немесе тақта тағайындаған дұрыс. Бұл сілтеме Vivado каталогына жаңа тақта файлдарын қалай қосу керектігін және дұрыс тақтаны жобаңызбен байланыстыруды сипаттайды. Бұл процессорлық жүйе блогын қосқанда және аппараттық құралдан бағдарламалық жасақтамаға (SDK жағында) ауысқанда пайдалы болады.
  2. Келесі блоктарды қосыңыз:

    • dvi2rgb
    • Axi4-ағынына бейне
    • Уақыт реттегіші
    • axi4-ағынды шығару
    • 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 қосылғанына көз жеткізіңіз, содан кейін қолданбалы процессор блогында Timer0 қосыңыз.
    • PL Configuration PL Fabric Clocks ішінде FCLK_CLK0 қосыңыз және 100 МГц -ге орнатыңыз.
    • OK түймесін басыңыз
  6. «Қосылымды автоматтандыруды іске қосу» түймесін баспас бұрын, бейне блоктарды жоғарыдағы TX блогының дизайнындағы суретте көрсетілгендей жалғауды ұмытпаңыз. Сіз тұрақты мәнді VDD деп өзгерткіңіз келеді және мәнді 1 -ге орнатқыңыз келеді. Бейне блоктарды сәйкесінше қосыңыз.
  7. HDMI TMDS сағаты мен деректер түйреуіштерін rgb2dvi және dvi2rgb блоктарына сыртқы етіп жасаңыз.
  8. Ыстық штепсельді анықтау сигналы (HPD) үшін кіріс және шығыс портын жасаңыз және оларды бір -бірімен байланыстырыңыз, олар шектеулер файлында анықталған
  9. Пикселдік сағат шектеулер файлында жасалған TMDS_Clk_p -ден қалпына келтіріледі. Бұл 720p ажыратымдылығына сәйкес 74,25 МГц болады. Пиксель сағатын (dvi2rgb блогынан) келесі түйреуіштерге қосу маңызды:

    • vid_io_in_clk (axi ағынды блокқа вид)
    • vid_io_out_clk (axi ағыны блоктан шығару үшін)
    • clk (уақытты реттегіш)
    • PixelClk (rgb2dvi)
  10. *** Ескертпе: Қазіргі уақытта пиксельді қалпына келтіруді іске қосу үшін HDMI rx және tx қосқыштары белсенді көзге/раковинаға қосылуы керек. Мұны шешудің бір жолы - бейне rx және tx блоктарын әр түрлі сағаттық домендерге бөлу (басқаша айтқанда, tx блогына беру үшін 74,25 МГц жаңа сағатты генерациялау). ***
  11. Әрі қарай, сағат шеберін 100 МГц кіріс (жаһандық буферлік көз) және 50 МГц жиіліктегі 3 шығыс сағаты (AXI-Lite сағаты), 150 МГц (AXI4-Ағын сағаты), 200 МГц (dvi2rgb RefClk түйреуіші) болатындай етіп орнатыңыз.
  12. FCLK_CLK0 өңдеу жүйесінің түйреуішін сағат шеберінің кірісіне қосыңыз
  13. Осы кезде дизайн терезесінің жоғарғы жағындағы жасыл жолақтағы «Байланысты автоматтандыруды іске қосу» түймесін басыңыз. Мұны бір блок үшін бір уақытта жасап, жоғарыдағы TX блогының дизайн суретін ұстанған дұрыс.
  14. Құрал AXI-Lite шинасын (VDMA және GPIO) пайдаланатын блоктар үшін негізгі/қосалқы байланыс қызметін атқаратын AXI Interconnect қосуға тырысады.
  15. Ол VDMA (Stream to Memory Map және керісінше) пайдаланатын AXI4-Stream және High Performance процессорлық интерфейстерінің негізгі/қосалқы байланысының рөлін атқаратын AXI SmartConnect қосады.
  16. Бұл құрал сонымен қатар процессорлық жүйені қалпына келтіруді қосады. Бұл тек VDMA, GPIO және процессорға қатысты блоктарға қосылғанын тексеріңіз. Оны кез келген бейне блоктарға қоспаңыз (мысалы, dvi2rgb, уақыт реттегіші, трансляция үшін видео және т.
  17. Байланысты автоматтандыру аяқталғаннан кейін, қосылымдар TX блогының дизайн кескініне сәйкес келетінін тексеріңіз. Сіз айтылмаған жүйенің қосымша ILA блогын байқайсыз. Бұл тек отладкаға арналған және әзірге қажет емес. Ол 150M процессорды қалпына келтіруді қолданады, сондықтан бұл қажет емес. Кез келген жерде автобустарда кішкентай жасыл «қателерді» көресіз, бұл ILA арқасында және елемеуге болады.
  18. Соңғы қадам - жобаның көздер ағашындағы блок дизайнын тінтуірдің оң жақ түймешігімен нұқу және «HDL орауышын жасау» тармағын таңдау. Егер сіз орауышқа логика қосуды жоспарласаңыз, бұл таңдалған сайын оның үстіне қайта жазылады.
  19. SDK жағында толығырақ ақпарат алу үшін VDMA драйверін орнату бөлімін қараңыз.

Сағаттар мен қалпына келтіру

Мен кез келген бағдарламаланатын логикалық жобаның ең маңызды аспектілері - сағаттық домендерді мұқият қарау және сигналдарды қалпына келтіру екенін білдім. Егер олар дұрыс конфигурацияланған болса, онда сіздің дизайнды іске қосу үшін жақсы мүмкіндік бар.

Пиксель сағаты мен уақыты бекітілген

Белгілі бір сигналдардың белсенді екенін тексеру үшін бұл сигналдарды жарықдиодты шамдарға (сағаттарға, ысыруларға, құлыптарға және т.б.) байлап қойған дұрыс. Мен таратқыш тақтасында қадағалауға пайдалы деп тапқан екі сигнал-бұл пиксель сағаты және AXI4-Stream to video out блогындағы «құлыптаулы» сигнал, бұл сізге бейнебеттің уақытты реттегішпен және бейне көзімен синхрондалғанын көрсетеді. деректер. Мен қалпына келтіру ретінде dvi2rgb блогындағы PixelClkLocked сигналын пайдаланып пиксель сағатын бақылайтын дизайн блогының орауышына логиканы қостым. Мен мұнда hdmi_wrapper.v ретінде файлды тіркедім. Шектеулер файлы да осында бекітілген.

2 -қадам: Receiver үшін 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 МГц (пикселдік сағат)
    • clk_out2: 150 МГц (ағын сағаты)
    • clk_out3: 50 МГц (axi-lite сағат)
  5. Бейне блоктарды RX блогының дизайн кескінінде көрсетілгендей қосыңыз.
  6. Содан кейін қосылымды автоматтандыруды іске қосыңыз, ол AXI Interconnect, AXI SmartConnect және System Reset блоктарын қосады және сәйкес қосылуларды жасауға тырысады. Қажет емес қосылымдарды жасамайтынына көз жеткізу үшін осында баяу өтіңіз.
  7. HDMI TMDS сағаты мен деректер түйреуішін rgb2dvi блогында сыртқы етіп жасаңыз
  8. Бұл конструкцияда ыстық штепсель сигналының қажеті жоқ.

3 -қадам: VDMA драйверін орнату

VDMA драйверін орнату
VDMA драйверін орнату

AXI-Lite интерфейсі арқылы конфигурацияланған әр түрлі блоктарды баптау BSP-ке сілтеме ретінде енгізілген демо-жобаларды қолдану арқылы жақсы орындалады. Дизайнерлік аппараттық құралдарды экспорттағаннан және Vivadodan SDK іске қосқаннан кейін, BSP параметрлері терезесінде lwip202 кітапханасын қосатын жаңа тақтаны қолдау пакетін қосқыңыз келеді. System.mss файлдық файлын BSP -ден ашыңыз, сонда сіз блоктық дизайндағы перифериялық драйверлерді көресіз. «Мысалдарды импорттау» опциясы осы қосымша құрылғыларды қолданатын демо -жобаларды импорттауға мүмкіндік береді, осылайша оларды қол жетімді Xilinx драйверлері арқылы бағдарламалық қамтамасыз етуде қалай конфигурациялау керектігін көрсетеді (қоса берілген суретті қараңыз).

Бұл VDMA, Timer & Interrupt және GPIO конфигурациясында қолданылатын әдіс. Мұнда жіберуге де, алуға да бастапқы код енгізілген. Айырмашылықтар тек қана main.c. сайтында.

*** ЕСКЕРТПЕ: Бұл оқулықты жазу кезінде жүйе толық жұмыс істемейтіндіктен, бұл бөлімдегі бастапқы код сымсыз желі кодын қамтымайды. Бейне өзегін жіберу/қабылдау жобаларын желілік жіберу/қабылдау жобаларымен біріктіру нәтижесінде бірнеше қателерді жою қажет. Сондықтан бұл оқулықта оларды бөлек қарастырады.

TX Interrupt Handler функциясы (IRQHandler)

Бұл функция GPIO блоктары арқылы VDMA оқу мен жазумен қамтамасыз етілген сұр кодтарды оқиды. Сұр кодтар ондыққа ауыстырылады және ағымдағы кадрдың кадрлық жадының орнын таңдау үшін қолданылады. Көшірілген кадр - бұл VDMA жазған кадрға дейінгі алдыңғы кадр (мысалы, егер VDMA 2 кадрға жазылса, біз 1 кадрды көшіреміз, 0 кадрға жазсақ, біз 2 кадрдан орап оқимыз).

Функция кадр жиілігін 60 Гц емес, 10 Гц -ке дейін төмендету үшін әрбір 6 кадрды ғана түсіреді. Желінің жоғарғы шегі 300 Мбит / с. Секундына 10 кадрда 221,2 Мбит / с өткізу қабілеттілігі қажет.

Бұл функциядағы екі жолға түсініктеме беру/түсініктеме беру пайдаланушыға отқа түсіру/тестілеу мақсатында HDMI passthru режиміне ауысуға мүмкіндік береді (код тиісті жолдарды көрсету үшін түсіндіріледі). Ол қазіргі уақытта кадрды Ethernet коды пайдаланатын жад орнына көшіреді.

RX Interrupt Handler функциясы (IRQHandler)

Бұл функция TX функциясына өте ұқсас, бірақ ол кіріс деректерді жазу үшін Ethernet қолданатын FIFO 2 буферінен көшіріледі. Ethernet коды FIFO -ға қандай кадр жазылатынын көрсетеді, ал деректер қарама -қарсы кадрдан көшіріледі. Деректер жыртылмау үшін VDMA оқитын кадрдың артындағы кадрға көшіріледі.

4 -қадам: Nanorouter желісін орнату

Nanorouter желісін орнату
Nanorouter желісін орнату

TPlink nanorouter көмегімен желі құру үшін оларды жеке қосыңыз және құрылғылар үшін әдепкі Wi -Fi SSID желісіне қосылыңыз. Бұл құрылғы үшін конфигурация параметрлері туралы қосымша ақпаратты құрылғы пайдаланушы нұсқаулығынан табуға болады.

Құрылғылардың бірін кіру нүктесі ретінде орнатыңыз, бұл желі үшін негізгі байланыс ретінде әрекет етеді. Желіге атау беріңіз және атауды ескеріңіз және DHCP өшіріңіз (біз маршрутизатордың IP адрестерін динамикалық түрде конфигурациялауын қаламаймыз, біз тасымалдаушы мен қабылдағыш Zybo тақталары өздерінің IP мекенжайларын сәйкес келетін етіп орнатуын қалаймыз). Конфигурациядан кейін, құрылғы қайта жүктелетініне және осы желінің орнатылғанына көз жеткізіңіз.

Басқа құрылғыны клиент ретінде орнатыңыз және ол бірінші nanorouter көмегімен орнатылған SSID желіге қосылғанына көз жеткізіңіз. Тағы да, клиент үшін DHCP өшірілгеніне көз жеткізіңіз.

Клиент аяқтап, қайта жүктелгеннен кейін, ол nanorouter кіру нүктесіне қосылуы керек (егер олай болмаса, онда сіздің құрылғылардың біреуінің конфигурациясында мәселе болуы мүмкін). Сіз кіру нүктесіне қосылғаннан кейін клиенттегі жарықдиодты шам тұрақты болатынын байқайсыз.

Nanorouter кіру нүктесінің жарық диоды осы сәтте жыпылықтай беруі мүмкін, бұл жақсы! Жыпылықтайтын жарық оның басқа портқа Ethernet портынан қосылмағанын білдіреді, ал Zybo -ға конфигурацияланғаннан кейін жарық диоды тұрақты болып қалады, бұл желінің сәтті қосылуын көрсетеді.

Енді бізде nanorouter қондырғысы бар, бізде байланысуға мүмкіндік беретін сымсыз желі бар. Маңызды ескерту - біздің нанореуторларға арналған конфигурациялау әдісі (кіру нүктесі мен клиент ретінде) бізге Zybo тақтасынан қабылдаушы Zybo тақтасына екеуі де бір Ethernet сымымен байланысқандай байланыс жасауға мүмкіндік береді. Бұл біздің желіні орнатуды қиындатады, өйткені балама Zybo тақталарын серверге нақты қосылу үшін қосылу үшін конфигурациялауды қамтиды.

Екі құрылғы да теңшелгеннен кейін, наноқабылдағыштар конфигурацияланып, WIDI желісіне енгізуге дайын болады. Наноутерлер мен Zybo тақталары арасында нақты жұптасу жоқ, себебі не кіру нүктесі, не клиент не жіберу, не қабылдау құрылғысы үшін жұмыс істейді.

5 -қадам: Ethernet арқылы деректерді беру үшін Zynq өңдеу жүйесін орнату

Ethernet арқылы деректерді беру үшін Zynq өңдеу жүйесін орнату
Ethernet арқылы деректерді беру үшін Zynq өңдеу жүйесін орнату
Ethernet арқылы деректерді беру үшін Zynq өңдеу жүйесін орнату
Ethernet арқылы деректерді беру үшін Zynq өңдеу жүйесін орнату

HDMI деректерін бір Zybo тақтасынан екіншісіне беру үшін біз VDMA драйверімен бірге Ethernet протоколын енгізуіміз керек. Мұндағы біздің мақсат - өңдеу жүйесіндегі Ethernet перифериялық құрылғысы арқылы біздің желілік өткізу қабілеттілігімізге сәйкес келетін белгіленген жылдамдықта жеке бейне кадрларды жіберу. Біздің жоба үшін біз жалаң металл LwIP API ұсынған TCP қолдандық. Жобаның екі мүшесі де желілік утилиталармен салыстырмалы түрде тәжірибесіз болғандықтан, бұл таңдау TCP -мен байланысты салдар мен шектеулерді толық мойындамай жасалған. Бұл іске асырудағы басты проблема өткізу қабілеттілігінің шектеулігі және ол шын мәнінде деректердің үлкен көлемін бумен өңдеу үшін арналмаған. TCP ауыстырудың балама шешімдері мен осы жобаны жақсарту кейінірек талқыланатын болады.

LwIP көмегімен TCP қысқаша сипаттамасы: Деректер желі бойынша tcp_mss (TCP максималды сегмент өлшемі) пакеттерінде жіберіледі, ол әдетте 1460 байтты құрайды. Tcp_write -ге қоңырау шалу көрсеткішке сілтеме жасайтын кейбір деректерді алады және деректерді сақтауға және TCP операцияларының құрылымын қамтамасыз етуге pbufs (пакеттік буферлер) конфигурациялайды. Бір уақытта кезекке тұруға болатын деректердің максималды көлемі tcp_snd_buf (TCP жіберуші буферлік кеңістігі) ретінде орнатылады. Бұл параметр 16 биттік сан болғандықтан, біз 59695 байтты жіберу буферінің өлшемімен шектелеміз (жіберу буферінде кейбір қажетті толтырулар бар). Деректер кезекке қойылғаннан кейін, деректерді жіберуді бастау үшін tcp_output шақырылады. Деректердің келесі сегментін жібермес бұрын, барлық алдыңғы пакеттердің сәтті жіберілуі маңызды. Бұл процесс recv_callback функциясының көмегімен жүзеге асады, себебі бұл функция ресиверден растауды көргенде шақырылады.

Vivado SDK -тегі мысал жобаларды қолдану LwIP TCP жұмысын білуге өте пайдалы және жаңа жобаны бастаудың жақсы нүктесі болып табылады.

WiDi тарату құрылғысының процедурасы келесідей:

  1. LWIP драйверінің жалаң металл қоңырауларының көмегімен TCP желісін инициализациялаңыз.
  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 қоспағанда, барлық мәндер әдепкі болып табылады. Сонымен қатар, debug_options тобының BSP параметрлерін өзгерту арқылы егжей -тегжейлі отладтауға қол жеткізуге болатынын ескеріңіз.

6 -қадам: Ethernet арқылы деректерді қабылдау үшін Zynq өңдеу жүйесін орнату

Сымсыз қабылдағыш ретінде жұмыс істейтін 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 -қадам: жақсартудың балама идеялары

Жақсартудың балама идеялары
Жақсартудың балама идеялары

Бұл жоба үшін үлкен мәселе - Wi -Fi арқылы жіберу үшін қажетті деректер көлемі. Бұл күтілген еді, бірақ біз оның әсерін бағаламадық және бейне таспадан гөрі экрандағы кескіндердің жарылуына әкелді. Бұл жобаны жетілдірудің бірнеше жолы бар:

  • Нақты уақыттағы бейнені сығу. Кіріс бейне беру кадрын кадрға қысу желі арқылы жіберілетін деректердің көлемін едәуір азайтады. Ең дұрысы, бұл аппараттық құралмен жасалуы мүмкін (бұл оңай емес) немесе бағдарламалық қамтамасыз етуде қысу алгоритмін іске қосу үшін басқа ARM ядросын қолдану арқылы жасалуы мүмкін (бұл уақыттың жұмыс істеуін қамтамасыз ету үшін қосымша талдауды қажет етеді). Нақты уақыттағы Интернетте бейне сығымдаудың ашық бастапқы компоненттері бар, бірақ олардың көпшілігі IP.
  • Ethernet ағынын бағдарламалық қамтамасыз етуде емес, аппараттық құралдарда енгізу. Сегмент көлемінің шектеулі болуына байланысты таратқышта шығатын деректерді кезекке қою үшін бос орын болмағандықтан, қосымша шығындар көп болды. Деректерді беру үшін FIFO буферімен немесе DMA көмегімен AXI Ethernet IP пайдалану әлдеқайда тиімді процесс болып табылады. Бұл LwIP TCP қосымша багажын азайтады және деректердің көбірек ағынын қамтамасыз етеді.

9 -қадам: Қол жетімділік

Бұл WiDi жобасының өнімі пайдаланушы кез келген HDMI көзіне қосыла алатын, сосын HDMI мүмкіндігі бар дисплейге бейне арнаны қосатын толықтай біріктірілген, жинақы құрылғылар жұбы болуы керек. Құрылғыларда Zybo анықтамалық тақтасында табылған Zynq-7000 SoC болады және TP-Link нано-маршрутизаторларында табылған желілік жабдықтар болады. Ең дұрысы, пайдаланушы жіберу модулін мақсатты операциялық жүйенің дискретті орнынан басқара алады, бұл маңызды техникалық мүмкіндіктерді қажет етпейді.

Қауіпсіздік және байланыс

Құрылғыларда көліктік деңгей қауіпсіздігі (TLS) болуы керек және құпиялылық мақсатында автоматты түрде қосылу мүмкіндігі шектеулі. Дизайнерлердің мақсаты - сымсыз интерфейс арқылы дисплеймен байланысты сезімтал материалды қате таратпау үшін қолданушының атынан жасалған әдейі әрекет.

Қазіргі күй

Осы уақытқа дейін жобаның күйі әлі де жалғасуда. Ағымдағы соңғы пайдаланушы осы оқулықтан пайда көруі үшін, ол енгізілген жүйенің дизайны туралы күшті техникалық түсінікке ие болуы керек және бағдарламаланатын аппараттық құралдар мен ендірілген бағдарламалық жасақтамамен бірге жұмыс істеуі керек.

Бұл кезде желі арқылы жіберілетін деректер шифрланбайды және TCP/IP пакеттерінің шикізат берілуі болып саналады.

Бейне ядросы жобасы жіберуге де, қабылдауға да сәтті сыналды. Екінші жағынан, екі зибо тақта арасындағы сымсыз байланыс орнатылды және тестілік кадрлар туралы деректер сәтті жіберілді. Дегенмен, әрбір бейне негізгі жобасына желі кодын біріктіру және нақты бейне кадрлардың берілуін тексеру қажет.

Ұсынылған: