Generator testnega vmesnika VHDLwhiz UART
Informacije o izdelku
Tehnični podatki:
- Ime izdelka: Generator testnega vmesnika VHDL registrira UART
- Različica: 1.0.4
- Datum: 18. avgust 2024
- Avtor: Jonas Julian Jensen
- Izdelek URL: Povezava do izdelka
- Kontaktni e-poštni naslov: jonas@vhdlwhiz.com
Opis
Ta izdelek vam omogoča ustvarjanje vmesnikov po meri za branje in pisanje vrednosti registra FPGA z uporabo UART. Ustvarjeni modul VHDL in skript Python nudita možnost interakcije z različnimi vrstami registrov v vaši zasnovi FPGA.
Zahteve
- Tolmač Python 3
- paket pyserial
Protokol
Izdelek uporablja protokol za okvirjanje podatkov s štirimi kontrolnimi znaki:
- ime: READ_REQ, Vrednost: 0x0A – Ukaz od gostitelja do FPGA za začetek zaporedja pisanja za pošiljanje vseh registrov nazaj prek UART
- ime: START_WRITE, Vrednost: 0x0B – Označuje začetek zaporedja pisanja v obe smeri
- ime: END_WRITE, Vrednost: 0x0C – Označuje konec zaporedja pisanja v obe smeri
- ime: POBEG, Vrednost: 0x0D – Ubežni znak, ki se uporablja za ubežne kontrolne besede
Navodila za uporabo izdelka
Izvajanje skriptov
Za uporabo izdelka zagotovite, da imate nameščen Python 3 in paket Pyserial. Zaženite skripte prek tolmača Python 3.
Ustvarjanje vmesnikov po meri
Uporabite skript gen_uart_regs.py za ustvarjanje vmesnikov po meri za branje in pisanje vrednosti registra FPGA. Pri generiranju izhoda lahko določite sestavo vhodnih in izhodnih registrov ter vrste files.
Interakcija z registri
Z ustvarjenim modulom VHDL in skriptom Python lahko berete ali pišete v poljubno število registrov v svoji zasnovi FPGA. Dostopni registri imajo lahko vrste, kot so std_logic, std_logic_vector, signed ali unsigned.
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 |
1.0.1 | Odpravljena napaka manjkajočega sklicevanja na »samo« pri uvozu kot uart_regs.py kot modula Python. Neuspelo pisanje, izpis je spremenjen v izjemo
izogibajte se tiskanju na konzolo, ko se izvaja kot uvožen modul. |
1.0.2 | Popravek za napako Vivado [Synth 8-248], ko ni pravil za izhodni način. |
1.0.3 | Odpravite opozorilo Vivado Linter: Register has enable enabled by
sinhrona ponastavitev |
1.0.4 | Popravite velike in male črke pri prejemu napačno oblikovane besede z ubežnim znakom kot zadnjim bajtom. Tudi naslednja beseda bi bila izgubljena, ker ob vrnitvi v IDLE nismo počistili recv_data_prev_is_escape.
Skript gen_uart_regs.py zdaj dovoljuje samo edinstvena imena registrov. |
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/
- Skript gen_uart_regs.py in podporni 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 skript Python uporabljata protokol za okvirjanje podatkov s štirimi kontrolniki
Ime | Vrednost | Komentiraj |
READ_REQ | 0x0A | Ukaz od gostitelja do FPGA za začetek pisanja
zaporedje za pošiljanje vseh registrov nazaj prek UART |
START_PIŠI | 0x0B | Označuje začetek zaporedja pisanja v obeh
smer |
END_WRITE | 0x0C | Označuje konec zaporedja pisanja v obe smeri |
POBEŽI | 0x0D | 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.
gen_uart_regs.py
- 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 exampprikazana v razdelku gen_uart_regs.py
- 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.
- Upoštevajte, da implementacija VHDL zahteva, da skript hkrati zapiše vse izhodne registre. Č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 sampvodil 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_icestick_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 predstavitvenega projekta:
- cd /demo/arty_a7_35/vivado_proj/
- Izvedite skript create_vivado_proj.tcl Tcl, da ponovno ustvarite projekt Vivado:
- vir ./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 predstavitvenega projekta:
- cd /demo/arty_s7_50/vivado_proj/
- Izvedite skript create_vivado_proj.tcl Tcl, da ponovno ustvarite projekt Vivado:
- vir ./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.
Več informacij
- Avtorske pravice VHDLwhiz.com
pogosta vprašanja
V: Kakšen je namen generatorja testnega vmesnika UART?
O: Generator preskusnega vmesnika UART omogoča ustvarjanje vmesnikov po meri za interakcijo z vrednostmi registra FPGA z uporabo komunikacije UART.
V: Kako namestim paket Pyserial?
O: Pyserial lahko namestite prek Pipa z ukazom: pip install pyserial
Dokumenti / Viri
![]() |
Generator testnega vmesnika VHDLwhiz UART [pdfUporabniški priročnik Generator testnega vmesnika UART, Generator testnega vmesnika, Generator vmesnika, Generator |