VHDLwhiz logotips

VHDLwhiz UART testa interfeisa ģenerators

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

Informācija par produktu

Specifikācijas:

  • Produkta nosaukums: VHDL reģistrē UART testa interfeisa ģeneratoru
  • Versija: 1.0.4
  • Datums: 18. gada 2024. augusts
  • Autors: Jonass Džulians Jensens
  • Produkts URL: Produkta saite
  • Saziņas e-pasts: jonas@vhdlwhiz.com

Apraksts

Šis produkts ļauj ģenerēt pielāgotas saskarnes FPGA reģistra vērtību lasīšanai un rakstīšanai, izmantojot UART. Izveidotais VHDL modulis un Python skripts nodrošina iespēju mijiedarboties ar dažāda veida reģistriem jūsu FPGA dizainā.

Prasības

  • Python 3 tulks
  • pyserial pakotne

Protokols

Produkts izmanto datu kadrēšanas protokolu ar četrām vadības rakstzīmēm:

  • Vārds: READ_REQ, Vērtība: 0x0A — komanda no resursdatora uz FPGA, lai sāktu rakstīšanas secību, lai nosūtītu visus reģistrus atpakaļ, izmantojot UART
  • Vārds: START_RAKSTĪT, Vērtība: 0x0B — atzīmē rakstīšanas secības sākumu jebkurā virzienā
  • Vārds: END_WRITE, Vērtība: 0x0C — atzīmē rakstīšanas secības beigas jebkurā virzienā
  • Vārds: Bēgšana, Vērtība: 0x0D — atkāpšanās rakstzīme, ko izmanto, lai izietu no vadības vārdiem

Produkta lietošanas instrukcijas

Skriptu palaišana

Lai izmantotu produktu, pārliecinieties, ka jums ir instalēta Python 3 un Pyserial pakotne. Palaidiet skriptus, izmantojot Python 3 tulku.

Pielāgotu interfeisu ģenerēšana

Izmantojiet skriptu gen_uart_regs.py, lai ģenerētu pielāgotas saskarnes FPGA reģistra vērtību lasīšanai un rakstīšanai. Veidojot izvadi, varat norādīt ievades un izvades reģistru sastāvu un veidus files.

Mijiedarbība ar reģistriem

Izmantojot ģenerēto VHDL moduli un Python skriptu, savā FPGA dizainā varat lasīt no jebkura skaita reģistru vai rakstīt uz tiem. Pieejamajiem reģistriem var būt tādi veidi kā std_logic, std_logic_vector, parakstīts vai neparakstīts.

Licence

  • MIT licence attiecas uz pirmkoda autortiesību prasībām un lietošanas noteikumiem. Skatiet failu LICENSE.txt file Zip file sīkākai informācijai.

Izmaiņu žurnāls

  • Šīs izmaiņas attiecas uz projektu files, un šis dokuments tiek attiecīgi atjaunināts
Versija Piezīmes
1.0.0 Sākotnējā izlaišana
1.0.1 Izlabota trūkstošā “self” atsauces kļūda, importējot kā uart_regs.py kā Python moduli. Neizdevās rakstīšanas izdruka mainīta uz izņēmumu

izvairieties no drukāšanas uz konsoli, ja darbojas kā importēts modulis.

1.0.2 Izlabojiet Vivado [Synth 8-248] kļūdu, ja nav izejas režīma regu.
1.0.3 Labojiet Vivado Linter brīdinājumu: Reģistrs ir iespējojis, ko vadīja

sinhronā atiestatīšana

1.0.4 Izlabojiet stūra reģistru, saņemot nepareizi veidotu vārdu ar atsoļa rakstzīmi kā pēdējo baitu. Arī nākamais vārds tiks zaudēts, jo, atgriežoties IDLE, mēs nenotīrījām recv_data_prev_is_escape.

Skripts gen_uart_regs.py tagad pieļauj tikai unikālus reg nosaukumus.

