VHDLwhiz UART Test Interface Generator
Informazione di u produttu
Specificazioni:
- Nome di u produttu: VHDL registra u generatore di interfaccia di prova UART
- Versione: 1.0.4
- Data: 18 d'Aostu, 2024
- Autore: Jonas Julian Jensen
- Pruduttu URL: Link di u produttu
- E-mail di cuntattu: jonas@vhdlwhiz.com
Descrizzione
Stu pruduttu permette di generà interfacce persunalizati per leghje è scrive valori di registru FPGA cù UART. U modulu VHDL generatu è u script Python furnisce l'abilità di interagisce cù diversi tipi di registri in u vostru disignu FPGA.
Requisiti
- Interprete Python 3
- pacchettu pyserial
Protocolu
U pruduttu usa un protocolu di framing di dati cù quattru caratteri di cuntrollu:
- Nome: READ_REQ, Valore: 0x0A - Cumanda da l'ospite à l'FPGA per inizià una sequenza di scrittura per rinvià tutti i registri nantu à UART
- Nome: START_SCRIVI, Valore: 0x0B - Marca u principiu di una sequenza di scrittura in ogni direzzione
- Nome: END_SCRIVI, Valore: 0x0C - Marca a fine di una sequenza di scrittura in ogni direzzione
- Nome: scappà, Valore: 0x0D - Carattere di escape utilizatu per scappà e parolle di cuntrollu
Istruzzioni per l'usu di u produttu
Esecuzione di i Scripts
Per utilizà u pruduttu, assicuratevi di avè installatu Python 3 è u pacchettu Pyserial. Eseguite i script attraversu un interprete Python 3.
Generazione di interfacce persunalizati
Aduprate u script gen_uart_regs.py per generà interfacce persunalizati per leghje è scrive i valori di registru FPGA. Pudete specificà a cumpusizioni di i registri di input è output è tippi quandu generà u output files.
Interagisce cù i Registri
Pudete leghje o scrive in ogni numeru di registri in u vostru disignu FPGA utilizendu u modulu VHDL generatu è u script Python. I registri accessibuli ponu avè tipi cum'è std_logic, std_logic_vector, signed, o unsigned.
Licenza
- A licenza MIT copre i requisiti di copyright di u codice fonte è i termini di usu. Vede u LICENSE.txt file in u Zip file per i dettagli.
Changelog
- Questi cambiamenti riferenu à u prugettu files, è stu documentu hè aghjurnatu in cunseguenza
Versione | Rimarche |
1.0.0 | Liberazione iniziale |
1.0.1 | Fixed bug di riferenza "auto" mancante quandu importava cum'è uart_regs.py cum'è un modulu Python. Cambiatu a stampa falluta di scrittura in eccezzioni à
evite di stampà à a cunsola quandu eseguisce cum'è un modulu impurtatu. |
1.0.2 | Fix per l'errore Vivado [Synth 8-248] quandu ùn ci sò micca regs di modu fora. |
1.0.3 | Fix Vivado Linter avvisu: Registru hà attivatu guidatu da
reset sincronu |
1.0.4 | Fix u casu di u cantonu quandu riceve una parolla malformata cù u caratteru di escape cum'è l'ultimu byte. A prossima parolla seria ancu persa perchè ùn avemu micca sguassatu recv_data_prev_is_escape quandu vultemu in IDLE.
U script gen_uart_regs.py permette avà solu nomi reg unichi. |
Descrizzione
- Stu documentu descrive i seguenti files è cartulare:
- gen_uart_regs.py
- generate/uart_regs.vhd
- generate/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/
- U script gen_uart_regs.py è supportu VHDL files in stu prughjettu permettenu di generà interfacce persunalizati per leghje è scrive valori di registru FPGA di varii tipi è larghezze cù UART.
- Pudete aduprà u modulu VHDL generatu è u script Python per leghje o scrive in ogni numeru di registri in u vostru disignu. I registri accessibili UART ponu avè i tipi std_logic, std_logic_vector, signed, o unsigned.
- Pudete decide nantu à a cumpusizioni precisa di i registri di input è output è tippi quandu generà u output files usendu u script gen_uart_regs.py.
- I script Python sò stati creati parzialmente cù l'aiutu di l'uttellu di intelligenza artificiale ChatGPT, mentre chì u codice VHDL hè artighjanatu.
Requisiti
- I script in stu prughjettu deve esse eseguitu attraversu un interprete Python 3 è u pacchettu Pyserial deve esse installatu.
- Pudete installà pyserial attraversu Pip utilizendu stu cumandamentu: pip install pyserial
Protocolu
- U VHDL files è Python script utilizanu un protocolu di data-framing cù quattru cuntrollu
Nome | Valore | Cumentu |
READ_REQ | 0x0A | Cumanda da l'ospite à l'FPGA per inizià una scrittura
sequenza per rinvià tutti i registri nantu à UART |
START_SCRIVI | 0x0B | Marca u principiu di una sequenza di scrittura in l'una o l'altra
direzzione |
END_SCRIVI | 0x0C | Marca a fine di una sequenza di scrittura in ogni direzzione |
FUGA | 0x0D | Carattere di escape utilizatu per scappà qualsiasi parolle di cuntrollu, cumpresu u caratteru ESCAPE stessu, quandu si prisentanu cum'è dati trà i marcatori START_WRITE è END_WRITE. |
Ogni byte READ_REQ senza escape mandatu à a FPGA hè una struzzione per rinvià tutti i so registri accessibili à UART (inputs è outputs) à l'ospite nantu à UART. Stu cumandamentu hè generalmente emessu solu da u script uart_regs.py.
Dopu avè ricivutu stu cumandamentu, a FPGA risponderà mandendu u cuntenutu di tutti i registri à l'ospite. Prima, i signali di input, dopu i signali di output. Se e so lunghezze ùn aghjunghjenu micca un multiplu di 8 bits, i bits più bassi di l'ultimu byte seranu zeri padded.
Una sequenza di scrittura principia sempre cù u byte START_WRITE è finisce cù u byte END_WRITE. Ogni byte trà quelli sò cunsiderati cum'è byte di dati. Se qualsiasi byte di dati anu u listessu valore cum'è un caratteru di cuntrollu, u byte di dati deve esse scappatu. Questu significa mandà un caratteru ESCAPE extra prima di u byte di dati per indicà chì hè veramente dati.
Se un START_WRITE senza escape arriva in ogni locu in u flussu di bytes, hè cunsideratu u principiu di una sequenza di scrittura. U modulu uart_regs_backend usa sta informazione per resynchronize in casu chì a cumunicazione esce da sincronia.
gen_uart_regs.py
- Questu hè u script chì duvete principià per generà l'interfaccia. Quì sottu hè una screenshot di u menù d'aiutu chì pudete uttene in esecuzione: python gen_uart_regs.py -h
- Per generà una interfaccia persunalizata, duvete eseguisce u script cù ognunu di i vostri registri controlabili UART desiderati elencati cum'è argumenti. I tipi dispunibuli sò std_logic, std_logic_vector, unsigned, è signed.
- U modu predeterminatu (direzzione) hè in è u tipu predeterminatu hè std_logic_vector salvu chì u registru hè di lunghezza: 1. Allora, serà predeterminatu à std_logic.
- Cusì, sè vo vulete creà un signalu di input std_logic, pudete aduprà qualsiasi di sti argumenti:
- my_sl = 1
- my_sl=1:in
- my_sl=1:in:std_logic
- Tutte e varianti di sopra saranu in u script chì genera stu signalu accessibile à UART:
- Eseguimu u script cù argumenti per generà una interfaccia cù parechji registri di direzzione, lunghezze è tipi diffirenti
Generatu files
- Una corsa riescita di u script gen_uart_regs.py pruducerà un cartulare di output chjamatu generatu cù i trè files elencati quì sottu. S'elli esistenu digià, seranu soprascritti.
- generate/uart_regs.vhd
- generate/uart_regs.py
- generated/instantiation_template.vho
- uart_regs.vhd
- Questu hè u modulu di l'interfaccia persunalizata generata da u script. Avete bisognu di instantiate in u vostru disignu, induve pò accede à i registri chì vulete cuntrullà cù UART.
- Tuttu ciò chì sopra à a sezione "– UART accessibule registri" serà identicu per ogni modulu uart_regs, mentri a cumpusizioni di i signali di u portu sottu quella linea dipende da l'argumenti dati à u script generatore.
- U listinu quì sottu mostra l'entità per u modulu uart_regs risultatu da u cumandimu generate example mostra in u gen_uart_regs.py secti
- Ùn avete bisognu di sincronizà u signalu uart_rx, cum'è questu hè trattatu in u uart_rx. modulu.
- Quandu u modulu riceve una dumanda di lettura, catturarà i valori di tutti i segnali di input è output in u ciclu di clock attuale. L'istantanea istantanea hè poi mandata à l'ospitu nantu à UART.
- Quandu succede una scrittura, tutti i registri di output sò aghjurnati cù i novi valori in u stessu ciclu di clock. Ùn hè micca pussibule di cambià i valori di u signale di output individualmente.
- In ogni casu, u script uart_regs.py permette à l'utilizatore per aghjurnà solu i outputs selezziunati prima di leghje i valori attuali di tutti i registri. Dopu scrive tutti i valori, cumpresi quelli aghjurnati.
- uart_regs.py
- U generatu/uart_regs.py file hè generatu inseme cù u modulu VHDL uart_regs è cuntene l'infurmazione di u registru persunalizata in l'intestazione di u file. Cù stu script, pudete leghje o scrive à i vostri registri persunalizati cun facilità.
Menu d'aiutu
- Scrivite python uart_regs.py -h per stampà u menu d'aiutu:
Configurazione di u portu UART
- U script hà opzioni per stabilisce u portu UART utilizendu u switch -c. Questu travaglia in Windows è Linux. Ponelu à unu di i porti dispunibuli listati in u menù d'aiutu. Per stabilisce un portu predeterminatu, pudete ancu edità a variabile UART_PORT in u script uart_regs.py.
Elencu di i registri
- L'infurmazione nantu à a mappa di u registru hè posta in l'intestazione di u script uart_regs.py da u script gen_uart_regs.py. Pudete listà i registri dispunibuli cù u cambiamentu -l, cum'è vistu quì sottu. Questu hè un cumandamentu lucale è ùn interagisce micca cù u FPGA di destinazione
Scrive à i registri
- Pudete scrive à qualsiasi di i registri di u modu out usendu u switch -w. Fornite u nome di u registru seguitu da "=" è u valore datu cum'è un valore binariu, esadecimale o decimale, cum'è mostratu quì sottu.
- Nota chì l'implementazione VHDL richiede u script per scrive tutti i registri di output simultaneamente. Dunque, se ùn specificate micca un inseme cumpletu di registri di output, u script hà da fà prima una lettura da u FPGA di destinazione è dopu aduprà quelli valori per quelli chì mancanu. U risultatu serà chì solu i registri specificati cambianu
- Quandu fate una scrittura, tutti i registri specificati cambianu durante u stessu ciculu di clock, micca quandu sò ricevuti nantu à UART.
Lettura di i registri
- Aduprate l'interruttore -r per leghje tutti i valori di u registru, cum'è mostra sottu. I valori marcati in giallu sò quelli chì avemu cambiatu in a scrittura precedente example
- Ogni lettura mostra una snapshot istantanea di tutti i registri di input è output. Sò tutti sampguidatu durante u listessu ciclu di clock
Debugging
Aduprate u -d switch cù qualsiasi di l'altri switch si avete bisognu di debug u protocolu di cumunicazione. Allora, u script stamparà tutti i bytes mandati è ricevuti è tag elli si sò caratteri di cuntrollu, cum'è mostra sottu.
Utilizà l'interfaccia in altri script Python
- U script uart_regs.py cuntene una classa UartRegs chì pudete facilmente aduprà cum'è l'interfaccia di cumunicazione in altri script Python persunalizati. Simply import the class, create an object of it, and begin using the methods, as shown below.
- Riferite à i docstrings in u codice Python per u metudu è e descrizzioni è i tipi di valore di ritornu.
instantiation_template.vho
- U mudellu di istanza hè generatu cù u modulu uart_regs per a vostra comodità. Per risparmià u tempu di codificazione, pudete copià l'istanciazione di u modulu è e dichjarazioni di signale in u vostru disignu.
RTL staticu files
- Avete bisognu di include i seguenti files in u vostru prughjettu VHDL in modu chì sò compilati in a listessa biblioteca cum'è u modulu uart_regs:
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
- U modulu uart_regs_backend implementa e macchine à stati finiti chì clock in and out the register data. Utiliza i moduli uart_rx è uart_tx per trattà a cumunicazione UART cù l'ospite.
Prughjetti Demo
- Ci sò trè prughjetti demo inclusi in u Zip file. Permettenu di cuntrullà i periferichi nantu à e diverse schede è ancu uni pochi di registri interni più grande.
- I cartulare demo include uart_regs.vhd è uart_regs.py pre-generati filehè fatta apposta per quelli disinni.
Lattice iCEstick
- U cartulare demo/icecube2_icestick cuntene una implementazione di demo d'accessu à u registru per a scheda Lattice iCEstick FPGA.
- Per eseguisce u prucessu di implementazione, apre u demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file in u software di cuncepimentu Lattice iCEcube2.
- Dopu avè caricatu u prugettu in a GUI iCEcube2, cliccate Strumenti → Eseguitu tuttu per generà u bitmap di prugrammazione. file.
- Pudete utilizà l'uttellu Lattice Diamond Programmer Standalone per cunfigurà a FPGA cù u bitmap generatu file. Quandu Diamond Programmer si apre, cliccate Apertura un prughjettu di prugrammatore esistente in u dialogu di benvenutu.
- Selezziunà u prugettu file trovu in u Zip: demo/lattice_icestick/diamond_programmer_project.xcf è cliccate OK.
- Dopu à carica u prughjettu, cliccate nantu à i trè punti File Colonna di nome, cum'è mostra sopra. Navigate per selezziunate u bitmap file chì avete generatu in iCEcube2
- demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
- Infine, cù a scheda iCEstick cunnessa in un portu USB in u vostru urdinatore, selezziunate Design→Program per programà u SPI flash è cunfigurà l'FPGA.
- Pudete avà prucede à leghje è scrive i registri usendu u script demo/lattice_icestick/uart_regs.py cum'è descrittu in a sezione uart_regs.py.
Xilinx Digilent Arty A7-35T
- Pudete truvà l'implementazione demo per u kit di valutazione Artix-7 35T Arty FPGA in u cartulare demo/arty_a7_35.
- Aprite Vivado è navigate à l'estratti files utilizendu a cunsola Tcl truvata in u fondu di l'interfaccia GUI. Scrivite stu cumandamentu per entre in u cartulare di u prughjettu demo:
- cd /demo/arty_a7_35/vivado_proj/
- Eseguite l'script create_vivado_proj.tcl Tcl per rigenerate u prughjettu Vivado:
- fonte ./create_vivado_proj.tcl
- Cliccate Generate Bitstream in a barra laterale per eseguisce tutti i passi di implementazione è generà u bitstream di prugrammazione file.
- Infine, cliccate Open Hardware Manager è prugrammate u FPGA attraversu a GUI.
- Pudete avà prucede à leghje è scrive i registri usendu u script demo/arty_a7_35/uart_regs.py cum'è deskrittu in a sezione uart_regs.py.
Xilinx Digilent Arty S7-50
- Pudete truvà l'implementazione demo per l'Arty S7: Spartan-7 FPGA scheda di sviluppu in u cartulare demo/arty_s7_50.
- Aprite Vivado è navigate à l'estratti files utilizendu a cunsola Tcl truvata in u fondu di l'interfaccia GUI. Scrivite stu cumandamentu per entre in u cartulare di u prughjettu demo:
- cd /demo/arty_s7_50/vivado_proj/
- Eseguite l'script create_vivado_proj.tcl Tcl per rigenerate u prughjettu Vivado:
- fonte ./create_vivado_proj.tcl
- Cliccate Generate Bitstream in a barra laterale per eseguisce tutti i passi di implementazione è generà u bitstream di prugrammazione file.
- Infine, cliccate Open Hardware Manager è prugrammate u FPGA attraversu a GUI.
- Pudete avà prucede à leghje è scrive i registri usendu u script demo/arty_s7_50/uart_regs.py cum'è deskrittu in a sezione uart_regs.py.
Implementazione
- Ùn ci sò micca esigenze di implementazione specifiche.
Custrizzioni
- Nisuna limitazione di timing specificu hè necessariu per stu disignu perchè l'interfaccia UART hè lenta è trattata cum'è una interfaccia asincrona.
- L'input uart_rx à u modulu uart_regs hè sincronizatu in u modulu uart_rx. Cusì, ùn hà micca bisognu à esse sincronizatu in u modulu di livellu superiore.
Problemi cunnisciuti
- Pudete bisognu di resettate u modulu prima di pudè esse usatu, secondu chì a vostra architettura FPGA supporta i valori di registru predeterminati.
Più infurmazione
- Copyright VHDLwhiz.com
FAQs
Q: Chì ghjè u scopu di u generatore di interfaccia di prova UART?
A: U generatore di l'interfaccia di teste UART permette a creazione di interfacce persunalizati per interagisce cù i valori di registru FPGA utilizendu a cumunicazione UART.
Q: Cumu stallà u pacchettu Pyserial?
A: Pudete installà Pyserial attraversu Pip cù u cumandimu: pip install pyserial
Documenti / Risorse
![]() |
VHDLwhiz UART Test Interface Generator [pdfManuale d'usu UART Test Interface Generator, Test Interface Generator, Interface Generator, Generator |