VHDLwhiz-logo

VHDLwhiz UART Test Interface Generator

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

Informacije o proizvodu

specifikacije:

  • Naziv proizvoda: VHDL registruje UART test interfejs generator
  • Verzija: 1.0.4
  • Datum: 18. avgust 2024
  • Autor: Jonas Julian Jensen
  • Proizvod URL: Link proizvoda
  • Kontakt email: jonas@vhdlwhiz.com

Opis

Ovaj proizvod vam omogućava da generišete prilagođena interfejsa za čitanje i pisanje vrednosti FPGA registra koristeći UART. Generisani VHDL modul i Python skripta pružaju mogućnost interakcije sa različitim tipovima registara u vašem FPGA dizajnu.

Zahtjevi

  • Python 3 interpreter
  • pyserial paket

Protokol

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

  • ime: READ_REQ, vrijednost: 0x0A – Naredba od hosta do FPGA za pokretanje sekvence pisanja za slanje svih registara natrag preko UART-a
  • ime: START_PIŠI, vrijednost: 0x0B – Označava početak niza pisanja u bilo kojem smjeru
  • ime: END_WRITE, vrijednost: 0x0C – Označava kraj sekvence pisanja u oba smjera
  • ime: pobjeći, vrijednost: 0x0D – Escape znak koji se koristi za izbjegavanje kontrolnih riječi

Upute za upotrebu proizvoda

Pokretanje skripti

Da biste koristili proizvod, uvjerite se da imate instaliran Python 3 i Pyserial paket. Pokrenite skripte kroz Python 3 interpreter.

Generisanje prilagođenih interfejsa

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

Interakcija sa registrima

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

Licenca

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

Dnevnik promjena

  • Ove promjene se odnose na projekat files, i ovaj dokument se u skladu s tim ažurira
Verzija Napomene
1.0.0 Prvo izdanje
1.0.1 Ispravljena greška koja nedostaje „self“ reference prilikom uvoza kao uart_regs.py kao Python modul. Promijenjen ispis neuspjelog pisanja u izuzetak

izbegavajte štampanje na konzoli kada se izvodi kao uvezeni modul.

1.0.2 Ispravljena greška Vivado [Synth 8-248] kada nema reg.
1.0.3 Popravi upozorenje Vivado Linter: Registracija je omogućila vožnju

sinhroni reset

1.0.4 Popravite ugao kada primate pogrešno oblikovanu riječ s escape znakom kao posljednjim bajtom. Sljedeća riječ bi također bila izgubljena jer nismo obrisali recv_data_prev_is_escape prilikom vraćanja na IDLE.

Skripta gen_uart_regs.py sada dozvoljava samo jedinstvena reg imena.

Opis

  • Ovaj dokument opisuje sljedeće files i folderi:
  • gen_uart_regs.py
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • generated/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/
  • Skripta gen_uart_regs.py i podrška za VHDL files u ovom projektu vam omogućavaju da generišete prilagođena sučelja za čitanje i pisanje FPGA registarskih vrijednosti različitih tipova i širina koristeći UART.
  • 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.
  • Možete odlučiti o preciznoj kompoziciji ulaznih i izlaznih registara i tipova prilikom generisanja izlaza files pomoću skripte gen_uart_regs.py.
  • Python skripte su djelomično kreirane uz pomoć alata za umjetnu inteligenciju ChatGPT, dok je VHDL kod ručno izrađen.

Zahtjevi

  • Skripte u ovom projektu moraju biti pokrenute kroz Python 3 interpreter i Pyserial paket mora biti instaliran.
  • Možete instalirati pyserial putem Pipa koristeći ovu naredbu: pip install pyserial

Protokol

  • VHDL files i Python skripta koriste protokol za uokvirivanje podataka sa četiri kontrole
Ime Vrijednost Komentar
READ_REQ 0x0A Naredba od hosta do FPGA za pokretanje pisanja

sekvenca za slanje svih registara nazad preko UART-a

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

smjer

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

