VHDLwhiz-logo

Gjeneratori i ndërfaqes testuese VHDLwhiz UART

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

Informacioni i produktit

Specifikimet:

  • Emri i produktit: VHDL regjistron gjeneratorin e ndërfaqes së testit UART
  • Versioni: 1.0.4
  • Data: 18 gusht 2024
  • Autor: Jonas Julian Jensen
  • Produkti URL: Lidhja e produktit
  • Email kontakti: jonas@vhdlwhiz.com

Përshkrimi

Ky produkt ju lejon të gjeneroni ndërfaqe të personalizuara për leximin dhe shkrimin e vlerave të regjistrit FPGA duke përdorur UART. Moduli i gjeneruar VHDL dhe skripti Python ofrojnë aftësinë për të bashkëvepruar me lloje të ndryshme regjistrash në dizajnin tuaj FPGA.

Kërkesat

  • Interpretuesi Python 3
  • paketim pyserial

Protokolli

Produkti përdor një protokoll të kornizës së të dhënave me katër karaktere kontrolli:

  • Emri: READ_REQ, Vlera: 0x0A – Komanda nga hosti në FPGA për të nisur një sekuencë shkrimi për të dërguar të gjithë regjistrat përsëri mbi UART
  • Emri: START_SHKRUAJ, Vlera: 0x0B – Shënon fillimin e një sekuence shkrimi në secilin drejtim
  • Emri: END_SHKRUAJ, Vlera: 0x0C – Shënon fundin e një sekuence shkrimi në secilin drejtim
  • Emri: SHKATIMI, Vlera: 0x0D - Karakteri i arratisjes që përdoret për t'i shpëtuar fjalëve të kontrollit

Udhëzimet e përdorimit të produktit

Ekzekutimi i Skripteve

Për të përdorur produktin, sigurohuni që të keni të instaluar Python 3 dhe paketën Pyserial. Drejtoni skriptet përmes një interpretuesi Python 3.

Gjenerimi i ndërfaqeve të personalizuara

Përdorni skriptin gen_uart_regs.py për të gjeneruar ndërfaqe të personalizuara për leximin dhe shkrimin e vlerave të regjistrit FPGA. Ju mund të specifikoni përbërjen e regjistrave dhe llojeve të hyrjes dhe daljes kur gjeneroni daljen files.

Ndërveprimi me regjistrat

Ju mund të lexoni ose shkruani në çdo numër regjistrash në dizajnin tuaj FPGA duke përdorur modulin e krijuar VHDL dhe skriptin Python. Regjistrat e aksesueshëm mund të kenë lloje të tilla si std_logic, std_logic_vector, të nënshkruar ose të panënshkruar.

Licenca

  • Licenca MIT mbulon kërkesat për të drejtën e autorit dhe kushtet e përdorimit të kodit burimor. Referojuni LICENSE.txt file në Zip file për detaje.

Ndryshim

  • Këto ndryshime i referohen projektit files, dhe ky dokument përditësohet në përputhje me rrethanat
Versioni Vërejtje
1.0.0 Lëshimi fillestar
1.0.1 Rregulloi gabimin e munguar të referencës "vetë" kur importohet si uart_regs.py si modul Python. Printimi i dështuar i shkrimit u ndryshua në përjashtim në

shmangni printimin në tastierë kur funksiononi si modul i importuar.

1.0.2 Rregulloni gabimin e Vivado [Synth 8-248] kur nuk ka regjistra të modalitetit të daljes.
1.0.3 Fix Vivado Linter paralajmërim: Regjistri është aktivizuar nga

rivendosje sinkron

1.0.4 Rregulloni kutinë e këndit kur merrni një fjalë të keqformuar me karakterin e ikjes si bajtin e fundit. Fjala tjetër do të humbet gjithashtu sepse nuk e fshimë recv_data_prev_is_escape kur ktheheshim në IDLE.

Skripti gen_uart_regs.py tani lejon vetëm emra unikë reg.

