VHDLwhiz-logo

VHDLwhiz UART Test Interface Ġeneratur

VHDLwhiz-UART-Test-Interface-Ġeneratur-PRODOTT

Informazzjoni dwar il-Prodott

Speċifikazzjonijiet:

  • Isem tal-Prodott: VHDL jirreġistra l-ġeneratur tal-interface tat-test UART
  • Verżjoni: 1.0.4
  • Data: 18 ta’ Awwissu, 2024
  • Awtur: Jonas Julian Jensen
  • Prodott URL: Link tal-Prodott
  • Imejl ta' kuntatt: jonas@vhdlwhiz.com

Deskrizzjoni

Dan il-prodott jippermettilek li tiġġenera interfaces tad-dwana għall-qari u l-kitba tal-valuri tar-reġistru FPGA bl-użu ta 'UART. Il-modulu VHDL iġġenerat u l-iskrittura Python jipprovdu l-abbiltà li jinteraġixxu ma 'diversi tipi ta' reġistri fid-disinn FPGA tiegħek.

Rekwiżiti

  • Interpretu Python 3
  • pakkett pyserial

Protokoll

Il-prodott juża protokoll tal-qafas tad-dejta b'erba 'karattri ta' kontroll:

  • Isem: READ_REQ, Valur: 0x0A – Kmand mill-host għall-FPGA biex tibda sekwenza ta’ kitba biex tibgħat ir-reġistri kollha lura fuq UART
  • Isem: START_EWITE, Valur: 0x0B – Jimmarka l-bidu ta’ sekwenza ta’ kitba f’kull direzzjoni
  • Isem: END_WITE, Valur: 0x0C – Jimmarka t-tmiem ta’ sekwenza ta’ kitba f’kull direzzjoni
  • Isem: ĦARBA, Valur: 0x0D – Karattru ta’ ħarba użat biex jaħrab kliem ta’ kontroll

Istruzzjonijiet għall-Użu tal-Prodott

Tmexxi l-Iskripts

Biex tuża l-prodott, kun żgur li għandek Python 3 installat u l-pakkett Pyserial. Mexxi l-iskripts permezz ta’ interpretu Python 3.

Ġenerazzjoni ta 'Interfaces Custom

Uża l-iskrittura gen_uart_regs.py biex tiġġenera interfaces tad-dwana għall-qari u l-kitba tal-valuri tar-reġistru FPGA. Tista' tispeċifika l-kompożizzjoni tar-reġistri u t-tipi ta' input u output meta tiġġenera l-output files.

Interazzjoni mar-Reġistri

Tista 'taqra minn jew tikteb fi kwalunkwe numru ta' reġistri fid-disinn FPGA tiegħek billi tuża l-modulu VHDL iġġenerat u l-iskrittura Python. Ir-reġistri aċċessibbli jista' jkollhom tipi bħal std_logic, std_logic_vector, iffirmati, jew mhux iffirmati.

Liċenzja

  • Il-liċenzja tal-MIT tkopri r-rekwiżiti tad-drittijiet tal-awtur u t-termini tal-użu tal-kodiċi tas-sors. Irreferi għal LICENSE.txt file fil-Zip file għad-dettalji.

Changelog

  • Dawn il-bidliet jirreferu għall-proġett files, u dan id-dokument huwa aġġornat kif xieraq
Verżjoni Rimarki
1.0.0 Rilaxx inizjali
1.0.1 Iffissat il-bug ta' referenza "awto" nieqes meta jimporta bħala uart_regs.py bħala modulu Python. Inbidel l-istampar fallut tal-kitba għal eċċezzjoni għal

evita li tipprintja fuq il-console meta taħdem bħala modulu importat.

1.0.2 Waħħal għall-iżball ta' Vivado [Synth 8-248] meta ma jkunx hemm regs tal-modalità barra.
1.0.3 Waħħal Vivado Linter twissija: Reġistru għandha ppermettiet misjuqa minn