Svaki READ_REQ bajt bez preklapanja poslan na FPGA je instrukcija za slanje svih njegovih UART-pristupačnih registara (ulaza i izlaza) nazad na host preko UART-a. Ovu naredbu obično izdaje samo skripta uart_regs.py.
Nakon što primi ovu naredbu, FPGA će odgovoriti slanjem sadržaja svih registara nazad na host. Prvo ulazni signali, zatim izlazni signali. Ako njihove dužine ne predstavljaju višekratnik od 8 bitova, niži bitovi posljednjeg bajta će biti dopunjeni nulama.
Slijed pisanja uvijek počinje sa bajtom START_WRITE i završava se sa bajtom END_WRITE. Svaki bajt između njih se smatra bajtovima podataka. Ako bilo koji bajt podataka ima istu vrijednost kao kontrolni znak, bajt podataka mora biti izbačen. To znači slanje dodatnog ESCAPE znaka prije bajta podataka kako bi se naznačilo da su to zapravo podaci.
Ako START_WRITE bez preklapanja stigne bilo gdje u toku bajtova, smatra se početkom niza pisanja. Modul uart_regs_backend koristi ove informacije za ponovnu sinkronizaciju u slučaju da se komunikacija pokvari.

gen_uart_regs.py

  • Ovo je skripta s kojom morate započeti da biste generisali sučelje. Ispod je snimak ekrana menija pomoći koji možete dobiti pokretanjem: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface-Generator-SLIKA-1
  • Da biste generisali prilagođeni interfejs, morate pokrenuti skriptu sa svakim od vaših željenih UART kontrolisanih registara navedenim kao argumenti. Dostupni tipovi su std_logic, std_logic_vector, unsigned i signed.
  • Zadani način rada (smjer) je in i defaultni tip je std_logic_vector osim ako je registar dužine: 1. Tada će on default biti std_logic.
  • Stoga, ako želite kreirati std_logic ulazni signal, možete koristiti bilo koji od ovih argumenata:
  • my_sl=1
  • my_sl=1:u
  • my_sl=1:in:std_logic
  • Sve gore navedene varijante će rezultirati skriptom koja generira ovaj UART-pristupačan signal:VHDLwhiz-UART-Test-Interface-Generator-SLIKA-2
  • Pokrenimo skriptu sa argumentima da generišemo interfejs sa nekoliko registara različitih pravaca, dužina i tipovaVHDLwhiz-UART-Test-Interface-Generator-SLIKA-3

Generirano files

  • Uspješno pokretanje skripte gen_uart_regs.py će proizvesti izlaznu mapu pod nazivom generiranu sa tri fileje naveden ispod. Ako već postoje, biće prepisane.
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • generated/instantiation_template.vho
  • uart_regs.vhd
  • Ovo je prilagođeni modul interfejsa koji generiše skripta. Morate ga instancirati u svom dizajnu, gdje može pristupiti registrima koje želite kontrolirati koristeći UART.
  • Sve iznad odeljka “– UART dostupni registri” biće identično za svaki modul uart_regs, dok sastav signala porta ispod te linije zavisi od argumenata datih skripti generatora.
  • Listing ispod prikazuje entitet za modul uart_regs koji je rezultat naredbe gene example prikazano u sekciji gen_uart_regs.pyVHDLwhiz-UART-Test-Interface-Generator-SLIKA-4
  • Ne morate sinkronizirati uart_rx signal, jer se to rješava u uart_rx. modul.
  • Kada modul primi zahtjev za čitanje, on će uhvatiti vrijednosti svih ulaznih i izlaznih signala unutar trenutnog ciklusa takta. Trenutni snimak se zatim šalje hostu preko UART-a.
  • Kada se upis dogodi, svi izlazni registri se ažuriraju novim vrijednostima unutar istog ciklusa takta. Nije moguće pojedinačno mijenjati vrijednosti izlaznog signala.
  • Međutim, skripta uart_regs.py dozvoljava korisniku da ažurira samo odabrane izlaze tako što će prvo čitati 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 sa uart_regs VHDL modulom i sadrži prilagođene informacije registra u zaglavlju file. Pomoću ove skripte možete s lakoćom čitati ili pisati u svoje prilagođene registre.