Përshkrimi

  • Ky dokument përshkruan sa vijon files dhe dosjet:
  • gen_uart_regs.py
  • gjeneruar/uart_regs.vhd
  • gjeneruar/uart_regs.py
  • gjeneruar/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/
  • Skripti gen_uart_regs.py dhe mbështetja e VHDL files në këtë projekt ju lejojnë të gjeneroni ndërfaqe të personalizuara për leximin dhe shkrimin e vlerave të regjistrit FPGA të llojeve dhe gjerësive të ndryshme duke përdorur UART.
  • Ju mund të përdorni modulin e krijuar VHDL dhe skriptin Python për të lexuar ose shkruar në çdo numër regjistrash në dizajnin tuaj. Regjistrat e aksesueshëm në UART mund të kenë llojet std_logic, std_logic_vector, të nënshkruar ose të panënshkruar.
  • Ju mund të vendosni për përbërjen e saktë të regjistrave dhe llojeve të hyrjes dhe daljes kur gjeneroni daljen files duke përdorur skriptin gen_uart_regs.py.
  • Skriptet Python u krijuan pjesërisht me ndihmën e mjetit të inteligjencës artificiale ChatGPT, ndërsa kodi VHDL është i punuar me dorë.

Kërkesat

  • Skriptet në këtë projekt duhet të ekzekutohen përmes një interpretuesi Python 3 dhe duhet të instalohet paketa Pyserial.
  • Ju mund të instaloni pyserial përmes Pip duke përdorur këtë komandë: pip install pyserial

Protokolli

  • VHDL files dhe skripti Python përdorin një protokoll të kornizës së të dhënave me katër kontrolle
Emri Vlera Koment
READ_REQ 0x0A Urdhëroni nga hosti në FPGA për të filluar një shkrim

sekuenca për të dërguar të gjithë regjistrat përsëri në UART

START_SHKRUAJ 0x0B Shënon fillimin e një sekuence shkrimi në secilën prej tyre

drejtimin

END_SHKRUAJ 0x0C Shënon fundin e një sekuence shkrimi në secilin drejtim
SHKATIMI 0x0D Karakteri ikje përdoret për t'i shpëtuar ndonjë prej fjalëve të kontrollit, duke përfshirë vetë karakterin ESCAPE, kur ato shfaqen si të dhëna midis shënuesve START_WRITE dhe END_WRITE.

Çdo bajt READ_REQ i pashpjeguar i dërguar në FPGA është një udhëzim për të dërguar të gjithë regjistrat e tij të aksesueshëm nga UART (hyrjet dhe daljet) përsëri te hosti përmes UART. Kjo komandë zakonisht lëshohet vetëm nga skripti uart_regs.py.
Me marrjen e kësaj komande, FPGA do të përgjigjet duke dërguar përmbajtjen e të gjithë regjistrave përsëri te hosti. Së pari, sinjalet hyrëse, pastaj sinjalet dalëse. Nëse gjatësia e tyre nuk mblidhet në një shumëfish prej 8 bitësh, bitet e poshtme të bajtit të fundit do të mbushen me zero.
Një sekuencë shkrimi fillon gjithmonë me bajtin START_WRITE dhe përfundon me bajtin END_WRITE. Çdo bajt ndërmjet tyre konsiderohet të jetë bajtë e të dhënave. Nëse ndonjë bajt i të dhënave ka të njëjtën vlerë si një karakter kontrolli, bajtit të të dhënave duhet të shmangen. Kjo do të thotë të dërgosh një karakter shtesë ESCAPE përpara bajtit të të dhënave për të treguar se janë në të vërtetë të dhëna.
Nëse një START_WRITE i pashpjeguar arrin diku në rrjedhën e bajteve, ai konsiderohet fillimi i një sekuence shkrimi. Moduli uart_regs_backend përdor këtë informacion për të risinkronizuar në rast se komunikimi del jashtë sinkronizimit.

gen_uart_regs.py

  • Ky është skripti me të cilin duhet të filloni për të gjeneruar ndërfaqen. Më poshtë është një pamje e menysë së ndihmës që mund të merrni duke ekzekutuar: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface-Generator-FIG-1
  • Për të gjeneruar një ndërfaqe të personalizuar, duhet të ekzekutoni skriptin me secilin nga regjistrat tuaj të dëshiruar të kontrollueshëm UART të listuar si argumente. Llojet e disponueshme janë std_logic, std_logic_vector, unsigned dhe signed.
  • Modaliteti i paracaktuar (drejtimi) është në dhe lloji i parazgjedhur është std_logic_vector përveç nëse regjistri është i gjatësisë: 1. Pastaj, ai do të jetë i paracaktuar në std_logic.
  • Kështu, nëse dëshironi të krijoni një sinjal hyrës std_logic, mund të përdorni cilindo nga këto argumente:
  • my_sl=1
  • my_sl=1:in
  • my_sl=1:in:std_logic
  • Të gjitha variantet e mësipërme do të rezultojnë në skriptin që gjeneron këtë sinjal të aksesueshëm nga UART:VHDLwhiz-UART-Test-Interface-Generator-FIG-2
  • Le të ekzekutojmë skriptin me argumente për të gjeneruar një ndërfaqe me disa regjistra të drejtimeve, gjatësive dhe llojeve të ndryshmeVHDLwhiz-UART-Test-Interface-Generator-FIG-3