reset sinkroniku

1.0.4 Waħħal il-każ tal-kantuniera meta tirċievi kelma ħażina bil-karattru escape bħala l-aħħar byte. Il-kelma li jmiss tintilef ukoll għaliex aħna ma ċċaratx recv_data_prev_is_escape meta rritornaw għal IDLE.

L-iskrittura gen_uart_regs.py issa tippermetti biss ismijiet reg uniċi.

Deskrizzjoni

  • Dan id-dokument jiddeskrivi dan li ġej files u folders:
  • 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/
  • L-iskrittura gen_uart_regs.py u VHDL ta' appoġġ files f'dan il-proġett jippermettilek li tiġġenera interfaces tad-dwana għall-qari u l-kitba tal-valuri tar-reġistru FPGA ta 'diversi tipi u wisgħat bl-użu ta' UART.
  • Tista 'tuża l-modulu VHDL iġġenerat u l-iskrittura Python biex taqra minn jew tikteb fi kwalunkwe numru ta' reġistri fid-disinn tiegħek. Ir-reġistri aċċessibbli għall-UART jista' jkollhom it-tipi std_logic, std_logic_vector, iffirmati, jew mhux iffirmati.
  • Tista' tiddeċiedi dwar il-kompożizzjoni preċiża tar-reġistri u t-tipi ta' input u output meta tiġġenera l-output files tuża l-iskrittura gen_uart_regs.py.
  • L-iskripts Python inħolqu parzjalment bl-għajnuna tal-għodda tal-intelliġenza artifiċjali ChatGPT, filwaqt li l-kodiċi VHDL huwa magħmul bl-idejn.

Rekwiżiti

  • L-iskripts f'dan il-proġett iridu jitmexxew permezz ta' interpretu Python 3 u l-pakkett Pyserial irid jiġi installat.
  • Tista' tinstalla pyserial permezz ta' Pip billi tuża dan il-kmand: pip install pyserial

Protokoll

  • Il-VHDL files u l-iskrittura Python jużaw protokoll tad-data-framing b'erba 'kontroll
Isem Valur Ikkummenta
READ_REQ 0x0A Kmand mill-host lill-FPGA biex tibda kitba

sekwenza biex tibgħat ir-reġistri kollha lura fuq UART

START_EWITE 0x0B Jimmarka l-bidu ta’ sekwenza ta’ kitba fi kwalunkwe waħda

direzzjoni

END_WITE 0x0C Jimmarka t-tmiem ta' sekwenza ta' kitba f'kull direzzjoni
ĦARBA 0x0D Karattru Escape użat biex jaħrab kwalunkwe kliem ta' kontroll, inkluż il-karattru ESCAPE innifsu, meta jidher bħala data bejn il-markaturi START_WRITE u END_WRITE.

Kwalunkwe byte READ_REQ mhux maħruba mibgħut lill-FPGA hija istruzzjoni biex tibgħat ir-reġistri kollha tagħha aċċessibbli għall-UART (inputs u outputs) lura lill-host fuq UART. Dan il-kmand normalment jinħareġ biss mill-iskript uart_regs.py.
Malli tirċievi dan il-kmand, l-FPGA se tirrispondi billi tibgħat il-kontenut tar-reġistri kollha lura lill-ospitant. L-ewwel, is-sinjali tad-dħul, imbagħad is-sinjali tal-ħruġ. Jekk it-tulijiet tagħhom ma jammontawx għal multiplu ta' 8 bits, il-bits t'isfel tal-aħħar byte se jkunu żerijiet ikkuttunati.
Sekwenza ta' kitba dejjem tibda bil-byte START_WRITE u tispiċċa bil-byte END_WRITE. Kwalunkwe bytes bejn dawk huma kkunsidrati bħala bytes tad-dejta. Jekk xi bytes tad-dejta għandhom l-istess valur bħal karattru ta' kontroll, il-byte tad-dejta għandu jinħarab. Dan ifisser li tibgħat karattru ESCAPE żejda qabel il-byte tad-data biex tindika li fil-fatt hija data.
Jekk START_WRITE mhux maħruba jasal kullimkien fil-fluss ta' bytes, jitqies bħala l-bidu ta' sekwenza ta' kitba. Il-modulu uart_regs_backend juża din l-informazzjoni biex jerġa 'jissinkronizza f'każ li l-komunikazzjoni toħroġ mis-sinkronizzazzjoni.

