VHDLwhiz-logo

VHDLwhiz UART tès entèfas dèlko

VHDLwhiz-UART-tès-entèfas-dèlko-pwodwi

Enfòmasyon sou pwodwi

Espesifikasyon:

  • Non pwodwi: VHDL anrejistre dèlko koòdone tès UART
  • Vèsyon: 1.0.4
  • Dat: 18 out 2024
  • Otè: Jonas Julian Jensen
  • Pwodwi URL: Lyen pwodwi
  • Kontakte imel: jonas@vhdlwhiz.com

Deskripsyon

Pwodwi sa a pèmèt ou jenere interfaces koutim pou li ak ekri valè enskri FPGA lè l sèvi avèk UART. Modil VHDL pwodwi a ak script Python bay kapasite pou kominike avèk divès kalite rejis nan konsepsyon FPGA ou.

Kondisyon

  • Python 3 entèprèt
  • pake pyserial

Pwotokòl

Pwodwi a sèvi ak yon pwotokòl ankadre done ak kat karaktè kontwòl:

  • Non: READ_REQ, Valè: 0x0A - Kòmandman soti nan lame a bay FPGA a kòmanse yon sekans ekri voye tout rejis tounen sou UART.
  • Non: START_EKRI, Valè: 0x0B - Make kòmansman yon sekans ekri nan nenpòt direksyon
  • Non: END_WRITE, Valè: 0x0C - Make fen yon sekans ekri nan nenpòt direksyon
  • Non: CHAPE, Valè: 0x0D - karaktè chape yo itilize pou chape mo kontwòl

Enstriksyon Itilizasyon Pwodwi

Kouri Scripts yo

Pou itilize pwodwi a, asire w ke ou gen Python 3 enstale ak pake Pyserial la. Kouri scripts yo atravè yon entèprèt Python 3.

Jenere Custom Interfaces

Sèvi ak script gen_uart_regs.py pou jenere koòdone koutim pou li ak ekri valè rejis FPGA yo. Ou ka presize konpozisyon an nan anrejistreman opinyon ak pwodiksyon ak kalite lè jenere pwodiksyon an files.

Entèaksyon ak Rejis yo

Ou ka li oswa ekri nan nenpòt kantite rejis nan konsepsyon FPGA ou lè l sèvi avèk modil VHDL ki te pwodwi a ak script Python. Rejis aksesib yo ka gen kalite tankou std_logic, std_logic_vector, signed, oswa unsigned.

Lisans

  • Lisans MIT la kouvri kondisyon dwadotè kòd sous la ak kondisyon itilizasyon. Gade nan LICENSE.txt file nan Zip la file pou detay.

Chanjman

  • Chanjman sa yo refere a pwojè a files, epi dokiman sa a mete ajou kòmsadwa
Version Remak
1.0.0 Premye lage
1.0.1 Te fikse ensèk referans "pwòp tèt ou" ki manke lè w ap enpòte kòm uart_regs.py kòm yon modil Python. Chanje ekri enprime echwe nan eksepsyon nan

evite enprime nan konsole a lè w ap kouri kòm yon modil enpòte.

1.0.2 Ranje pou Vivado [Synth 8-248] erè lè pa gen okenn règ mòd soti.
1.0.3 Ranje Vivado Linter avètisman: Enskri gen pèmèt kondwi pa

reset synchrone

1.0.4 Ranje ka kwen an lè w ap resevwa yon mo malfòme ak karaktè chape kòm dènye byte a. Pwochen mo a ta pèdi tou paske nou pa t klè recv_data_prev_is_escape lè nou retounen nan IDLE.

Gen_uart_regs.py script la kounye a pèmèt sèlman non reg inik.