Gjeneruar files

  • Një ekzekutim i suksesshëm i skriptit gen_uart_regs.py do të prodhojë një dosje dalëse të quajtur gjeneruar me tre filetë listuara më poshtë. Nëse ato ekzistojnë tashmë, ato do të mbishkruhen.
  • gjeneruar/uart_regs.vhd
  • gjeneruar/uart_regs.py
  • gjeneruar/instantiation_template.vho
  • uart_regs.vhd
  • Ky është moduli i personalizuar i ndërfaqes i krijuar nga skripti. Ju duhet ta vendosni atë në modelin tuaj, ku mund të hyjë në regjistrat që dëshironi të kontrolloni duke përdorur UART.
  • Gjithçka mbi seksionin “– UART accessible registers” do të jetë identike për çdo modul uart_regs, ndërsa përbërja e sinjaleve të portit nën atë linjë varet nga argumentet e dhëna skriptit të gjeneratorit.
  • Lista më poshtë tregon entitetin për modulin uart_regs që rezulton nga komanda gjeneruese examptregohet në seksionin gen_uart_regs.pyVHDLwhiz-UART-Test-Interface-Generator-FIG-4
  • Nuk keni nevojë të sinkronizoni sinjalin uart_rx, pasi ai trajtohet në uart_rx. modul.
  • Kur moduli merr një kërkesë leximi, ai do të kapë vlerat e të gjitha sinjaleve hyrëse dhe dalëse brenda ciklit aktual të orës. Pamja e menjëhershme më pas i dërgohet hostit përmes UART.
  • Kur ndodh një shkrim, të gjithë regjistrat e daljes përditësohen me vlerat e reja brenda të njëjtit cikël orësh. Nuk është e mundur të ndryshohen individualisht vlerat e sinjalit të daljes.
  • Megjithatë, skripti uart_regs.py lejon përdoruesin të përditësojë vetëm rezultatet e zgjedhura duke lexuar së pari vlerat aktuale të të gjithë regjistrave. Më pas i shkruan të gjitha vlerat, duke përfshirë ato të përditësuara.
  • uart_regs.py
  • Gjeneruar/uart_regs.py file gjenerohet së bashku me modulin uart_regs VHDL dhe përmban informacionin e personalizuar të regjistrit në kokën e file. Me këtë skenar, ju mund të lexoni ose shkruani në regjistrat tuaj të personalizuar me lehtësi.

Menuja e ndihmës

  • Shkruani python uart_regs.py -h për të printuar menunë e ndihmës:VHDLwhiz-UART-Test-Interface-Generator-FIG-5

Vendosja e portës UART

  • Skripti ka opsione për të vendosur portën UART duke përdorur çelësin -c. Kjo funksionon në Windows dhe Linux. Vendoseni atë në një nga portat e disponueshme të listuara në menunë e ndihmës. Për të vendosur një port të paracaktuar, mund të modifikoni gjithashtu variablin UART_PORT në skriptin uart_regs.py.

Regjistrat e listimit

  • Informacioni rreth hartës së regjistrit vendoset në kokën e skriptit uart_regs.py nga skripti gen_uart_regs.py. Ju mund të rendisni regjistrat e disponueshëm me çelësin -l, siç shihet më poshtë. Kjo është një komandë lokale dhe nuk do të ndërveprojë me objektivin FPGAVHDLwhiz-UART-Test-Interface-Generator-FIG-6