Apraksts

  • Šajā dokumentā ir aprakstīts sekojošais files un mapes:
  • gen_uart_regs.py
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • genered/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/
  • Skripts gen_uart_regs.py un atbalsta VHDL files šajā projektā ļauj ģenerēt pielāgotas saskarnes dažādu veidu un platumu FPGA reģistru vērtību lasīšanai un rakstīšanai, izmantojot UART.
  • Varat izmantot ģenerēto VHDL moduli un Python skriptu, lai lasītu no jebkura dizaina reģistru skaita vai rakstītu tajos. UART pieejamiem reģistriem var būt tipi std_logic, std_logic_vector, parakstīts vai neparakstīts.
  • Ģenerējot izvadi, varat izlemt par precīzu ievades un izvades reģistru un veidu sastāvu files, izmantojot skriptu gen_uart_regs.py.
  • Python skripti tika izveidoti daļēji ar ChatGPT mākslīgā intelekta rīka palīdzību, savukārt VHDL kods ir roku darbs.

Prasības

  • Šajā projektā esošie skripti ir jāpalaiž, izmantojot Python 3 tulku, un ir jāinstalē Pyserial pakotne.
  • Varat instalēt pyserial, izmantojot Pip, izmantojot šo komandu: pip install pyserial

Protokols

  • VHDL files un Python skripts izmanto datu kadrēšanas protokolu ar četrām vadīklām
Vārds Vērtība komentēt
READ_REQ 0x0A Komanda no saimniekdatora uz FPGA, lai sāktu rakstīšanu

secība, lai nosūtītu atpakaļ visus reģistrus, izmantojot UART

START_RAKSTI 0x0B Atzīmē rakstīšanas secības sākumu jebkurā no tiem

virziens

END_WRITE 0x0C Atzīmē rakstīšanas secības beigas jebkurā virzienā
BĒGŠANA 0x0D Atsoļa rakstzīme, ko izmanto, lai izspiestu jebkuru no vadības vārdiem, tostarp pašu ESCAPE rakstzīmi, ja tie parādās kā dati starp marķieriem START_WRITE un END_WRITE.

Jebkurš READ_REQ baits bez atsoļa, kas nosūtīts uz FPGA, ir norādījums nosūtīt visus tā UART pieejamos reģistrus (ieejas un izejas) atpakaļ uz resursdatoru, izmantojot UART. Šo komandu parasti izdod tikai skripts uart_regs.py.
Saņemot šo komandu, FPGA atbildēs, nosūtot visu reģistru saturu atpakaļ uz resursdatoru. Pirmkārt, ievades signāli, pēc tam izejas signāli. Ja to garumi nesasniedz 8 bitu reizinājumu, pēdējā baita apakšējie biti tiks polsterēti ar nullēm.
Rakstīšanas secība vienmēr sākas ar START_WRITE baitu un beidzas ar END_WRITE baitu. Jebkuri baiti starp tiem tiek uzskatīti par datu baitiem. Ja kādam datu baitam ir tāda pati vērtība kā kontroles rakstzīmei, datu baitam ir jābūt atsoļotam. Tas nozīmē, ka pirms datu baita ir jānosūta papildu rakstzīme ESCAPE, lai norādītu, ka tie faktiski ir dati.
Ja START_WRITE bez atsoļa nonāk jebkurā vietā baitu straumē, tas tiek uzskatīts par rakstīšanas secības sākumu. Modulis uart_regs_backend izmanto šo informāciju, lai veiktu atkārtotu sinhronizāciju gadījumā, ja saziņa netiek sinhronizēta.

gen_uart_regs.py

  • Šis ir skripts, ar kuru jāsāk, lai ģenerētu interfeisu. Tālāk ir redzams palīdzības izvēlnes ekrānuzņēmums, ko varat iegūt, palaižot: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface-Generator-FIG-1
  • Lai ģenerētu pielāgotu saskarni, jums ir jāpalaiž skripts ar katru vēlamo UART kontrolējamo reģistru, kas norādīts kā argumenti. Pieejamie veidi ir std_logic, std_logic_vector, unsigned un signed.
  • Noklusējuma režīms (virziens) ir ieslēgts, un noklusējuma tips ir std_logic_vector, ja vien reģistra garums nav: 1. Pēc tam tas pēc noklusējuma būs std_logic.
  • Tādējādi, ja vēlaties izveidot std_logic ievades signālu, varat izmantot jebkuru no šiem argumentiem:
  • my_sl=1
  • my_sl=1:in
  • my_sl=1:in:std_logic
  • Visu iepriekš minēto variantu rezultātā skripts ģenerēs šo UART pieejamo signālu:VHDLwhiz-UART-Test-Interface-Generator-FIG-2
  • Palaidīsim skriptu ar argumentiem, lai ģenerētu interfeisu ar vairākiem dažādu virzienu, garumu un veidu reģistriemVHDLwhiz-UART-Test-Interface-Generator-FIG-3