gen_uart_regs.py

  • Din hija l-iskrittura li trid tibda biha biex tiġġenera l-interface. Hawn taħt hawn screenshot tal-menu tal-għajnuna li tista' tikseb billi tħaddem: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface-Generator-FIG-1
  • Biex tiġġenera interface tad-dwana, trid tmexxi l-iskript ma 'kull wieħed mir-reġistri kontrollabbli UART mixtieq tiegħek elenkati bħala argumenti. It-tipi disponibbli huma std_logic, std_logic_vector, unsigned, u signed.
  • Il-mod (direzzjoni) default huwa u t-tip default huwa std_logic_vector sakemm ir-reġistru ma jkunx ta 'tul: 1. Imbagħad, se default għal std_logic.
  • Għalhekk, jekk trid toħloq sinjal ta' input std_logic, tista' tuża kwalunkwe minn dawn l-argumenti:
  • my_sl=1
  • my_sl=1:in
  • my_sl=1:in:std_logic
  • Il-varjanti kollha ta 'hawn fuq se jirriżultaw fl-iskrittura li tiġġenera dan is-sinjal aċċessibbli mill-UART:VHDLwhiz-UART-Test-Interface-Generator-FIG-2
  • Ejja nħaddmu l-iskript b'argumenti biex niġġenera interface b'diversi reġistri ta' direzzjonijiet, tulijiet u tipi differentiVHDLwhiz-UART-Test-Interface-Generator-FIG-3

Ġenerat files

  • Tmexxija b'suċċess tal-iskrittura gen_uart_regs.py se tipproduċi folder tal-output jismu ġġenerat bit-tliet files elenkati hawn taħt. Jekk diġà jeżistu, se jiġu miktuba fuqhom.
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • generated/instantiation_template.vho
  • uart_regs.vhd
  • Dan huwa l-modulu tal-interface tad-dwana ġġenerat mill-iskritt. Ikollok bżonn tistjanzjaha fid-disinn tiegħek, fejn tista 'taċċessa r-reġistri li trid tikkontrolla billi tuża UART.
  • Kollox fuq is-sezzjoni “– UART access records” se jkun identiku għal kull modulu uart_regs, filwaqt li l-kompożizzjoni tas-sinjali tal-port taħt dik il-linja tiddependi fuq l-argumenti mogħtija lill-iskrittura tal-ġeneratur.
  • Il-lista hawn taħt turi l-entità għall-modulu uart_regs li tirriżulta mill-kmand tal-ġenerazzjoni example murija fil-gen_uart_regs.py sezzjoniVHDLwhiz-UART-Test-Interface-Generator-FIG-4
  • M'għandekx bżonn tissinkronizza s-sinjal uart_rx, peress li dak huwa ttrattat fl-uart_rx. modulu.
  • Meta l-modulu jirċievi talba ta 'qari, se jaqbad il-valuri tas-sinjali kollha ta' input u output fiċ-ċiklu tal-arloġġ kurrenti. L-istampa istantanja mbagħad tintbagħat lill-host fuq UART.
  • Meta sseħħ kitba, ir-reġistri kollha tal-ħruġ jiġu aġġornati bil-valuri l-ġodda fl-istess ċiklu tal-arloġġ. Mhuwiex possibbli li jinbidel il-valuri tas-sinjal tal-ħruġ individwalment.
  • Madankollu, l-iskrittura uart_regs.py jippermetti lill-utent jaġġorna biss outputs magħżula billi l-ewwel jaqra lura l-valuri attwali tar-reġistri kollha. Imbagħad jikteb lura l-valuri kollha, inklużi dawk aġġornati.
  • uart_regs.py
  • Il-ġenerat/uart_regs.py file huwa ġġenerat flimkien mal-modulu VHDL uart_regs u fih l-informazzjoni tar-reġistru tad-dwana fl-intestatura tal- file. B'din l-iskrittura, tista 'taqra minn jew tikteb fir-reġistri tad-dwana tiegħek b'faċilità.

