VHDLwhiz.com
Generator preskusnega vmesnika VHDL registrira UART – Uporabniški priročnik
Različica: 1.0.0
Datum: 1. september 2023
Avtor: Jonas Julian Jensen
Izdelek URL: https://vhdlwhiz.com/product/vhdl-registers-uart-test-interfacegenerator
Kontaktni e-poštni naslov: jonas@vhdlwhiz.com
Ta dokument opisuje uporabo generatorja preskusnega vmesnika UART podjetja VHDLwhiz za izdelavo modula VHDL po meri in skripta Python za branje in zapisovanje vrednosti registra FPGA.
Licenca
Licenca MIT pokriva zahteve glede avtorskih pravic in pogoje uporabe izvorne kode.
Glejte LICENSE.txt file v Zip file za podrobnosti.
Dnevnik sprememb
Te spremembe se nanašajo na projekt files, in ta dokument je ustrezno posodobljen.
Različica | Opombe |
1.0.0 | Začetna izdaja |
Opis
Ta dokument opisuje naslednje files in mape:
- gen_uart_regs.py
- generirano/uart_regs.vhd
- created/uart_regs.py
- generirano/instanciation_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/
The gen_uart_regs.py skript in podpira VHDL files v tem projektu vam omogočajo ustvarjanje vmesnikov po meri za branje in pisanje vrednosti registra FPGA različnih vrst in širin z uporabo UART.
Ustvarjeni modul VHDL in skript Python lahko uporabite za branje ali pisanje v poljubno število registrov v vašem dizajnu. UART dostopni registri so lahko tipov std_logic, std_logic_vector, signed ali unsigned.
Natančno sestavo vhodnih in izhodnih registrov ter vrste lahko določite pri generiranju izhoda files uporabo skripta gen_uart_regs.py.
Python skripte so delno ustvarjene s pomočjo orodja za umetno inteligenco ChatGPT, koda VHDL pa je izdelana ročno.
Zahteve
Skripte v tem projektu je treba izvajati prek tolmača Python 3 in namestiti mora biti paket Pyserial.
Pyserial lahko namestite prek Pipa s tem ukazom: pip install pyserial
Protokol
VHDL files in Python skript uporabljata protokol za uokvirjanje podatkov s štirimi kontrolnimi znaki:
Ime | Vrednost | Komentiraj |
PREBERITE ZAHTEVO | OxOA | Ukaz od gostitelja do FPGA za začetek zaporedja pisanja za pošiljanje vseh registrov nazaj prek UART |
START_PIŠI | Ox0B | Označuje začetek zaporedja pisanja v obe smeri |
END_WRITE | OxOC | Označuje konec zaporedja pisanja v obe smeri |
POBEŽI | OxOD | Ubežni znak, ki se uporablja za ubežne znake katere koli kontrolne besede, vključno s samim znakom ESCAPE, ko se pojavijo kot podatki med oznakama START_WRITE in END_WRITE. |
Vsak neubežni bajt READ_REQ, poslan FPGA, je navodilo za pošiljanje vseh njegovih UART dostopnih registrov (vhodov in izhodov) nazaj gostitelju prek UART. Ta ukaz običajno izda le skript uart_regs.py.
Po prejemu tega ukaza se FPGA odzove tako, da pošlje vsebino vseh registrov nazaj gostitelju. Najprej vhodni signali, nato izhodni signali. Če njihove dolžine niso večkratnik 8 bitov, bodo nižji biti zadnjega bajta dopolnjeni z ničlami.
Zaporedje pisanja se vedno začne z bajtom START_WRITE in konča z bajtom END_WRITE. Vsi bajti med temi se štejejo za podatkovne bajte. Če ima kateri koli podatkovni bajt enako vrednost kot kontrolni znak, je treba podatkovni bajt ubežati. To pomeni pošiljanje dodatnega znaka ESCAPE pred podatkovnim bajtom, ki nakazuje, da gre dejansko za podatke.
Če neubežni START_WRITE prispe kjerkoli v toku bajtov, se šteje za začetek zaporedja pisanja. Modul uart_regs_backend uporablja te informacije za ponovno sinhronizacijo v primeru, da komunikacija ne bo sinhronizirana.
To je skript, s katerim morate začeti ustvarjati vmesnik. Spodaj je posnetek zaslona menija pomoči, ki ga lahko dobite tako, da zaženete: python gen_uart_regs.py -h
Če želite ustvariti vmesnik po meri, morate zagnati skript z vsemi želenimi registri, ki jih je mogoče nadzorovati UART, navedenimi kot argumenti. Razpoložljive vrste so std_logic, std_logic_vector, unsigned in signed.
Privzeti način (smer) je in privzeti tip je std_logic_vector, razen če ima register dolžino: 1. Potem bo privzeto nastavljen na std_logic.
Če torej želite ustvariti vhodni signal std_logic, lahko uporabite katerega koli od teh argumentov:
moj_sl=1
moj_sl=1:in
my_sl=1:in:std_logic
Vse zgornje različice bodo povzročile, da skript ustvari ta signal, dostopen UART:
Zaženimo skript z argumenti za ustvarjanje vmesnika z več registri različnih smeri, dolžin in tipov:
Ustvarjeno files
Uspešen zagon skripta gen_uart_regs.py bo ustvaril izhodno mapo z imenom ustvarjena s tremi fileso navedeni spodaj. Če že obstajajo, bodo prepisani.
- generirano/uart_regs.vhd
- created/uart_regs.py
- generirano/instanciation_template.vho
uart_regs.vhd
To je vmesniški modul po meri, ki ga ustvari skript. Instanciirati ga morate v svoji zasnovi, kjer lahko dostopa do registrov, ki jih želite nadzorovati z uporabo UART.
Vse nad razdelkom »– UART dostopni registri« bo enako za vsak modul uart_regs, medtem ko je sestava signalov vrat pod to vrstico odvisna od argumentov, danih skriptu generatorja.
Spodnji seznam prikazuje entiteto za modul uart_regs, ki izhaja iz ukaza za generiranje exampprikazano v gen_uart_regs.py razdelek.
Ni vam treba sinhronizirati signala uart_rx, saj se to obravnava v uart_rx. modul.
Ko modul prejme zahtevo za branje, bo zajel vrednosti vseh vhodnih in izhodnih signalov znotraj trenutnega takta. Takojšnji posnetek se nato prek UART pošlje gostitelju.
Ko pride do pisanja, se vsi izhodni registri posodobijo z novimi vrednostmi znotraj istega takta. Posamezne vrednosti izhodnega signala ni mogoče spremeniti.
Vendar pa skript uart_regs.py uporabniku omogoča posodobitev samo izbranih izhodov tako, da najprej prebere trenutne vrednosti vseh registrov. Nato zapiše vse vrednosti, vključno s posodobljenimi.
uart_regs.py
Generated/uart_regs.py file se ustvari skupaj z modulom uart_regs VHDL in vsebuje podatke o registru po meri v glavi file. S tem skriptom lahko brez težav berete ali pišete v svoje registre po meri.
Meni pomoči
Vnesite python uart_regs.py -h, da natisnete meni pomoči:
Nastavitev vrat UART
Skript ima možnosti za nastavitev vrat UART s stikalom -c. To deluje v sistemih Windows in Linux. Nastavite ga na eno od razpoložljivih vrat, navedenih v meniju pomoči. Če želite nastaviti privzeta vrata, lahko uredite tudi spremenljivko UART_PORT v skriptu uart_regs.py.
Registri kotacij
Informacije o preslikavi registra se s skriptom gen_uart_regs.py postavijo v glavo skripta uart_regs.py. Razpoložljive registre lahko navedete s stikalom -l, kot je prikazano spodaj. To je lokalni ukaz in ne bo deloval s ciljno FPGA.
Pisanje v registre
Z uporabo stikala -w lahko pišete v kateri koli register izhodnega načina. Vnesite ime registra, ki mu sledi »=«, in vrednost, podano kot binarno, šestnajstiško ali decimalno vrednost, kot je prikazano spodaj.
Opomba da implementacija VHDL zahteva, da skript zapiše vse izhodne registre hkrati. Če torej ne podate celotnega niza izhodnih registrov, bo skript najprej izvedel branje iz ciljnega FPGA in nato te vrednosti uporabil za manjkajoče. Posledično se bodo spremenili samo določeni registri.
Ko izvedete pisanje, se bodo vsi določeni registri spremenili med istim taktom in ne takoj, ko bodo prejeti prek UART.
Branje registrov
Uporabite stikalo -r za branje vseh vrednosti registra, kot je prikazano spodaj. Rumeno označene vrednosti so tiste, ki smo jih spremenili v prejšnjem zapisu example.
Vsako branje prikaže trenutni posnetek vseh vhodnih in izhodnih registrov. Vsi so sampvodila v istem ciklu ure.
Odpravljanje napak
Uporabite stikalo -d s katerim koli drugim stikalom, če morate odpraviti napake v komunikacijskem protokolu. Nato bo skript natisnil vse poslane in prejete bajte ter tag če so kontrolni znaki, kot je prikazano spodaj.
Uporaba vmesnika v drugih skriptih Python
Skript uart_regs.py vsebuje razred UartRegs, ki ga lahko enostavno uporabite kot komunikacijski vmesnik v drugih skriptih Python po meri. Preprosto uvozite razred, iz njega ustvarite objekt in začnite uporabljati metode, kot je prikazano spodaj.
Glejte nize dokumentov v kodi Python za metode in opise ter tipe vrnjenih vrednosti.
instantiation_template.vho
Instanciacijska predloga je ustvarjena skupaj z modulom uart_regs za vaše udobje. Če želite prihraniti čas kodiranja, lahko kopirate instanciacijo modula in deklaracije signalov v svojo zasnovo.
Statični RTL files
Vključiti morate naslednje filev vašem projektu VHDL, tako da so prevedeni v isto knjižnico kot modul uart_regs:
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
Modul uart_regs_backend implementira končne avtomate, ki vnašajo in iznašajo podatke registra. Za upravljanje komunikacije UART z gostiteljem uporablja modula uart_rx in uart_tx.
Demo projekti
V Zip so vključeni trije demo projekti file. Omogočajo vam nadzor perifernih naprav na različnih ploščah, kot tudi nekaj večjih notranjih registrov.
Demo mape vključujejo vnaprej ustvarjena uart_regs.vhd in uart_regs.py fileje narejen posebej za te modele.
Rešetkasta iCEstick
Mapa demo/icecube2_icestick vsebuje demo izvedbo dostopa do registra za ploščo Lattice iCEstick FPGA.
Če želite izvesti postopek implementacije, odprite demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file v programski opremi za načrtovanje Lattice iCEcube2.
Ko naložite projekt v iCEcube2 GUI, kliknite Orodja → Zaženi vse, da ustvarite programsko bitno sliko file.
Za konfiguracijo FPGA z ustvarjeno bitno sliko lahko uporabite samostojno orodje Lattice Diamond Programmer file. Ko se odpre Diamond Programmer, v pozdravnem pogovornem oknu kliknite Odpri obstoječi projekt programerja.
Izberite projekt file najdete v datoteki Zip: demo/lattice_icestick/diamond_programmer_project.xcf in kliknite V redu.
Ko se projekt naloži, kliknite tri pike v File Stolpec z imeni, kot je prikazano zgoraj. Prebrskajte, da izberete bitno sliko file ki ste jih ustvarili v iCEcube2: demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_ice stick_bitmap.bin
Končno, ko je plošča iCEstick priključena na vrata USB na vašem računalniku, izberite Design→Program za programiranje bliskavice SPI in konfiguracijo FPGA.
Zdaj lahko nadaljujete z branjem in pisanjem registrov z uporabo skripta demo/lattice_icestick/uart_regs.py, kot je opisano v razdelku uart_regs.py.
Xilinx Digilent Arty A7-35T
Predstavitveno izvedbo za ocenjevalni komplet Artix-7 35T Arty FPGA najdete v mapi demo/arty_a7_35.
Odprite Vivado in se pomaknite do ekstrahiranega files pomočjo konzole Tcl, ki jo najdete na dnu vmesnika GUI. Vnesite ta ukaz za vstop v mapo demo projekta: cd /demo/arty_a7_35/vivado_proj/
Izvedite skript create_vivado_proj.tcl Tcl, da ponovno ustvarite projekt Vivado: izvor ./create_vivado_proj.tcl
V stranski vrstici kliknite Generate Bitstream, da preletite vse korake implementacije in ustvarite programski bitni tok file.
Na koncu kliknite Odpri upravitelja strojne opreme in programirajte FPGA prek GUI.
Zdaj lahko nadaljujete z branjem in pisanjem registrov z uporabo skripta demo/arty_a7_35/uart_regs.py, kot je opisano v razdelku uart_regs.py.
Xilinx Digilent Arty S7-50
Demo izvedbo za razvojno ploščo Arty S7: Spartan-7 FPGA najdete v mapi demo/arty_s7_50.
Odprite Vivado in se pomaknite do ekstrahiranega files pomočjo konzole Tcl, ki jo najdete na dnu vmesnika GUI. Vnesite ta ukaz za vstop v mapo demo projekta: cd /demo/arty_s7_50/vivado_proj/
Izvedite skript create_vivado_proj.tcl Tcl, da ponovno ustvarite projekt Vivado: izvor ./create_vivado_proj.tcl
V stranski vrstici kliknite Generate Bitstream, da preletite vse korake implementacije in ustvarite programski bitni tok file.
Na koncu kliknite Odpri upravitelja strojne opreme in programirajte FPGA prek GUI.
Zdaj lahko nadaljujete z branjem in pisanjem registrov z uporabo skripta demo/arty_s7_50/uart_regs.py, kot je opisano v razdelku uart_regs.py.
Izvedba
Posebnih zahtev za izvedbo ni.
Omejitve
Za to zasnovo niso potrebne posebne časovne omejitve, ker je vmesnik UART počasen in se obravnava kot asinhroni vmesnik.
Vhod uart_rx v modul uart_regs je sinhroniziran znotraj modula uart_rx. Zato ga ni treba sinhronizirati v modulu najvišje ravni.
Znane težave
- Morda boste morali ponastaviti modul, preden ga lahko uporabite, odvisno od tega, ali vaša arhitektura FPGA podpira privzete vrednosti registra.
Avtorske pravice VHDLwhiz.com
Dokumenti / Viri
![]() |
VHDLwhiz Generator testnega vmesnika VHDL registrira UART [pdfUporabniški priročnik VHDL, VHDL Registri UART Test Interface Generator, Registri UART Test Interface Generator, UART Test Interface Generator, Test Interface Generator, Interface Generator, Generator |