Deskripsyon

  • Dokiman sa a dekri sa ki annapre yo files ak dosye:
  • 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/
  • Gen_uart_regs.py script la ak sipò VHDL files nan pwojè sa a pèmèt ou jenere interfaces koutim pou lekti ak ekri valè enskri FPGA nan divès kalite ak lajè lè l sèvi avèk UART.
  • Ou ka itilize modil VHDL ki te pwodwi a ak script Python pou li oswa ekri sou nenpòt kantite rejis nan konsepsyon ou. Rejis aksesib UART yo ka gen kalite std_logic, std_logic_vector, ki siyen oswa ki pa siyen.
  • Ou ka deside sou konpozisyon an egzak nan rejis opinyon ak pwodiksyon ak kalite lè jenere pwodiksyon an files itilize script gen_uart_regs.py.
  • Scripts Python yo te kreye pasyèlman avèk èd nan zouti entèlijans atifisyèl ChatGPT, pandan y ap kòd VHDL la atizanal.

Kondisyon

  • Scripts yo nan pwojè sa a dwe kouri atravè yon entèprèt Python 3 epi yo dwe enstale pake Pyserial la.
  • Ou ka enstale pyserial atravè Pip lè l sèvi avèk lòd sa a: pip enstale pyserial

Pwotokòl

  • VHDL la files ak script Python itilize yon pwotokòl done-ankadreman ak kat kontwòl
Non Valè Kòmantè
READ_REQ 0x0A Kòmandman soti nan lame a nan FPGA a kòmanse yon ekri

sekans pou voye tout rejis tounen sou UART

START_EKRI 0x0B Make kòmansman yon sekans ekri nan swa

direksyon

END_EKRI 0x0C Make fen yon sekans ekri nan nenpòt direksyon
CHAPE 0x0D Karaktè chape yo itilize pou chape nenpòt nan mo kontwòl yo, enkli karaktè ESCAPE li menm, lè yo parèt kòm done ant makè START_WRITE ak END_WRITE yo.

Nenpòt octet READ_REQ ki pa escaped voye bay FPGA a se yon enstriksyon pou voye tout rejis UART-aksesib li yo (antre ak rezilta) tounen nan lame a sou UART. Kòmand sa a anjeneral sèlman bay pa script uart_regs.py.
Lè yo resevwa lòd sa a, FPGA a pral reponn lè li voye kontni tout rejis yo tounen bay lame a. Premyèman, siyal yo opinyon, Lè sa a, siyal yo pwodiksyon. Si longè yo pa ajoute jiska yon miltip 8 bit, bit ki pi ba yo nan dènye byte a pral zewo Matlasye.
Yon sekans ekri toujou kòmanse ak START_WRITE byte a epi fini ak END_WRITE byte la. Nenpòt byte ant sa yo konsidere kòm byte done. Si nenpòt byte done gen menm valè ak yon karaktè kontwòl, yo dwe chape done byte a. Sa vle di voye yon karaktè ESCAPE siplemantè anvan byte done a pou endike ke li aktyèlman done.
Si yon START_WRITE ki pa chape rive nenpòt kote nan kouran bytes, li konsidere kòm kòmansman yon sekans ekri. Modil uart_regs_backend la sèvi ak enfòmasyon sa yo pou resenkronize nan ka kominikasyon an soti nan senkronize.

gen_uart_regs.py

  • Sa a se script ou dwe kòmanse ak jenere koòdone a. Anba a se yon Ekran nan meni èd la ke ou ka jwenn lè w kouri: python gen_uart_regs.py -hVHDLwhiz-UART-Tès-Entèfas-Generator-FIG-1
  • Pou jenere yon koòdone koutim, ou dwe kouri script la ak chak rejis ou vle kontwole UART ki nan lis kòm agiman. Kalite ki disponib yo se std_logic, std_logic_vector, unsigned, ak siyen.
  • Mòd default (direksyon) se nan ak kalite default la se std_logic_vector sof si rejis la se nan longè: 1. Lè sa a, li pral default nan std_logic.
  • Kidonk, si ou vle kreye yon siyal opinyon std_logic, ou ka itilize nenpòt nan agiman sa yo:
  • my_sl=1
  • my_sl=1:nan
  • my_sl=1:in:std_logic
  • Tout varyant ki anwo yo pral lakòz script la jenere siyal UART-aksesib sa a:VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-2
  • Ann kouri script la ak agiman pou jenere yon koòdone ak plizyè rejis nan direksyon, longè ak kalite diferan.VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-3