Shkrimi në regjistra

  • Mund të shkruani në cilindo nga regjistrat e modalitetit jashtë duke përdorur çelësin -w. Jepni emrin e regjistrit të ndjekur nga "=" dhe vlerën e dhënë si një vlerë binare, heksadecimal ose dhjetore, siç tregohet më poshtë.VHDLwhiz-UART-Test-Interface-Generator-FIG-7
  • Vini re se zbatimi VHDL kërkon që skripti të shkruajë të gjithë regjistrat e daljes në të njëjtën kohë. Prandaj, nëse nuk specifikoni një grup të plotë regjistrash dalës, skripti së pari do të kryejë një lexim nga objektivi FPGA dhe më pas do t'i përdorë ato vlera për ato që mungojnë. Rezultati do të jetë që vetëm regjistrat e specifikuar të ndryshojnë
  • Kur kryeni një shkrim, të gjithë regjistrat e specifikuar do të ndryshojnë gjatë të njëjtit cikël orar, jo sapo të merren përmes UART.

Regjistrat e leximit

  • Përdorni çelësin -r për të lexuar të gjitha vlerat e regjistrit, siç tregohet më poshtë. Vlerat e shënuara me të verdhë janë ato që kemi ndryshuar në shkrimin e mëparshëm p.shampleVHDLwhiz-UART-Test-Interface-Generator-FIG-8
  • Çdo lexim tregon një pamje të menjëhershme të të gjithë regjistrave të hyrjes dhe daljes. Ata janë të gjithë sampudhëhequr gjatë të njëjtit cikël orar

Korrigjimi

Përdorni çelësin -d me cilindo nga çelësat e tjerë nëse keni nevojë të korrigjoni protokollin e komunikimit. Më pas, skripti do të printojë të gjitha bajtet e dërguara dhe të marra dhe tag nëse janë karaktere kontrolli, siç tregohet më poshtë.VHDLwhiz-UART-Test-Interface-Generator-FIG-9

Përdorimi i ndërfaqes në skriptet e tjera Python

  • Skripti uart_regs.py përmban një klasë UartRegs që mund ta përdorni lehtësisht si ndërfaqe komunikimi në skriptet e tjera të personalizuara Python. Thjesht importoni klasën, krijoni një objekt të saj dhe filloni të përdorni metodat, siç tregohet më poshtë.VHDLwhiz-UART-Test-Interface-Generator-FIG-10
  • Referojuni vargjeve të dokumenteve në kodin Python për metodën dhe përshkrimet dhe llojet e vlerave të kthimit.

instantiation_template.vho

  • Modeli i instancimit krijohet së bashku me modulin uart_regs për lehtësinë tuaj. Për të kursyer kohën e kodimit, mund të kopjoni instancimin e modulit dhe deklaratat e sinjalit në dizajnin tuaj.VHDLwhiz-UART-Test-Interface-Generator-FIG-11VHDLwhiz-UART-Test-Interface-Generator-FIG-12

RTL statike files

  • Ju duhet të përfshini sa vijon files në projektin tuaj VHDL në mënyrë që ato të përpilohen në të njëjtën bibliotekë si moduli uart_regs:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Moduli uart_regs_backend zbaton makineritë me gjendje të fundme që akordojnë brenda dhe jashtë të dhënave të regjistrit. Ai përdor modulet uart_rx dhe uart_tx për të trajtuar komunikimin UART me hostin.

Demo projekte

  • Ka tre projekte demo të përfshira në Zip file. Ato ju lejojnë të kontrolloni pajisjet periferike në bordet e ndryshme, si dhe disa regjistra të brendshëm më të mëdhenj.
  • Dosjet demo përfshijnë uart_regs.vhd dhe uart_regs.py të krijuara paraprakisht fileështë bërë posaçërisht për ato dizajne.