Meni pomoći

  • Upišite python uart_regs.py -h da odštampate meni pomoći:VHDLwhiz-UART-Test-Interface-Generator-SLIKA-5

Postavljanje UART porta

  • Skripta ima opcije za postavljanje UART porta pomoću prekidača -c. Ovo radi na Windowsima i Linuxu. Postavite ga na jedan od dostupnih portova navedenih u meniju pomoći. Da biste postavili zadani port, također možete urediti varijablu UART_PORT u skripti uart_regs.py.

Listing registara

  • Informacije o mapiranju registra stavljaju se u zaglavlje skripte uart_regs.py pomoću skripte gen_uart_regs.py. Možete navesti dostupne registre sa -l prekidačem, kao što se vidi ispod. Ovo je lokalna komanda i neće biti u interakciji sa ciljnim FPGAVHDLwhiz-UART-Test-Interface-Generator-SLIKA-6

Upisivanje u registre

  • Možete pisati u bilo koji od izlaznih registara koristeći -w prekidač. Navedite ime registra praćeno “=” i vrijednost koja je data kao binarna, heksadecimalna ili decimalna vrijednost, kao što je prikazano ispod.VHDLwhiz-UART-Test-Interface-Generator-SLIKA-7
  • Imajte na umu da implementacija VHDL-a zahtijeva da skripta piše sve izlazne registre istovremeno. Stoga, ako ne navedete kompletan skup izlaznih registara, skripta će prvo izvršiti čitanje sa ciljnog FPGA, a zatim koristiti te vrijednosti za one koje nedostaju. Rezultat će biti da se mijenjaju samo navedeni registri
  • Kada izvršite upis, svi navedeni registri će se promijeniti tokom istog ciklusa takta, a ne čim se primi preko UART-a.

Čitanje registara

  • Koristite prekidač -r da pročitate sve vrijednosti registra, kao što je prikazano ispod. Vrijednosti označene žutom bojom su one koje smo promijenili u prethodnom upisu exampleVHDLwhiz-UART-Test-Interface-Generator-SLIKA-8
  • Svako čitanje prikazuje trenutni snimak svih ulaznih i izlaznih registara. Svi su sampLED tokom istog takta

Otklanjanje grešaka

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

Korišćenje interfejsa u drugim Python skriptama

  • Skripta uart_regs.py sadrži klasu UartRegs koju možete lako koristiti kao komunikacijski interfejs u drugim prilagođenim Python skriptama. Jednostavno uvezite klasu, kreirajte njen objekt i počnite koristiti metode, kao što je prikazano ispod.VHDLwhiz-UART-Test-Interface-Generator-SLIKA-10
  • Pogledajte nizove dokumenata u Python kodu za metode i opise i tipove povratne vrijednosti.

instantiation_template.vho

  • Predložak za instanciranje se generiše zajedno sa modulom uart_regs radi vaše udobnosti. Da biste uštedjeli vrijeme kodiranja, možete kopirati instanciranje modula i deklaracije signala u svoj dizajn.VHDLwhiz-UART-Test-Interface-Generator-SLIKA-11VHDLwhiz-UART-Test-Interface-Generator-SLIKA-12

Statički RTL files

  • Morate uključiti sljedeće files u vašem VHDL projektu tako da se kompajliraju 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 mašine konačnog stanja koje unose i izlaze iz registarskih podataka. Koristi module uart_rx i uart_tx za rukovanje UART komunikacijom sa hostom.

Demo projekti

  • Postoje tri 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 folderi uključuju unaprijed generirane uart_regs.vhd i uart_regs.py filenapravljen je posebno za te dizajne.