Jenere files

  • Yon siksè kouri nan script gen_uart_regs.py a pral pwodwi yon katab pwodiksyon yo te rele pwodwi ak twa yo. fileyo ki nan lis anba a. Si yo deja egziste, yo pral ranplase yo.
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • generated/instantiation_template.vho
  • uart_regs.vhd
  • Sa a se modil la koòdone koutim ki te pwodwi pa script la. Ou bezwen enstansye li nan konsepsyon ou a, kote li ka jwenn aksè nan rejis ou vle kontwole lè l sèvi avèk UART.
  • Tout bagay ki anlè seksyon "– UART aksesib rejis" yo pral idantik pou chak modil uart_regs, pandan y ap konpozisyon siyal pò ki anba liy sa a depann de agiman yo bay script dèlko a.
  • Lis ki anba a montre antite pou modil uart_regs ki soti nan lòd jenere egzanp lanample yo montre nan gen_uart_regs.py seksyonVHDLwhiz-UART-Tès-Entèfas-Generator-FIG-4
  • Ou pa bezwen senkronize siyal uart_rx la, jan sa okipe nan uart_rx la. modil.
  • Lè modil la resevwa yon demann li, li pral pran valè tout siyal opinyon ak pwodiksyon nan sik revèy aktyèl la. Lè sa a, snapshot la enstantane voye bay lame a sou UART.
  • Lè yon ekri rive, tout rejis pwodiksyon yo mete ajou ak nouvo valè yo nan menm sik revèy la. Li pa posib pou chanje valè siyal pwodiksyon endividyèlman.
  • Sepandan, script uart_regs.py a pèmèt itilizatè a mete ajou sèlman rezilta yo chwazi pa premye li tounen valè aktyèl yo nan tout rejis yo. Lè sa a, li ekri tounen tout valè, ki gen ladan yo mete ajou yo.
  • uart_regs.py
  • A generated/uart_regs.py file se pwodwi ansanm ak modil VHDL uart_regs epi li gen enfòmasyon rejis koutim nan tèt la. file. Avèk script sa a, ou ka li oswa ekri nan rejis koutim ou yo avèk fasilite.

Meni èd

  • Tape python uart_regs.py -h pou enprime meni èd la:VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-5

Mete pò UART la

  • Script la gen opsyon yo mete pò UART la lè l sèvi avèk switch la -c. Sa ap travay sou Windows ak Linux. Mete li nan youn nan pò ki disponib ki nan lis nan meni èd la. Pou mete yon pò default, ou kapab tou edite varyab UART_PORT nan script uart_regs.py.

Lis enskri

  • Gen script gen_uart_regs.py mete enfòmasyon sou kat rejis la nan tèt script uart_regs.py. Ou ka lis rejis ki disponib yo ak switch la -l, jan yo wè anba a. Sa a se yon lòd lokal epi li pa pral kominike avèk FPGA sib laVHDLwhiz-UART-Tès-Entèfas-Generator-FIG-6

Ekri nan rejis yo

  • Ou ka ekri nan nenpòt nan rejis mòd yo lè w itilize switch la -w. Bay non rejis la ki te swiv pa "=" ak valè yo bay kòm yon valè binè, egzadesimal oswa desimal, jan yo montre anba a.VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-7
  • Remake byen ke aplikasyon VHDL mande pou script la ekri tout rejis pwodiksyon an menm tan. Se poutèt sa, si ou pa presize yon seri konplè rejis pwodiksyon, script la pral premye fè yon lekti nan FPGA sib la epi sèvi ak valè sa yo pou sa ki manke yo. Rezilta a pral ke sèlman rejis espesifye yo chanje
  • Lè ou fè yon ekri, tout rejis espesifye yo pral chanje pandan menm sik revèy la, pa le pli vit ke yo resevwa yo sou UART.

