VHDLwhiz-logotip

Generator testnog sučelja VHDLwhiz UART

VHDLwhiz-UART-Test-Generator-Sučelja-PROIZVOD

Informacije o proizvodu

Tehnički podaci:

  • Naziv proizvoda: VHDL registri UART test generator sučelja
  • Verzija: 1.0.4
  • Datum: 18
  • Autor: Jonas Julian Jensen
  • Proizvod URL: Veza proizvoda
  • Kontakt email: jonas@vhdlwhiz.com

Opis

Ovaj proizvod vam omogućuje generiranje prilagođenih sučelja za čitanje i pisanje vrijednosti FPGA registara pomoću UART-a. Generirani VHDL modul i Python skripta pružaju mogućnost interakcije s različitim vrstama registara u vašem FPGA dizajnu.

Zahtjevi

  • Python 3 tumač
  • pyserial paket

Protokol

Proizvod koristi protokol za uokvirivanje podataka s četiri kontrolna znaka:

  • Ime: READ_REQ, Vrijednost: 0x0A – Naredba od glavnog računala do FPGA za pokretanje niza pisanja za slanje svih registara natrag preko UART-a
  • Ime: START_PIŠITE, Vrijednost: 0x0B – Označava početak niza pisanja u bilo kojem smjeru
  • Ime: END_WRITE, Vrijednost: 0x0C – Označava kraj niza pisanja u bilo kojem smjeru
  • Ime: POBJEĆI, Vrijednost: 0x0D – Izlazni znak koji se koristi za izbjegavanje kontrolnih riječi

Upute za uporabu proizvoda

Pokretanje skripti

Za korištenje proizvoda provjerite imate li instaliran Python 3 i paket Pyserial. Pokrenite skripte kroz Python 3 tumač.

Generiranje prilagođenih sučelja

Koristite skriptu gen_uart_regs.py za generiranje prilagođenih sučelja za čitanje i pisanje vrijednosti FPGA registara. Možete odrediti sastav ulaznih i izlaznih registara i tipova prilikom generiranja izlaza files.

Interakcija s registrima

Možete čitati ili pisati u bilo koji broj registara u vašem FPGA dizajnu koristeći generirani VHDL modul i Python skriptu. Dostupni registri mogu imati tipove kao što su std_logic, std_logic_vector, signed ili unsigned.

Licenca

  • MIT licenca pokriva zahtjeve za autorska prava i uvjete korištenja izvornog koda. Pogledajte LICENSE.txt file u Zip-u file za detalje.

Dnevnik promjena

  • Ove izmjene se odnose na projekt files, te se ovaj dokument ažurira u skladu s tim
Verzija Primjedbe
1.0.0 Početno izdanje
1.0.1 Ispravljena greška s nedostatkom «self» reference prilikom uvoza kao uart_regs.py kao Python modula. Promijenjeno pisanje neuspješnog ispisa u iznimku za

izbjegavajte ispis na konzolu kada se izvodi kao uvezeni modul.

1.0.2 Popravak za pogrešku Vivado [Synth 8-248] kada nema pravila izlaznog načina rada.
1.0.3 Ispravite upozorenje Vivado Linter: Register has enable driven by

sinkroni reset

1.0.4 Ispravite velika i mala slova kod primanja krivo oblikovane riječi s izlaznim znakom kao zadnjim bajtom. Sljedeća riječ također bi bila izgubljena jer nismo izbrisali recv_data_prev_is_escape pri povratku na IDLE.

Skripta gen_uart_regs.py sada dopušta samo jedinstvena imena pravila.

Opis

  • Ovaj dokument opisuje sljedeće files i mape:
  • gen_uart_regs.py
  • generirano/uart_regs.vhd
  • generirano/uart_regs.py
  • generirano/predložak_instancije.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/
  • Skripta gen_uart_regs.py i podržavajući VHDL files u ovom projektu vam omogućuju generiranje prilagođenih sučelja za čitanje i pisanje FPGA registarskih vrijednosti različitih vrsta i širina pomoću UART-a.
  • Možete koristiti generirani VHDL modul i Python skriptu za čitanje ili pisanje u bilo koji broj registara u vašem dizajnu. UART dostupni registri mogu imati tipove std_logic, std_logic_vector, signed ili unsigned.
  • Prilikom generiranja izlaza možete odlučiti o preciznom sastavu ulaznih i izlaznih registara i vrsta files pomoću skripte gen_uart_regs.py.
  • Python skripte izrađene su djelomično uz pomoć alata za umjetnu inteligenciju ChatGPT, dok je VHDL kod ručno izrađen.

Zahtjevi

  • Skripte u ovom projektu moraju se izvoditi kroz Python 3 tumač i mora biti instaliran paket Pyserial.
  • Pyserial možete instalirati putem Pipa pomoću ove naredbe: pip install pyserial