Ģenerēts files

  • Veiksmīgi izpildot skriptu gen_uart_regs.py, tiks izveidota izvades mape, kuras nosaukums ir ģenerēts ar trim fileir norādīts zemāk. Ja tie jau pastāv, tie tiks pārrakstīti.
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • genered/instantiation_template.vho
  • uart_regs.vhd
  • Šis ir pielāgotais interfeisa modulis, ko ģenerē skripts. Jums tas ir jāievieš savā dizainā, kur tas var piekļūt reģistriem, kurus vēlaties kontrolēt, izmantojot UART.
  • Viss, kas atrodas virs sadaļas “– UART pieejamie reģistri”, būs identisks katram uart_regs modulim, savukārt portu signālu sastāvs zem šīs rindas ir atkarīgs no ģeneratora skriptam sniegtajiem argumentiem.
  • Tālāk esošajā sarakstā ir parādīta moduļa uart_regs entītija, kas izriet no ģenerēšanas komandas example parādīts sadaļā gen_uart_regs.pyVHDLwhiz-UART-Test-Interface-Generator-FIG-4
  • Jums nav jāsinhronizē signāls uart_rx, jo tas tiek apstrādāts uart_rx. modulis.
  • Kad modulis saņem lasīšanas pieprasījumu, tas uztvers visu ieejas un izejas signālu vērtības pašreizējā pulksteņa ciklā. Pēc tam momentuzņēmums tiek nosūtīts saimniekdatoram, izmantojot UART.
  • Kad notiek rakstīšana, visi izvades reģistri tiek atjaunināti ar jaunajām vērtībām tajā pašā pulksteņa ciklā. Nav iespējams atsevišķi mainīt izejas signāla vērtības.
  • Tomēr skripts uart_regs.py ļauj lietotājam atjaunināt tikai atlasītās izvades, vispirms nolasot visu reģistru pašreizējās vērtības. Pēc tam tas ieraksta atpakaļ visas vērtības, tostarp atjauninātās.
  • uart_regs.py
  • Genered/uart_regs.py file tiek ģenerēts kopā ar VHDL moduli uart_regs un satur pielāgoto reģistra informāciju file. Izmantojot šo skriptu, varat viegli lasīt no saviem pielāgotajiem reģistriem vai rakstīt tajos.

Palīdzības izvēlne

  • Ierakstiet python uart_regs.py -h, lai izdrukātu palīdzības izvēlni:VHDLwhiz-UART-Test-Interface-Generator-FIG-5

UART porta iestatīšana

  • Skriptam ir iespējas iestatīt UART portu, izmantojot slēdzi -c. Tas darbojas operētājsistēmās Windows un Linux. Iestatiet to uz vienu no palīdzības izvēlnē norādītajiem pieejamajiem portiem. Lai iestatītu noklusējuma portu, varat arī rediģēt UART_PORT mainīgo skriptā uart_regs.py.

Sarakstu reģistri

  • Informāciju par reģistra kartēšanu skripta uart_regs.py galvenē ievieto skripts gen_uart_regs.py. Varat uzskaitīt pieejamos reģistrus, izmantojot slēdzi -l, kā parādīts tālāk. Šī ir lokāla komanda un nesadarbosies ar mērķa FPGAVHDLwhiz-UART-Test-Interface-Generator-FIG-6

Rakstīšana uz reģistriem

  • Varat rakstīt uz jebkuru izejas režīma reģistru, izmantojot slēdzi -w. Norādiet reģistra nosaukumu, kam seko “=”, un vērtību, kas norādīta kā binārā, heksadecimālā vai decimālā vērtība, kā parādīts tālāk.VHDLwhiz-UART-Test-Interface-Generator-FIG-7
  • Ņemiet vērā, ka VHDL ieviešanai ir nepieciešams, lai skripts rakstītu visus izvades reģistrus vienlaicīgi. Tāpēc, ja nenorādīsiet pilnu izvades reģistru kopu, skripts vispirms veiks nolasīšanu no mērķa FPGA un pēc tam izmantos šīs vērtības trūkstošajām vērtībām. Rezultātā mainās tikai norādītie reģistri
  • Veicot rakstīšanu, visi norādītie reģistri mainīsies viena un tā paša pulksteņa cikla laikā, nevis tiklīdz tie tiks saņemti, izmantojot UART.