Lekti rejis yo

  • Sèvi ak -r switch la pou li tout valè anrejistre, jan yo montre anba a. Valè ki make an jòn se sa nou te chanje nan ekri anvan an ansyenampleVHDLwhiz-UART-Tès-Entèfas-Generator-FIG-8
  • Chak lekti montre yon snapshot enstantane nan tout anrejistreman antre ak pwodiksyon. Yo tout sampdirije pandan menm sik revèy la

Debogaj

Sèvi ak -d switch la ak nenpòt nan lòt switch yo si ou bezwen debug pwotokòl kominikasyon an. Lè sa a, script la pral enprime soti tout voye ak resevwa bytes ak tag yo si yo se karaktè kontwòl, jan yo montre anba a.VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-9

Sèvi ak koòdone nan lòt scripts Python

  • Script uart_regs.py a gen yon klas UartRegs ke ou ka fasilman itilize kòm koòdone kominikasyon nan lòt scripts Python koutim. Senpleman enpòte klas la, kreye yon objè nan li, epi kòmanse itilize metòd yo, jan yo montre anba a.VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-10
  • Gade nan docstrings yo nan kòd Python pou metòd ak deskripsyon ak kalite valè retounen.

instantiation_template.vho

  • Modèl enstansyasyon an pwodwi ansanm ak modil uart_regs pou konvenyans ou. Pou ekonomize tan kodaj, ou ka kopye enstansyasyon modil la ak deklarasyon siyal nan konsepsyon ou.VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-11VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-12

RTL estatik files

  • Ou bezwen mete sa ki annapre yo files nan pwojè VHDL ou a pou yo konpile nan menm bibliyotèk ak modil uart_regs la:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Modil uart_regs_backend la aplike machin eta fini ki fè antre epi soti done anrejistre yo. Li itilize modil uart_rx ak uart_tx pou okipe kominikasyon UART ak lame a.

Pwojè Demo

  • Gen twa pwojè Demo ki enkli nan Zip la file. Yo kite ou kontwole periferik yo sou diferan ankadreman yo ansanm ak kèk pi gwo rejis entèn yo.
  • Dosye Demo yo gen ladan uart_regs.vhd ak uart_regs.py ki te deja pwodwi fileyo te fè espesyalman pou desen sa yo.