Protokol

  • VHDL files i Python skripta koriste protokol za uokvirivanje podataka s četiri kontrole
Ime Vrijednost Komentar
READ_REQ 0x0A Naredba s glavnog računala na FPGA za pokretanje pisanja

niz za slanje svih registara natrag preko UART-a

START_PISATI 0x0B Označava početak niza pisanja u bilo kojem

smjer

END_WRITE 0x0C Označava kraj niza pisanja u bilo kojem smjeru
POBJEĆI 0x0D Znak za izlaz koji se koristi za izbjegavanje bilo koje od kontrolnih riječi, uključujući sam znak ESCAPE, kada se pojavljuju kao podaci između oznaka START_WRITE i END_WRITE.

Svaki neizbježni READ_REQ bajt poslan FPGA-u je instrukcija za slanje svih njegovih UART-dostupnih registara (ulaza i izlaza) natrag glavnom računalu preko UART-a. Ovu naredbu obično izdaje samo skripta uart_regs.py.
Po primitku ove naredbe, FPGA će odgovoriti slanjem sadržaja svih registara natrag glavnom računalu. Prvo, ulazni signali, zatim izlazni signali. Ako njihova duljina nije višekratnik 8 bitova, niži bitovi posljednjeg bajta bit će dopunjeni nulama.
Niz pisanja uvijek počinje s bajtom START_WRITE i završava s bajtom END_WRITE. Svi bajtovi između njih smatraju se bajtovima podataka. Ako bilo koji podatkovni bajt ima istu vrijednost kao kontrolni znak, podatkovni bajt mora biti escapediran. To znači slanje dodatnog ESCAPE znaka prije bajta podataka kako bi se naznačilo da se zapravo radi o podacima.
Ako neizbježni START_WRITE stigne bilo gdje u nizu bajtova, to se smatra početkom niza pisanja. Modul uart_regs_backend koristi ove informacije za ponovnu sinkronizaciju u slučaju da komunikacija ne bude sinkronizirana.

gen_uart_regs.py

  • Ovo je skripta s kojom morate početi za generiranje sučelja. Ispod je snimak zaslona izbornika pomoći koji možete dobiti pokretanjem: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface Generator-FIG-1
  • Da biste generirali prilagođeno sučelje, morate pokrenuti skriptu sa svakim željenim UART kontroliranim registrom navedenim kao argumenti. Dostupni tipovi su std_logic, std_logic_vector, unsigned i signed.
  • Zadani način (smjer) je in, a zadani tip je std_logic_vector osim ako je registar sljedeće duljine: 1. Tada će zadano biti std_logic.
  • Dakle, ako želite stvoriti std_logic ulazni signal, možete koristiti bilo koji od ovih argumenata:
  • moj_sl=1
  • moj_sl=1:in
  • moj_sl=1:u:std_logic
  • Sve gore navedene varijante rezultirat će skriptom koja generira ovaj UART-dostupan signal:VHDLwhiz-UART-Test-Interface Generator-FIG-2
  • Pokrenimo skriptu s argumentima za generiranje sučelja s nekoliko registara različitih smjerova, duljina i vrstaVHDLwhiz-UART-Test-Interface Generator-FIG-3

Generirano files

  • Uspješno pokretanje skripte gen_uart_regs.py proizvest će izlaznu mapu pod nazivom generirana s tri filenavedeni u nastavku. Ako već postoje, bit će prebrisani.
  • generirano/uart_regs.vhd
  • generirano/uart_regs.py
  • generirano/predložak_instancije.vho
  • uart_regs.vhd
  • Ovo je prilagođeni modul sučelja koji generira skripta. Morate ga instancirati u svom dizajnu, gdje može pristupiti registrima koje želite kontrolirati pomoću UART-a.
  • Sve iznad odjeljka "– UART dostupni registri" bit će identično za svaki modul uart_regs, dok sastav port signala ispod te linije ovisi o argumentima danim skripti generatora.
  • Ispis u nastavku prikazuje entitet za modul uart_regs koji proizlazi iz naredbe za generiranje exampprikazan u odjeljku gen_uart_regs.pyVHDLwhiz-UART-Test-Interface Generator-FIG-4
  • Ne morate sinkronizirati uart_rx signal, jer se to rješava u uart_rx. modul.
  • Kada modul primi zahtjev za čitanje, uhvatit će vrijednosti svih ulaznih i izlaznih signala unutar trenutnog takta. Trenutačna snimka se zatim šalje glavnom računalu preko UART-a.
  • Kada se dogodi upisivanje, svi izlazni registri ažuriraju se novim vrijednostima unutar istog takta. Nije moguće pojedinačno mijenjati vrijednosti izlaznog signala.
  • Međutim, skripta uart_regs.py dopušta korisniku ažuriranje samo odabranih izlaza tako da prvo očita trenutne vrijednosti svih registara. Zatim zapisuje sve vrijednosti, uključujući one ažurirane.
  • uart_regs.py
  • Generirani/uart_regs.py file generira se zajedno s uart_regs VHDL modulom i sadrži podatke prilagođenog registra u zaglavlju file. Pomoću ove skripte možete s lakoćom čitati ili pisati u prilagođene registre.

