Logotip VHDLwhiz

Generator testnega vmesnika VHDLwhiz UART

VHDLwhiz-UART-Test-Interface Generator-PRODUCT

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 -hVHDLwhiz-UART-Test-Interface Generator-FIG-1
  • Č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:VHDLwhiz-UART-Test-Interface Generator-FIG-2
  • Zaženimo skript z argumenti za ustvarjanje vmesnika z več registri različnih smeri, dolžin in tipovVHDLwhiz-UART-Test-Interface Generator-FIG-3

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.pyVHDLwhiz-UART-Test-Interface Generator-FIG-4
  • 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:VHDLwhiz-UART-Test-Interface Generator-FIG-5

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 FPGAVHDLwhiz-UART-Test-Interface Generator-FIG-6

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.VHDLwhiz-UART-Test-Interface Generator-FIG-7
  • 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 exampleVHDLwhiz-UART-Test-Interface Generator-FIG-8
  • 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.VHDLwhiz-UART-Test-Interface Generator-FIG-9

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.VHDLwhiz-UART-Test-Interface Generator-FIG-10
  • 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.VHDLwhiz-UART-Test-Interface Generator-FIG-11VHDLwhiz-UART-Test-Interface Generator-FIG-12

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.VHDLwhiz-UART-Test-Interface Generator-FIG-13
  • 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

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

Reference

Pustite komentar

Vaš elektronski naslov ne bo objavljen. Obvezna polja so označena *