ICEstick grilë

  • Dosja demo/icecube2_icestick përmban një implementim demonstrimi të aksesit të regjistrit për tabelën Lattice iCEstick FPGA.
  • Për të kryer procesin e zbatimit, hapni demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file në softuerin e projektimit Lattice iCEcube2.
  • Pasi të keni ngarkuar projektin në GUI iCEcube2, klikoni Tools→Run All për të gjeneruar bitmap-in e programimit file.
  • Ju mund të përdorni mjetin Lattice Diamond Programmer Standalone për të konfiguruar FPGA me bitmap-in e krijuar file. Kur hapet Diamond Programmer, klikoni Hap një projekt ekzistues programues në kutinë e dialogut të mirëseardhjes.
  • Zgjidhni projektin file gjendet në Zip: demo/lattice_icestick/diamond_programmer_project.xcf dhe klikoni OK.VHDLwhiz-UART-Test-Interface-Generator-FIG-13
  • Pasi të ngarkohet projekti, klikoni tre pikat në File Kolona e emrit, siç tregohet më sipër. Shfletoni për të zgjedhur bitmap file që keni krijuar në iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Së fundi, me bordin e iCEstick të futur në një port USB në kompjuterin tuaj, zgjidhni Design→Program për të programuar flashin SPI dhe për të konfiguruar FPGA.
  • Tani mund të vazhdoni të lexoni dhe shkruani regjistra duke përdorur skriptin demo/lattice_icestick/uart_regs.py siç përshkruhet në seksionin uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Implementimin demonstrues për kompletin e vlerësimit Artix-7 35T Arty FPGA mund ta gjeni në dosjen demo/arty_a7_35.
  • Hapni Vivado dhe lundroni te ajo e nxjerrë files duke përdorur tastierën Tcl që gjendet në fund të ndërfaqes GUI. Shkruani këtë komandë për të hyrë në dosjen e projektit demo:
  • cd /demo/arty_a7_35/vivado_proj/
  • Ekzekutoni skriptin create_vivado_proj.tcl Tcl për të rigjeneruar projektin Vivado:
  • burimi ./create_vivado_proj.tcl
  • Klikoni Generate Bitstream në shiritin anësor për të kaluar nëpër të gjitha hapat e zbatimit dhe për të gjeneruar bitstream programimi file.
  • Së fundi, klikoni Open Hardware Manager dhe programoni FPGA përmes GUI.
  • Tani mund të vazhdoni të lexoni dhe shkruani regjistra duke përdorur skriptin demo/arty_a7_35/uart_regs.py siç përshkruhet në seksionin uart_regs.py.

Xilinx Digilent Arty S7-50

  • Mund ta gjeni zbatimin demo për bordin e zhvillimit Arty S7: Spartan-7 FPGA në dosjen demo/arty_s7_50.
  • Hapni Vivado dhe lundroni te ajo e nxjerrë files duke përdorur tastierën Tcl që gjendet në fund të ndërfaqes GUI. Shkruani këtë komandë për të hyrë në dosjen e projektit demo:
  • cd /demo/arty_s7_50/vivado_proj/
  • Ekzekutoni skriptin create_vivado_proj.tcl Tcl për të rigjeneruar projektin Vivado:
  • burimi ./create_vivado_proj.tcl
  • Klikoni Generate Bitstream në shiritin anësor për të kaluar nëpër të gjitha hapat e zbatimit dhe për të gjeneruar bitstream programimi file.
  • Së fundi, klikoni Open Hardware Manager dhe programoni FPGA përmes GUI.
  • Tani mund të vazhdoni të lexoni dhe shkruani regjistra duke përdorur skriptin demo/arty_s7_50/uart_regs.py siç përshkruhet në seksionin uart_regs.py.

Zbatimi

  • Nuk ka kërkesa specifike për zbatimin.

Kufizimet

  • Nuk nevojiten kufizime specifike kohore për këtë dizajn sepse ndërfaqja UART është e ngadaltë dhe trajtohet si një ndërfaqe asinkrone.
  • Hyrja uart_rx në modulin uart_regs sinkronizohet brenda modulit uart_rx. Kështu, nuk ka nevojë të sinkronizohet në modulin e nivelit të lartë.

Çështje të njohura

  • Mund t'ju duhet të rivendosni modulin përpara se të përdoret, në varësi të faktit nëse arkitektura juaj FPGA mbështet vlerat e regjistrit të paracaktuar.

Më shumë informacion

Pyetjet e shpeshta

Pyetje: Cili është qëllimi i gjeneratorit të ndërfaqes testuese UART?

Përgjigje: Gjeneruesi i ndërfaqes testuese UART lejon krijimin e ndërfaqeve të personalizuara për të bashkëvepruar me vlerat e regjistrit FPGA duke përdorur komunikimin UART.

Pyetje: Si mund ta instaloj paketën Pyserial?

Përgjigje: Mund ta instaloni Pyserial përmes Pip duke përdorur komandën: pip install pyserial

Dokumentet / Burimet

Gjeneratori i ndërfaqes testuese VHDLwhiz UART [pdf] Manuali i Përdoruesit
Gjeneratori i ndërfaqes testuese UART, Gjeneratori i ndërfaqes së testit, Gjeneratori i ndërfaqes, gjeneratori

Referencat

Lini një koment

Adresa juaj e emailit nuk do të publikohet. Fushat e kërkuara janë shënuar *