Għajnuna menu

  • Ittajpja python uart_regs.py -h biex tipprintja l-menu tal-għajnuna:VHDLwhiz-UART-Test-Interface-Generator-FIG-5

L-issettjar tal-port UART

  • L-iskrittura għandha għażliet biex tissettja l-port UART billi tuża l-iswiċċ -c. Dan jaħdem fuq Windows u Linux. Issettjah għal wieħed mill-portijiet disponibbli elenkati fil-menu tal-għajnuna. Biex tissettja port default, tista' wkoll teditja l-varjabbli UART_PORT fl-iskrittura uart_regs.py.

Elenkar ta' reġistri

  • Informazzjoni dwar l-immappjar tar-reġistru titqiegħed fl-intestatura tal-iskrittura uart_regs.py mill-iskrittura gen_uart_regs.py. Tista' telenka r-reġistri disponibbli bis-swiċċ -l, kif jidher hawn taħt. Dan huwa kmand lokali u mhux se jinteraġixxi mal-FPGA fil-miraVHDLwhiz-UART-Test-Interface-Generator-FIG-6

Kitba fir-reġistri

  • Tista' tikteb lil kwalunkwe reġistri tal-modalità out billi tuża l-iswiċċ -w. Ipprovdi l-isem tar-reġistru segwit minn “=” u l-valur mogħti bħala valur binarju, eżadeċimali jew deċimali, kif muri hawn taħt.VHDLwhiz-UART-Test-Interface-Generator-FIG-7
  • Innota li l-implimentazzjoni tal-VHDL teħtieġ li l-iskript jikteb ir-reġistri tal-output kollha simultanjament. Għalhekk, jekk ma tispeċifikax sett komplut ta 'reġistri tal-output, l-iskrittura l-ewwel se twettaq qari mill-FPGA fil-mira u mbagħad tuża dawk il-valuri għal dawk neqsin. Ir-riżultat ikun li jinbidlu biss ir-reġistri speċifikati
  • Meta twettaq kitba, ir-reġistri speċifikati kollha jinbidlu matul l-istess ċiklu tal-arloġġ, mhux hekk kif jiġu riċevuti fuq UART.

Qari ta' reġistri

  • Uża l-iswiċċ -r biex taqra l-valuri kollha tar-reġistru, kif muri hawn taħt. Il-valuri mmarkati bl-isfar huma dawk li bdilna fil-kitba preċedenti exampleVHDLwhiz-UART-Test-Interface-Generator-FIG-8
  • Kull qari juri stampa istantanja tar-reġistri kollha ta' input u output. Huma kollha sampmmexxija matul l-istess ċiklu tal-arloġġ

Debugging

Uża l-iswiċċ -d ma 'kwalunkwe swiċċijiet l-oħra jekk għandek bżonn tiddibaggja l-protokoll ta' komunikazzjoni. Imbagħad, l-iskrittura se tipprintja l-bytes kollha mibgħuta u riċevuti u tag minnhom jekk huma karattri ta' kontroll, kif muri hawn taħt.VHDLwhiz-UART-Test-Interface-Generator-FIG-9