Lasīšanas reģistri

  • Izmantojiet slēdzi -r, lai nolasītu visas reģistra vērtības, kā parādīts tālāk. Dzeltenā krāsā atzīmētās vērtības ir tās, kuras mainījām iepriekšējā rakstīšanas reizē, piemampleVHDLwhiz-UART-Test-Interface-Generator-FIG-8
  • Katrs nolasījums parāda visu ievades un izvades reģistru momentuzņēmumu. Viņi visi ir sampvadīja tā paša pulksteņa cikla laikā

Atkļūdošana

Izmantojiet slēdzi -d ar jebkuru no citiem slēdžiem, ja nepieciešams atkļūdot sakaru protokolu. Pēc tam skripts izdrukās visus nosūtītos un saņemtos baitus un tag ja tās ir kontroles rakstzīmes, kā parādīts tālāk.VHDLwhiz-UART-Test-Interface-Generator-FIG-9

Interfeisa izmantošana citos Python skriptos

  • Skripts uart_regs.py satur UartRegs klasi, ko varat viegli izmantot kā saziņas saskarni citos pielāgotajos Python skriptos. Vienkārši importējiet klasi, izveidojiet tās objektu un sāciet izmantot metodes, kā parādīts tālāk.VHDLwhiz-UART-Test-Interface-Generator-FIG-10
  • Skatiet Python koda dokumentu virknes, lai uzzinātu par metodi un aprakstiem un atgriešanas vērtību veidiem.

instantiation_template.vho

  • Instantiācijas veidne tiek ģenerēta kopā ar uart_regs moduli jūsu ērtībām. Lai ietaupītu kodēšanas laiku, savā dizainā varat kopēt moduļa institūciju un signālu deklarācijas.VHDLwhiz-UART-Test-Interface-Generator-FIG-11VHDLwhiz-UART-Test-Interface-Generator-FIG-12

Statiskais RTL files

  • Jums jāiekļauj tālāk norādītā informācija files jūsu VHDL projektā, lai tie tiktu apkopoti tajā pašā bibliotēkā kā modulis uart_regs:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Modulis uart_regs_backend ievieš galīgo stāvokļu mašīnas, kas ieslēdz un izslēdz reģistra datus. Tas izmanto uart_rx un uart_tx moduļus, lai apstrādātu UART saziņu ar resursdatoru.

Demo projekti

  • Zip ir iekļauti trīs demonstrācijas projekti file. Tie ļauj kontrolēt dažādu paneļu perifērijas ierīces, kā arī dažus lielākus iekšējos reģistrus.
  • Demonstrācijas mapes ietver iepriekš ģenerētus uart_regs.vhd un uart_regs.py fileir īpaši izstrādāts šiem dizainparaugiem.