Lattice iCEstick

  • Demo/icecube2_icestick folder sadrži demo implementaciju pristupa registru za Lattice iCEstick FPGA ploču.
  • Da biste prošli 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 na Tools→Run All da generišete programsku bitmapu file.
  • Možete koristiti samostalni alat Lattice Diamond Programmer za konfiguriranje FPGA s generiranom bitmapom file. Kada se otvori Diamond Programmer, kliknite Otvori postojeći projekat programera u dijaloškom okviru dobrodošlice.
  • Odaberite projekat file pronađite u Zip-u: demo/lattice_icestick/diamond_programmer_project.xcf i kliknite na OK.VHDLwhiz-UART-Test-Interface-Generator-SLIKA-13
  • Nakon što se projekat učita, kliknite na tri tačke u File Kolona imena, kao što je prikazano iznad. Pregledajte da biste odabrali bitmapu file koje ste generirali u iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Konačno, sa iCEstick pločom priključenom na USB port na vašem računaru, izaberite Dizajn→Program za programiranje SPI fleš i konfigurisanje FPGA.
  • Sada možete nastaviti sa čitanjem i pisanjem registara koristeći demo/lattice_icestick/uart_regs.py skriptu kao što je opisano u odjeljku uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Demo implementaciju za Artix-7 35T Arty FPGA evaluacijski komplet možete pronaći u mapi demo/arty_a7_35.
  • Otvorite Vivado i idite do ekstrahovanog files pomoću Tcl konzole koja se nalazi na dnu GUI interfejsa. Unesite ovu naredbu da uđete u mapu demo projekta:
  • cd /demo/arty_a7_35/vivado_proj/
  • Izvršite create_vivado_proj.tcl Tcl skriptu za regeneraciju Vivado projekta:
  • izvor ./create_vivado_proj.tcl
  • Kliknite Generiraj bitstream na bočnoj traci da prođete kroz sve korake implementacije i generišete programski bitstream file.
  • Na kraju, kliknite na Open Hardware Manager i programirajte FPGA kroz GUI.
  • Sada možete nastaviti sa čitanjem i pisanjem registara koristeći demo/arty_a7_35/uart_regs.py skriptu kao što je opisano u odjeljku uart_regs.py.

Xilinx Digilent Arty S7-50

  • Demo implementaciju za razvojnu ploču Arty S7: Spartan-7 FPGA možete pronaći u folderu demo/arty_s7_50.
  • Otvorite Vivado i idite do ekstrahovanog files pomoću Tcl konzole koja se nalazi na dnu GUI interfejsa. Unesite ovu naredbu da uđete u mapu demo projekta:
  • cd /demo/arty_s7_50/vivado_proj/
  • Izvršite create_vivado_proj.tcl Tcl skriptu za regeneraciju Vivado projekta:
  • izvor ./create_vivado_proj.tcl
  • Kliknite Generiraj bitstream na bočnoj traci da prođete kroz sve korake implementacije i generišete programski bitstream file.
  • Na kraju, kliknite na Open Hardware Manager i programirajte FPGA kroz GUI.
  • Sada možete nastaviti sa čitanjem i pisanjem registara koristeći demo/arty_s7_50/uart_regs.py skriptu kao što je opisano u odjeljku uart_regs.py.

Implementacija

  • Ne postoje posebni zahtjevi za implementaciju.

Ograničenja

  • Za ovaj dizajn nisu potrebna posebna vremenska ograničenja jer je UART interfejs spor i tretira se kao asinhroni interfejs.
  • Ulaz uart_rx u uart_regs modul je sinhronizovan unutar uart_rx modula. Dakle, ne mora biti sinhronizovan u modulu najvišeg nivoa.

Poznati problemi

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

Više informacija

FAQs

P: Koja je svrha generatora UART test interfejsa?

O: Generator UART test interfejsa omogućava kreiranje prilagođenih interfejsa za interakciju sa vrednostima FPGA registra koristeći UART komunikaciju.

P: Kako da instaliram Pyserial paket?

O: Možete instalirati Pyserial preko Pipa koristeći naredbu: pip install pyserial

Dokumenti / Resursi

VHDLwhiz UART Test Interface Generator [pdf] Korisnički priručnik
UART Test Interface Generator, Test Interface Generator, Interface Generator, Generator

Reference

Ostavite komentar

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