Izbornik za pomoć

  • Upišite python uart_regs.py -h za ispis izbornika pomoći:VHDLwhiz-UART-Test-Interface Generator-FIG-5

Postavljanje UART priključka

  • Skripta ima opcije za postavljanje UART priključka pomoću preklopke -c. Ovo radi na Windowsima i Linuxu. Postavite ga na jedan od dostupnih priključaka navedenih u izborniku pomoći. Za postavljanje zadanog priključka također možete urediti varijablu UART_PORT u skripti uart_regs.py.

Registri popisa

  • Informacije o preslikavanju registra skripta gen_uart_regs.py postavlja u zaglavlje skripte uart_regs.py. Možete ispisati dostupne registre s prekidačem -l, kao što je prikazano u nastavku. Ovo je lokalna naredba i neće komunicirati s ciljnom FPGAVHDLwhiz-UART-Test-Interface Generator-FIG-6

Zapisivanje u matične knjige

  • Možete pisati u bilo koji od izlaznih registara pomoću prekidača -w. Unesite naziv registra iza kojeg slijedi “=” i vrijednost dana kao binarna, heksadecimalna ili decimalna vrijednost, kao što je prikazano u nastavku.VHDLwhiz-UART-Test-Interface Generator-FIG-7
  • Imajte na umu da VHDL implementacija zahtijeva da skripta zapisuje sve izlazne registre istovremeno. Stoga, ako ne navedete kompletan skup izlaznih registara, skripta će prvo izvršiti čitanje iz ciljnog FPGA i zatim koristiti te vrijednosti za one koje nedostaju. Rezultat će biti da se mijenjaju samo navedeni registri
  • Kada izvršite pisanje, svi navedeni registri će se promijeniti tijekom istog ciklusa sata, a ne čim budu primljeni preko UART-a.

Čitanje registara

  • Koristite prekidač -r za čitanje svih vrijednosti registra, kao što je prikazano u nastavku. Vrijednosti označene žutom bojom su one koje smo promijenili u prethodnom zapisu exampleVHDLwhiz-UART-Test-Interface Generator-FIG-8
  • Svako čitanje prikazuje trenutnu snimku svih ulaznih i izlaznih registara. Svi su sampvodio tijekom istog ciklusa sata

Otklanjanje pogrešaka

Koristite prekidač -d s bilo kojim drugim prekidačima ako trebate otkloniti pogreške u komunikacijskom protokolu. Zatim će skripta ispisati sve poslane i primljene bajtove i tag ako su kontrolni znakovi, kao što je prikazano u nastavku.VHDLwhiz-UART-Test-Interface Generator-FIG-9

Korištenje sučelja u drugim Python skriptama

  • Skripta uart_regs.py sadrži klasu UartRegs koju možete jednostavno koristiti kao komunikacijsko sučelje u drugim prilagođenim Python skriptama. Jednostavno uvezite klasu, stvorite njen objekt i počnite koristiti metode, kao što je prikazano u nastavku.VHDLwhiz-UART-Test-Interface Generator-FIG-10
  • Pogledajte nizove dokumenata u Python kodu za metodu i opise te tipove povratnih vrijednosti.

predložak_instanciranja.vho

  • Predložak instanciranja generira se zajedno s modulom uart_regs radi vaše udobnosti. Kako biste uštedjeli vrijeme kodiranja, možete kopirati instanciranje modula i deklaracije signala u svoj dizajn.VHDLwhiz-UART-Test-Interface Generator-FIG-11VHDLwhiz-UART-Test-Interface Generator-FIG-12

Statički RTL files

  • Morate uključiti sljedeće fileu vašem VHDL projektu tako da su kompajlirani u istu biblioteku kao i modul uart_regs:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Modul uart_regs_backend implementira automate s konačnim stanjem koji unose i izlaze podatke iz registra. Koristi module uart_rx i uart_tx za rukovanje UART komunikacijom s hostom.

Demo projekti

  • Tri su demo projekta uključena u Zip file. Omogućuju vam kontrolu perifernih uređaja na različitim pločama kao i nekoliko većih internih registara.
  • Demo mape uključuju unaprijed generirane uart_regs.vhd i uart_regs.py fileje napravljen posebno za te dizajne.