Uża l-interface fi skripts Python oħra

  • L-iskrittura uart_regs.py fih klassi UartRegs li tista' tuża faċilment bħala l-interface ta' komunikazzjoni fi skripts Python personalizzati oħra. Sempliċement jimporta l-klassi, oħloq oġġett minnha, u ibda tuża l-metodi, kif muri hawn taħt.VHDLwhiz-UART-Test-Interface-Generator-FIG-10
  • Irreferi għad-docstrings fil-kodiċi Python għal metodu u deskrizzjonijiet u tipi ta 'valur ta' ritorn.

instantiation_template.vho

  • Il-mudell tal-instanzjazzjoni huwa ġġenerat flimkien mal-modulu uart_regs għall-konvenjenza tiegħek. Biex tiffranka l-ħin tal-kodifikazzjoni, tista 'tikkopja l-istanzijazzjoni tal-modulu u d-dikjarazzjonijiet tas-sinjali fid-disinn tiegħek.VHDLwhiz-UART-Test-Interface-Generator-FIG-11VHDLwhiz-UART-Test-Interface-Generator-FIG-12

RTL statiku files

  • Trid tinkludi dan li ġej files fil-proġett VHDL tiegħek sabiex ikunu kkompilati fl-istess librerija bħall-modulu uart_regs:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Il-modulu uart_regs_backend jimplimenta l-magni ta 'stat finit li jċekknu u joħorġu d-data tar-reġistru. Juża l-moduli uart_rx u uart_tx biex jimmaniġġja l-komunikazzjoni UART mal-host.

Proġetti Demo

  • Hemm tliet proġetti demo inklużi fil-Zip file. Huma jħalluk tikkontrolla l-periferali fuq il-bordijiet differenti kif ukoll ftit reġistri interni akbar.
  • Il-folders demo jinkludu uart_regs.vhd u uart_regs.py ġenerati minn qabel files magħmula speċifikament għal dawk id-disinji.

ICEstick tal-kannizzata

  • Il-folder demo/icecube2_icestick fih implimentazzjoni demo ta 'aċċess għar-reġistru għall-bord Lattice iCEstick FPGA.
  • Biex tmexxi l-proċess ta' implimentazzjoni, iftaħ id-demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file fis-softwer tad-disinn Lattice iCEcube2.
  • Wara li tgħabbi l-proġett fil-GUI tal-iCEcube2, ikklikkja Għodda→Run All biex tiġġenera l-bitmap tal-ipprogrammar file.
  • Tista 'tuża l-għodda Standalone Lattice Diamond Programmer biex tikkonfigura l-FPGA bil-bitmap iġġenerat file. Meta Diamond Programmer jiftaħ, ikklikkja Iftaħ proġett ta 'programmatur eżistenti fil-kaxxa tad-djalogu ta' merħba.
  • Agħżel il-proġett file misjuba fil-Zip: demo/lattice_icestick/diamond_programmer_project.xcf u kklikkja OK.VHDLwhiz-UART-Test-Interface-Generator-FIG-13
  • Wara li l-proġett jgħabbi, ikklikkja t-tliet tikek fil- File Kolonna tal-isem, kif muri hawn fuq. Fittex biex tagħżel il-bitmap file li ġġenerajt f'iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Fl-aħħarnett, bil-bord iCEstick imwaħħal f'port USB fuq il-kompjuter tiegħek, agħżel Disinn→Programm biex tipprogramma l-flash SPI u kkonfigura l-FPGA.
  • Issa tista' tipproċedi biex taqra u tikteb ir-reġistri billi tuża l-iskript demo/lattice_icestick/uart_regs.py kif deskritt fit-taqsima uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Tista 'ssib l-implimentazzjoni demo għall-kit ta' evalwazzjoni Artix-7 35T Arty FPGA fil-folder demo/arty_a7_35.
  • Iftaħ Vivado u naviga lejn l-estratt files bl-użu tal-console Tcl misjuba fil-qiegħ ta ' l-interface GUI. Ittajpja dan il-kmand biex tidħol fil-folder tal-proġett demo:
  • cd /demo/arty_a7_35/vivado_proj/
  • Esegwi l-iskrittura create_vivado_proj.tcl Tcl biex tirriġenera l-proġett Vivado:
  • sors ./create_vivado_proj.tcl
  • Ikklikkja Iġġenera Bitstream fil-sidebar biex tgħaddi mill-passi kollha tal-implimentazzjoni u tiġġenera l-bitstream tal-ipprogrammar file.
  • Fl-aħħarnett, ikklikkja Open Hardware Manager u pprogramma l-FPGA permezz tal-GUI.
  • Issa tista' tipproċedi biex taqra u tikteb reġistri billi tuża l-iskript demo/arty_a7_35/uart_regs.py kif deskritt fit-taqsima uart_regs.py.

Xilinx Digilent Arty S7-50

  • Tista 'ssib l-implimentazzjoni demo għall-Bord ta' żvilupp Arty S7: Spartan-7 FPGA fil-folder demo/arty_s7_50.
  • Iftaħ Vivado u naviga lejn l-estratt files bl-użu tal-console Tcl misjuba fil-qiegħ ta ' l-interface GUI. Ittajpja dan il-kmand biex tidħol fil-folder tal-proġett demo:
  • cd /demo/arty_s7_50/vivado_proj/
  • Esegwi l-iskrittura create_vivado_proj.tcl Tcl biex tirriġenera l-proġett Vivado:
  • sors ./create_vivado_proj.tcl
  • Ikklikkja Iġġenera Bitstream fil-sidebar biex tgħaddi mill-passi kollha tal-implimentazzjoni u tiġġenera l-bitstream tal-ipprogrammar file.
  • Fl-aħħarnett, ikklikkja Open Hardware Manager u pprogramma l-FPGA permezz tal-GUI.
  • Issa tista' tipproċedi biex taqra u tikteb reġistri billi tuża l-iskript demo/arty_s7_50/uart_regs.py kif deskritt fit-taqsima uart_regs.py.

Implimentazzjoni

  • M'hemm l-ebda rekwiżiti speċifiċi ta' implimentazzjoni.

Limitazzjonijiet

  • L-ebda restrizzjonijiet ta 'żmien speċifiċi huma meħtieġa għal dan id-disinn minħabba li l-interface UART hija bil-mod u ttrattat bħala interface mhux sinkroniku.
  • L-input uart_rx għall-modulu uart_regs huwa sinkronizzat fi ħdan il-modulu uart_rx. Għalhekk, m'għandux għalfejn jiġi sinkronizzat fil-modulu tal-ogħla livell.

Kwistjonijiet magħrufa

  • Jista 'jkollok bżonn tirrisettja l-modulu qabel ma jkun jista' jintuża, skont jekk l-arkitettura FPGA tiegħek tappoġġjax valuri ta 'reġistru default.

Aktar informazzjoni

FAQs

Q: X'inhu l-iskop tal-ġeneratur tal-interface tat-test UART?

A: Il-ġeneratur tal-interface tat-test UART jippermetti l-ħolqien ta 'interfaces tad-dwana biex jinteraġixxu mal-valuri tar-reġistru FPGA bl-użu ta' komunikazzjoni UART.

Q: Kif ninstalla l-pakkett Pyserial?

A: Tista 'tinstalla Pyserial permezz ta' Pip billi tuża l-kmand: pip install pyserial

Dokumenti / Riżorsi

VHDLwhiz UART Test Interface Ġeneratur [pdfManwal tal-Utent
Ġeneratur tal-Interface tat-Test UART, Ġeneratur tal-Interface tat-Test, Ġeneratur tal-Interface, Ġeneratur

Referenzi

Ħalli kumment

L-indirizz elettroniku tiegħek mhux se jiġi ppubblikat. L-oqsma meħtieġa huma mmarkati *