Lasi iCEstick

  • Katab Demo/icecube2_icestick la gen yon aplikasyon Demo aksè enskri pou tablo Lattice iCEstick FPGA.
  • Pou kouri atravè pwosesis aplikasyon an, louvri demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project. file nan lojisyèl konsepsyon Lattice iCEcube2.
  • Apre w fin chaje pwojè a nan entèfas iCEcube2 a, klike sou Zouti → Kouri tout pou jenere bitmap pwogramasyon an. file.
  • Ou ka itilize zouti otonòm pwogramè Lattice Diamond la pou konfigirasyon FPGA ak bitmap ki pwodui file. Lè Diamond Programmer ouvri, klike sou Louvri yon pwojè pwogramè ki deja egziste nan bwat dyalòg akeyi.
  • Chwazi pwojè file jwenn nan Zip la: demo/lattice_icestick/diamond_programmer_project.xcf epi klike sou OK.VHDLwhiz-UART-Tès-Entèfas-Generator-FIG-13
  • Apre pwojè a chaje, klike sou twa pwen yo nan File Non kolòn, jan yo montre pi wo a. Navige pou chwazi bitmap la file ke ou te pwodwi nan iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Finalman, ak tablo iCEstick la konekte nan yon pò USB sou òdinatè w lan, chwazi Design → Pwogram pou pwograme flash SPI a epi konfigirasyon FPGA la.
  • Kounye a ou ka kontinye li ak ekri rejis yo lè w itilize script demo/lattice_icestick/uart_regs.py jan sa dekri nan seksyon uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Ou ka jwenn aplikasyon Demo pou Artix-7 35T Arty FPGA evalyasyon twous la nan katab demo/arty_a7_35.
  • Louvri Vivado epi navige nan ekstrè a files lè l sèvi avèk konsole Tcl yo jwenn nan pati anba a nan koòdone entèfas. Tape lòd sa a pou antre nan katab pwojè Demo a:
  • cd /demo/arty_a7_35/vivado_proj/
  • Egzekite script create_vivado_proj.tcl Tcl pou rejenere pwojè Vivado:
  • sous ./create_vivado_proj.tcl
  • Klike sou Jenere Bitstream nan ankadre a pou kouri atravè tout etap aplikasyon yo epi jenere Bitstream pwogramasyon an file.
  • Finalman, klike sou Open Hardware Manager epi pwograme FPGA a atravè entèfas.
  • Kounye a ou ka kontinye li ak ekri rejis yo lè w itilize script demo/arty_a7_35/uart_regs.py jan sa dekri nan seksyon uart_regs.py.

Xilinx Digilent Arty S7-50

  • Ou ka jwenn aplikasyon Demo pou Arty S7: Spartan-7 FPGA devlopman tablo a nan katab Demo/arty_s7_50.
  • Louvri Vivado epi navige nan ekstrè a files lè l sèvi avèk konsole Tcl yo jwenn nan pati anba a nan koòdone entèfas. Tape lòd sa a pou antre nan katab pwojè Demo a:
  • cd /demo/arty_s7_50/vivado_proj/
  • Egzekite script create_vivado_proj.tcl Tcl pou rejenere pwojè Vivado:
  • sous ./create_vivado_proj.tcl
  • Klike sou Jenere Bitstream nan ankadre a pou kouri atravè tout etap aplikasyon yo epi jenere Bitstream pwogramasyon an file.
  • Finalman, klike sou Open Hardware Manager epi pwograme FPGA a atravè entèfas.
  • Kounye a ou ka kontinye li ak ekri rejis yo lè w itilize script demo/arty_s7_50/uart_regs.py jan sa dekri nan seksyon uart_regs.py.

Aplikasyon

  • Pa gen okenn kondisyon espesifik aplikasyon.

Kontrent

  • Pa gen okenn kontrent distribisyon espesifik ki nesesè pou konsepsyon sa a paske koòdone UART la ralanti epi trete kòm yon koòdone asynchrone.
  • Antre uart_rx nan modil uart_regs la senkronize nan modil uart_rx la. Kidonk, li pa bezwen senkronize nan modil nan nivo siperyè.

Pwoblèm li te ye

  • Ou ka bezwen reset modil la anvan li ka itilize, tou depann de si wi ou non achitekti FPGA ou a sipòte valè rejis default yo.

Plis enfòmasyon

FAQ

K: Ki objektif dèlko koòdone tès UART la?

A: Dèlko koòdone tès UART pèmèt pou kreyasyon entèfas koutim pou kominike avèk valè enskri FPGA lè l sèvi avèk kominikasyon UART.

K: Kouman pou mwen enstale pake Pyserial la?

A: Ou ka enstale Pyserial atravè Pip lè l sèvi avèk kòmandman an: pip enstale pyserial

Dokiman / Resous

VHDLwhiz UART tès entèfas dèlko [pdfManyèl Itilizatè
Dèlko entèfas tès UART, dèlko entèfas tès, dèlko entèfas, dèlko

Referans

Kite yon kòmantè

Adrès imel ou p ap pibliye. Jaden obligatwa yo make *