Rešetkasti iCEstick

  • Mapa demo/icecube2_icestick sadrži demo implementaciju pristupa registru za Lattice iCEstick FPGA ploču.
  • Za prolazak kroz proces implementacije otvorite demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file u softveru za dizajn Lattice iCEcube2.
  • Nakon učitavanja projekta u iCEcube2 GUI, kliknite Alati→Pokreni sve za generiranje programske bitmape file.
  • Možete koristiti samostalni alat Lattice Diamond Programmer za konfiguriranje FPGA s generiranom bitmapom file. Kada se Diamond Programmer otvori, kliknite Otvori postojeći projekt programera u dijaloškom okviru dobrodošlice.
  • Odaberite projekt file naći u Zip: demo/lattice_icestick/diamond_programmer_project.xcf i kliknite OK.VHDLwhiz-UART-Test-Interface Generator-FIG-13
  • Nakon što se projekt učita, kliknite tri točke u File Stupac naziva, kao što je prikazano gore. Pregledajte kako biste odabrali bitmapu file koje ste generirali u iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Na kraju, s iCEstick pločom priključenom na USB priključak na vašem računalu, odaberite Dizajn→Program za programiranje SPI flasha i konfiguraciju FPGA.
  • Sada možete nastaviti čitati i pisati registre pomoću skripte demo/lattice_icestick/uart_regs.py kako je opisano u odjeljku uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Demo implementaciju Artix-7 35T Arty FPGA kompleta za procjenu možete pronaći u mapi demo/arty_a7_35.
  • Otvorite Vivado i dođite do izdvojenog files pomoću Tcl konzole koja se nalazi na dnu GUI sučelja. Upišite ovu naredbu za ulazak u mapu demo projekta:
  • CD /demo/arty_a7_35/vivado_proj/
  • Izvršite create_vivado_proj.tcl Tcl skriptu za ponovno generiranje Vivado projekta:
  • izvor ./create_vivado_proj.tcl
  • Kliknite Generate Bitstream na bočnoj traci kako biste prošli kroz sve korake implementacije i generirali programski bitstream file.
  • Na kraju kliknite Open Hardware Manager i programirajte FPGA kroz GUI.
  • Sada možete nastaviti čitati i pisati registre pomoću skripte demo/arty_a7_35/uart_regs.py kako je opisano u odjeljku uart_regs.py.

Xilinx Digilent Arty S7-50

  • Demo implementaciju za Arty S7: Spartan-7 FPGA razvojnu ploču možete pronaći u mapi demo/arty_s7_50.
  • Otvorite Vivado i dođite do izdvojenog files pomoću Tcl konzole koja se nalazi na dnu GUI sučelja. Upišite ovu naredbu za ulazak u mapu demo projekta:
  • CD /demo/arty_s7_50/vivado_proj/
  • Izvršite create_vivado_proj.tcl Tcl skriptu za ponovno generiranje Vivado projekta:
  • izvor ./create_vivado_proj.tcl
  • Kliknite Generate Bitstream na bočnoj traci kako biste prošli kroz sve korake implementacije i generirali programski bitstream file.
  • Na kraju kliknite Open Hardware Manager i programirajte FPGA kroz GUI.
  • Sada možete nastaviti čitati i pisati registre pomoću skripte demo/arty_s7_50/uart_regs.py kako je opisano u odjeljku uart_regs.py.

Provedba

  • Ne postoje posebni zahtjevi za implementaciju.

Ograničenja

  • Za ovaj dizajn nisu potrebna posebna vremenska ograničenja jer je UART sučelje sporo i tretira se kao asinkrono sučelje.
  • Ulaz uart_rx u modul uart_regs sinkroniziran je unutar modula uart_rx. Stoga ga ne treba sinkronizirati u modulu najviše razine.

Poznati problemi

  • Možda ćete morati resetirati modul prije nego što se može koristiti, ovisno o tome podržava li vaša FPGA arhitektura zadane vrijednosti registra.

Više informacija

FAQ

P: Koja je svrha UART test generatora sučelja?

O: Generator testnog UART sučelja omogućuje stvaranje prilagođenih sučelja za interakciju s vrijednostima FPGA registra korištenjem UART komunikacije.

P: Kako mogu instalirati Pyserial paket?

O: Možete instalirati Pyserial kroz Pip pomoću naredbe: pip install pyserial

Dokumenti / Resursi

Generator testnog sučelja VHDLwhiz UART [pdf] Korisnički priručnik
UART Generator ispitnog sučelja, Generator testnog sučelja, Generator sučelja, Generator

Reference

Ostavite komentar

Vaša email adresa neće biti objavljena. Obavezna polja su označena *