Režģis iCEstick

  • Mapē demo/icecube2_icestick ir reģistra piekļuves demonstrācijas ieviešana Lattice iCEstick FPGA platei.
  • Lai izpildītu ieviešanas procesu, atveriet demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file Lattice iCEcube2 projektēšanas programmatūrā.
  • Pēc projekta ielādes iCEcube2 GUI noklikšķiniet uz Rīki→ Palaist visu, lai ģenerētu programmēšanas bitkarti file.
  • Varat izmantot Lattice Diamond Programmer Standalone rīku, lai konfigurētu FPGA ar ģenerēto bitkarti file. Kad tiek atvērts Diamond Programmer, sveiciena dialoglodziņā noklikšķiniet uz Atvērt esošu programmētāja projektu.
  • Izvēlieties projektu file atrodiet ZIP failā: demo/lattice_icestick/diamond_programmer_project.xcf un noklikšķiniet uz Labi.VHDLwhiz-UART-Test-Interface-Generator-FIG-13
  • Kad projekts ir ielādēts, noklikšķiniet uz trim punktiem File Nosaukuma kolonna, kā parādīts iepriekš. Pārlūkojiet, lai atlasītu bitkarti file ko ģenerējāt programmā iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Visbeidzot, kad iCEstick plate ir pievienota datora USB portam, atlasiet Dizains → Programma, lai programmētu SPI zibspuldzi un konfigurētu FPGA.
  • Tagad varat turpināt lasīt un rakstīt reģistrus, izmantojot demo/lattice_icestick/uart_regs.py skriptu, kā aprakstīts sadaļā uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Demonstrācijas versiju Artix-7 35T Arty FPGA novērtēšanas komplektam varat atrast mapē demo/arty_a7_35.
  • Atveriet Vivado un dodieties uz izvilkto files, izmantojot Tcl konsoli, kas atrodas GUI interfeisa apakšā. Ievadiet šo komandu, lai ievadītu demonstrācijas projekta mapi:
  • cd /demo/arty_a7_35/vivado_proj/
  • Izpildiet create_vivado_proj.tcl Tcl skriptu, lai atjaunotu Vivado projektu:
  • avots ./create_vivado_proj.tcl
  • Sānjoslā noklikšķiniet uz Ģenerēt bitu straumi, lai veiktu visas ieviešanas darbības un ģenerētu programmēšanas bitu straumi file.
  • Visbeidzot noklikšķiniet uz Atvērt aparatūras pārvaldnieku un ieprogrammējiet FPGA, izmantojot GUI.
  • Tagad varat turpināt lasīt un rakstīt reģistrus, izmantojot demo/arty_a7_35/uart_regs.py skriptu, kā aprakstīts sadaļā uart_regs.py.

Xilinx Digilent Arty S7-50

  • Arty S7: Spartan-7 FPGA izstrādes plates demonstrācijas versiju varat atrast mapē demo/arty_s7_50.
  • Atveriet Vivado un dodieties uz izvilkto files, izmantojot Tcl konsoli, kas atrodas GUI interfeisa apakšā. Ievadiet šo komandu, lai ievadītu demonstrācijas projekta mapi:
  • cd /demo/arty_s7_50/vivado_proj/
  • Izpildiet create_vivado_proj.tcl Tcl skriptu, lai atjaunotu Vivado projektu:
  • avots ./create_vivado_proj.tcl
  • Sānjoslā noklikšķiniet uz Ģenerēt bitu straumi, lai veiktu visas ieviešanas darbības un ģenerētu programmēšanas bitu straumi file.
  • Visbeidzot noklikšķiniet uz Atvērt aparatūras pārvaldnieku un ieprogrammējiet FPGA, izmantojot GUI.
  • Tagad varat turpināt lasīt un rakstīt reģistrus, izmantojot demo/arty_s7_50/uart_regs.py skriptu, kā aprakstīts sadaļā uart_regs.py.

Īstenošana

  • Nav īpašu ieviešanas prasību.

Ierobežojumi

  • Šim dizainam nav nepieciešami īpaši laika ierobežojumi, jo UART interfeiss ir lēns un tiek uzskatīts par asinhronu saskarni.
  • uart_rx ievade modulī uart_regs tiek sinhronizēta modulī uart_rx. Tādējādi tas nav jāsinhronizē augstākā līmeņa modulī.

Zināmas problēmas

  • Iespējams, modulis būs jāatiestata, lai to varētu izmantot atkarībā no tā, vai jūsu FPGA arhitektūra atbalsta noklusējuma reģistra vērtības.

Vairāk informācijas

FAQ

J: Kāds ir UART testa interfeisa ģeneratora mērķis?

A: UART testa interfeisa ģenerators ļauj izveidot pielāgotas saskarnes, lai mijiedarbotos ar FPGA reģistra vērtībām, izmantojot UART komunikāciju.

J: Kā es varu instalēt Pyserial pakotni?

A: Varat instalēt Pyserial, izmantojot Pip, izmantojot komandu: pip install pyserial

Dokumenti / Resursi

VHDLwhiz UART testa interfeisa ģenerators [pdfLietotāja rokasgrāmata
UART testa interfeisa ģenerators, testa interfeisa ģenerators, interfeisa ģenerators, ģenerators

Atsauces

Atstājiet komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti *