VHDLwhiz logotipas

VHDLwhiz UART bandymo sąsajos generatorius

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

Informacija apie produktą

Specifikacijos:

  • Produkto pavadinimas: VHDL registruoja UART testavimo sąsajos generatorių
  • Versija: 1.0.4
  • Data: 18 m. rugpjūčio 2024 d
  • Autorius: Jonas Julianas Jensenas
  • Produktas URL: Produkto nuoroda
  • Kontaktinis el. paštas: jonas@vhdlwhiz.com

Aprašymas

Šis produktas leidžia generuoti pasirinktines sąsajas FPGA registro reikšmių skaitymui ir rašymui naudojant UART. Sugeneruotas VHDL modulis ir Python scenarijus suteikia galimybę sąveikauti su įvairių tipų registrais jūsų FPGA projekte.

Reikalavimai

  • Python 3 vertėjas
  • pyserial paketas

protokolas

Gaminys naudoja duomenų kadravimo protokolą su keturiais valdymo simboliais:

  • Vardas: READ_REQ, Vertė: 0x0A – komanda iš pagrindinio kompiuterio į FPGA inicijuoja rašymo seką, kad visi registrai būtų išsiųsti atgal per UART
  • Vardas: START_RAŠYTI, Vertė: 0x0B – pažymi rašymo sekos pradžią bet kuria kryptimi
  • Vardas: END_WRITE, Vertė: 0x0C – pažymi rašymo sekos pabaigą bet kuria kryptimi
  • Vardas: BĖGTI, Vertė: 0x0D – pabėgimo simbolis, naudojamas pabėgti nuo valdymo žodžių

Produkto naudojimo instrukcijos

Scenarijų paleidimas

Norėdami naudoti produktą, įsitikinkite, kad turite įdiegtą Python 3 ir Pyserial paketą. Vykdykite scenarijus per Python 3 interpretatorių.

Pasirinktinių sąsajų generavimas

Naudokite gen_uart_regs.py scenarijų, kad sukurtumėte pasirinktines sąsajas FPGA registro reikšmėms skaityti ir rašyti. Generuodami išvestį galite nurodyti įvesties ir išvesties registrų sudėtį ir tipus files.

Bendravimas su registrais

Naudodami sugeneruotą VHDL modulį ir Python scenarijų, galite skaityti arba rašyti į bet kokį registrų skaičių savo FPGA projekte. Prieinami registrai gali turėti tokius tipus kaip std_logic, std_logic_vector, signed arba unsigned.

Licencija

  • MIT licencija apima šaltinio kodo autorių teisių reikalavimus ir naudojimo sąlygas. Žr. failą LICENSE.txt file Zip file dėl detalių.

Pakeitimų žurnalas

  • Šie pakeitimai susiję su projektu files, ir šis dokumentas atitinkamai atnaujinamas
Versija Pastabos
1.0.0 Pradinis išleidimas
1.0.1 Ištaisyta trūkstama „savęs“ nuorodos klaida importuojant kaip uart_regs.py kaip Python modulį. Nepavyko rašyti spausdinimas pakeistas į išimtį

vengti spausdinimo į konsolę, kai veikia kaip importuotas modulis.

1.0.2 Ištaisykite Vivado [Synth 8-248] klaidą, kai nėra išjungimo režimo taisyklių.
1.0.3 Pataisykite „Vivado Linter“ įspėjimą: registras įgalino

sinchroninis atstatymas

1.0.4 Ištaisykite kampinį didžiąją ir mažąją raidę, kai gaunate netinkamai suformuotą žodį, kurio paskutinis baitas yra pabėgimo simbolis. Kitas žodis taip pat būtų prarastas, nes grįždami į IDLE neišvalėme recv_data_prev_is_escape.

Gen_uart_regs.py scenarijus dabar leidžia tik unikalius regos pavadinimus.

Aprašymas

  • Šiame dokumente aprašoma toliau files ir aplankai:
  • gen_uart_regs.py
  • genered/uart_regs.vhd
  • generated/uart_regs.py
  • genered/instantiation_template.vho
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • demo/lattice_icestick/
  • demo/xilinx_arty_a7_35/
  • demo/xilinx_arty_s7_50/
  • Gen_uart_regs.py scenarijus ir palaikantis VHDL files šiame projekte leidžia generuoti pasirinktines sąsajas įvairių tipų ir pločių FPGA registrų reikšmių skaitymui ir rašymui naudojant UART.
  • Galite naudoti sugeneruotą VHDL modulį ir Python scenarijų, norėdami skaityti arba rašyti į bet kokį registrų skaičių savo dizaine. UART prieinamų registrų tipai gali būti std_logic, std_logic_vector, signed arba unsigned.
  • Generuodami išvestį galite nuspręsti dėl tikslios įvesties ir išvesties registrų sudėties ir tipų files naudojant gen_uart_regs.py scenarijų.
  • Python scenarijai buvo sukurti iš dalies naudojant ChatGPT dirbtinio intelekto įrankį, o VHDL kodas yra rankų darbo.

Reikalavimai

  • Šio projekto scenarijai turi būti vykdomi per Python 3 interpretatorių ir turi būti įdiegtas Pyserial paketas.
  • Galite įdiegti pyserial per Pip naudodami šią komandą: pip install pyserial

protokolas

  • VHDL files ir Python scenarijus naudoja duomenų formavimo protokolą su keturiais valdikliais
Vardas Vertė komentuoti
READ_REQ 0x0A Pagrindinio kompiuterio komanda FPGA, kad būtų pradėtas rašymas

seka siųsti visus registrus atgal per UART

START_RAŠYTI 0x0B Žymi rašymo sekos pradžią bet kuriame iš jų

kryptimi

END_WRITE 0x0C Pažymi rašymo sekos pabaigą bet kuria kryptimi
PAbėgimas 0x0D Escape simbolis, naudojamas bet kuriam iš valdymo žodžių, įskaitant patį ESCAPE simbolį, panaikinti, kai jie rodomi kaip duomenys tarp START_WRITE ir END_WRITE žymeklių.

Bet koks READ_REQ baitas, siunčiamas į FPGA, yra nurodymas siųsti visus UART prieinamus registrus (įvestis ir išvestis) atgal į pagrindinį kompiuterį per UART. Šią komandą paprastai išduoda tik scenarijus uart_regs.py.
Gavęs šią komandą, FPGA atsakys nusiųsdamas visų registrų turinį atgal į pagrindinį kompiuterį. Pirma, įvesties signalai, tada išvesties signalai. Jei jų ilgiai nesudaro 8 bitų kartotinio, paskutinio baito apatiniai bitai bus užpildyti nuliais.
Rašymo seka visada prasideda START_WRITE baitu ir baigiasi END_WRITE baitu. Bet kokie baitai tarp jų yra laikomi duomenų baitais. Jei bet kurie duomenų baitai turi tokią pačią reikšmę kaip valdymo simbolis, duomenų baitas turi būti pakeistas. Tai reiškia, kad prieš duomenų baitą siunčiamas papildomas ESCAPE simbolis, nurodantis, kad tai iš tikrųjų yra duomenys.
Jei baitų sraute bet kurioje vietoje atkeliauja START_WRITE be atskyrimo, tai laikoma rašymo sekos pradžia. Modulis uart_regs_backend naudoja šią informaciją pakartotinai sinchronizuoti, jei ryšys nutrūktų.

gen_uart_regs.py

  • Tai yra scenarijus, nuo kurio turite pradėti, kad sukurtumėte sąsają. Žemiau yra pagalbos meniu, kurį galite gauti paleisdami: python gen_uart_regs.py -h, ekrano kopijaVHDLwhiz-UART-Test-Interface-Generator-1 pav
  • Norėdami sukurti tinkintą sąsają, turite paleisti scenarijų su kiekvienu norimu UART valdomu registru, nurodytu kaip argumentai. Galimi tipai yra std_logic, std_logic_vector, unsigned ir signed.
  • Įjungtas numatytasis režimas (kryptis), o numatytasis tipas yra std_logic_vector, nebent registro ilgis: 1. Tada pagal nutylėjimą jis bus std_logic.
  • Taigi, jei norite sukurti std_logic įvesties signalą, galite naudoti bet kurį iš šių argumentų:
  • mano_sl=1
  • my_sl=1:in
  • my_sl=1:in:std_logic
  • Dėl visų pirmiau minėtų variantų scenarijus generuos šį UART prieinamą signalą:VHDLwhiz-UART-Test-Interface-Generator-2 pav
  • Paleiskite scenarijų su argumentais, kad sukurtume sąsają su keliais skirtingų krypčių, ilgių ir tipų registraisVHDLwhiz-UART-Test-Interface-Generator-3 pav

Sukurta files

  • Sėkmingai paleidus gen_uart_regs.py scenarijų, bus sukurtas išvesties aplankas, pavadintas sugeneruotas trimis files išvardytos žemiau. Jei jie jau egzistuoja, jie bus perrašyti.
  • genered/uart_regs.vhd
  • generated/uart_regs.py
  • genered/instantiation_template.vho
  • uart_regs.vhd
  • Tai yra pasirinktinis sąsajos modulis, sukurtas scenarijaus. Turite jį sukurti savo dizaine, kur jis gali pasiekti registrus, kuriuos norite valdyti naudodami UART.
  • Viskas virš skilties „– UART prieinami registrai“ bus identiški kiekvienam uart_regs moduliui, o prievado signalų sudėtis žemiau šios eilutės priklauso nuo generatoriaus scenarijui pateiktų argumentų.
  • Toliau pateiktame sąraše rodomas modulio uart_regs objektas, gaunamas iš generavimo komandos examprodoma sekcijoje gen_uart_regs.pyVHDLwhiz-UART-Test-Interface-Generator-4 pav
  • Jums nereikia sinchronizuoti uart_rx signalo, nes tai tvarkoma uart_rx. modulis.
  • Kai modulis gauna skaitymo užklausą, jis užfiksuos visų įvesties ir išvesties signalų reikšmes per esamą laikrodžio ciklą. Tada momentinė nuotrauka siunčiama pagrindiniam kompiuteriui per UART.
  • Kai įvyksta rašymas, visi išvesties registrai atnaujinami naujomis reikšmėmis per tą patį laikrodžio ciklą. Atskirai išvesties signalo verčių keisti neįmanoma.
  • Tačiau scenarijus uart_regs.py leidžia vartotojui atnaujinti tik pasirinktas išvestis, pirmiausia nuskaitant dabartines visų registrų reikšmes. Tada jis įrašo visas reikšmes, įskaitant atnaujintas.
  • uart_regs.py
  • Sugeneruota/uart_regs.py file generuojamas kartu su uart_regs VHDL moduliu ir yra tinkinto registro informacija antraštėje file. Naudodami šį scenarijų galite lengvai skaityti iš savo pasirinktinių registrų arba į juos rašyti.

Pagalbos meniu

  • Norėdami atspausdinti pagalbos meniu, įveskite python uart_regs.py -h:VHDLwhiz-UART-Test-Interface-Generator-5 pav

UART prievado nustatymas

  • Scenarijus turi parinkčių nustatyti UART prievadą naudojant -c jungiklį. Tai veikia „Windows“ ir „Linux“. Nustatykite jį į vieną iš galimų prievadų, išvardytų pagalbos meniu. Norėdami nustatyti numatytąjį prievadą, taip pat galite redaguoti UART_PORT kintamąjį uart_regs.py scenarijuje.

Sąrašų registrai

  • Informaciją apie registro susiejimą į scenarijaus uart_regs.py antraštę įdeda scenarijus gen_uart_regs.py. Galite išvardyti galimus registrus naudodami jungiklį -l, kaip parodyta toliau. Tai yra vietinė komanda ir nesusijusi su tiksliniu FPGAVHDLwhiz-UART-Test-Interface-Generator-6 pav

Rašymas į registrus

  • Galite rašyti į bet kurį išėjimo režimo registrą naudodami jungiklį -w. Pateikite registro pavadinimą, po kurio yra „=“, ir vertę, pateiktą kaip dvejetainę, šešioliktainę arba dešimtainę reikšmę, kaip parodyta toliau.VHDLwhiz-UART-Test-Interface-Generator-7 pav
  • Atminkite, kad VHDL įgyvendinimas reikalauja, kad scenarijus vienu metu parašytų visus išvesties registrus. Todėl, jei nenurodysite viso išvesties registrų rinkinio, scenarijus pirmiausia nuskaitys iš tikslinio FPGA ir tada naudos tas reikšmes trūkstamoms. Rezultatas bus toks, kad pasikeis tik nurodyti registrai
  • Kai rašote, visi nurodyti registrai pasikeis per tą patį laikrodžio ciklą, o ne iškart, kai jie bus gauti per UART.

Skaitymo registrai

  • Norėdami perskaityti visas registro reikšmes, naudokite jungiklį -r, kaip parodyta toliau. Geltona spalva pažymėtos reikšmės yra tos, kurias pakeitėme anksčiau rašydami pvzampleVHDLwhiz-UART-Test-Interface-Generator-8 pav
  • Kiekvienas skaitymas rodo momentinį visų įvesties ir išvesties registrų vaizdą. Jie visi yra sampveda per tą patį laikrodžio ciklą

Derinimas

Jei reikia derinti ryšio protokolą, naudokite jungiklį -d su bet kuriuo iš kitų jungiklių. Tada scenarijus išspausdins visus išsiųstus ir gautus baitus ir tag juos, jei jie yra valdymo simboliai, kaip parodyta toliau.VHDLwhiz-UART-Test-Interface-Generator-9 pav

Sąsajos naudojimas kituose Python scenarijuose

  • Scenarijuje uart_regs.py yra UartRegs klasė, kurią galite lengvai naudoti kaip ryšio sąsają kituose tinkintuose Python scenarijuose. Tiesiog importuokite klasę, sukurkite jos objektą ir pradėkite naudoti metodus, kaip parodyta toliau.VHDLwhiz-UART-Test-Interface-Generator-10 pav
  • Norėdami sužinoti metodą ir aprašymus bei grąžinamų reikšmių tipus, žr. dokumentų eilutes Python kode.

instantiation_template.vho

  • Jūsų patogumui paleidimo šablonas generuojamas kartu su moduliu uart_regs. Norėdami sutaupyti kodavimo laiko, galite nukopijuoti modulio egzistavimo ir signalo deklaracijas į savo dizainą.VHDLwhiz-UART-Test-Interface-Generator-11 pavVHDLwhiz-UART-Test-Interface-Generator-12 pav

Statinis RTL files

  • Turite įtraukti toliau nurodytus dalykus files jūsų VHDL projekte, kad jie būtų sukompiliuoti į tą pačią biblioteką kaip ir modulis uart_regs:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Modulis uart_regs_backend įgyvendina baigtinių būsenų mašinas, kurios įjungia ir išjungia registro duomenis. Jis naudoja uart_rx ir uart_tx modulius UART ryšiui su pagrindiniu kompiuteriu tvarkyti.

Demo projektai

  • „Zip“ yra trys demonstraciniai projektai file. Jie leidžia valdyti skirtingų plokščių periferinius įrenginius ir kelis didesnius vidinius registrus.
  • Demonstraciniuose aplankuose yra iš anksto sugeneruoti uart_regs.vhd ir uart_regs.py filesukurtas specialiai tiems dizainams.

Grotelės iCEstick

  • Demo/icecube2_icestick aplanke yra registro prieigos demonstracinė versija, skirta Lattice iCEstick FPGA plokštėms.
  • Norėdami paleisti diegimo procesą, atidarykite demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file Lattice iCEcube2 projektavimo programinėje įrangoje.
  • Įkėlę projektą į iCEcube2 GUI, spustelėkite Įrankiai → Vykdyti viską, kad sukurtumėte programavimo taškinę schemą file.
  • Norėdami sukonfigūruoti FPGA su sugeneruota taškine schema, galite naudoti atskirą įrankį Lattice Diamond Programmer file. Kai atidaromas Diamond Programmer, pasveikinimo dialogo lange spustelėkite Atidaryti esamą programuotojo projektą.
  • Pasirinkite projektą file raskite ZIP faile: demo/lattice_icestick/diamond_programmer_project.xcf ir spustelėkite Gerai.VHDLwhiz-UART-Test-Interface-Generator-13 pav
  • Kai projektas bus įkeltas, spustelėkite tris taškus File Pavadinimo stulpelis, kaip parodyta aukščiau. Naršykite, kad pasirinktumėte taškinę schemą file kurį sukūrėte iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Galiausiai, kai iCEstick plokštė yra prijungta prie kompiuterio USB prievado, pasirinkite Dizainas → Programa, kad užprogramuotumėte SPI blykstę ir sukonfigūruotumėte FPGA.
  • Dabar galite pradėti skaityti ir rašyti registrus naudodami demo/lattice_icestick/uart_regs.py scenarijų, kaip aprašyta uart_regs.py skyriuje.

Xilinx Digilent Arty A7-35T

  • Artix-7 35T Arty FPGA vertinimo rinkinio demonstracinę versiją rasite aplanke demo/arty_a7_35.
  • Atidarykite „Vivado“ ir eikite į ištrauktą files naudojant Tcl konsolę, esančią GUI sąsajos apačioje. Įveskite šią komandą, kad patektumėte į demonstracinio projekto aplanką:
  • cd /demo/arty_a7_35/vivado_proj/
  • Vykdykite create_vivado_proj.tcl Tcl scenarijų, kad iš naujo sukurtumėte Vivado projektą:
  • šaltinis ./create_vivado_proj.tcl
  • Šoninėje juostoje spustelėkite Generuoti bitų srautą, kad atliktumėte visus diegimo veiksmus ir sugeneruotumėte programavimo bitų srautą file.
  • Galiausiai spustelėkite Open Hardware Manager ir programuokite FPGA per GUI.
  • Dabar galite skaityti ir rašyti registrus naudodami demo/arty_a7_35/uart_regs.py scenarijų, kaip aprašyta uart_regs.py skyriuje.

Xilinx Digilent Arty S7-50

  • Arty S7: Spartan-7 FPGA kūrimo plokštės demonstracinę versiją galite rasti aplanke demo/arty_s7_50.
  • Atidarykite „Vivado“ ir eikite į ištrauktą files naudojant Tcl konsolę, esančią GUI sąsajos apačioje. Įveskite šią komandą, kad patektumėte į demonstracinio projekto aplanką:
  • cd /demo/arty_s7_50/vivado_proj/
  • Vykdykite create_vivado_proj.tcl Tcl scenarijų, kad iš naujo sukurtumėte Vivado projektą:
  • šaltinis ./create_vivado_proj.tcl
  • Šoninėje juostoje spustelėkite Generuoti bitų srautą, kad atliktumėte visus diegimo veiksmus ir sugeneruotumėte programavimo bitų srautą file.
  • Galiausiai spustelėkite Open Hardware Manager ir programuokite FPGA per GUI.
  • Dabar galite pradėti skaityti ir rašyti registrus naudodami demo/arty_s7_50/uart_regs.py scenarijų, kaip aprašyta uart_regs.py skyriuje.

Įgyvendinimas

  • Konkrečių įgyvendinimo reikalavimų nėra.

Apribojimai

  • Šiam dizainui nereikia jokių specialių laiko apribojimų, nes UART sąsaja yra lėta ir traktuojama kaip asinchroninė sąsaja.
  • uart_rx įvestis į uart_regs modulį yra sinchronizuojama uart_rx modulyje. Taigi, jo nereikia sinchronizuoti aukščiausio lygio modulyje.

Žinomos problemos

  • Gali tekti iš naujo nustatyti modulį, kad jį būtų galima naudoti, atsižvelgiant į tai, ar jūsų FPGA architektūra palaiko numatytąsias registro reikšmes.

Daugiau informacijos

DUK

K: Koks yra UART testavimo sąsajos generatoriaus tikslas?

A: UART testavimo sąsajos generatorius leidžia sukurti pasirinktines sąsajas, skirtas sąveikauti su FPGA registro reikšmėmis naudojant UART ryšį.

Kl .: Kaip įdiegti Pyserial paketą?

A: Galite įdiegti Pyserial per Pip naudodami komandą: pip install pyserial

Dokumentai / Ištekliai

VHDLwhiz UART bandymo sąsajos generatorius [pdf] Naudotojo vadovas
UART bandymo sąsajos generatorius, bandymo sąsajos generatorius, sąsajos generatorius, generatorius

Nuorodos

Palikite komentarą

Jūsų el. pašto adresas nebus skelbiamas. Privalomi laukai pažymėti *