Logo VHDLwhiz

Generátor testovacieho rozhrania VHDLwhiz UART

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

Informácie o produkte

špecifikácie:

  • Názov produktu: VHDL registruje generátor testovacieho rozhrania UART
  • Verzia: 1.0.4
  • Dátum: 18. augusta 2024
  • Autor: Jonas Julian Jensen
  • Produkt URL: Odkaz na produkt
  • Kontaktný email: jonas@vhdlwhiz.com

Popis

Tento produkt vám umožňuje vytvárať vlastné rozhrania na čítanie a zápis hodnôt registra FPGA pomocou UART. Generovaný modul VHDL a skript Python poskytujú možnosť interakcie s rôznymi typmi registrov vo vašom návrhu FPGA.

Požiadavky

  • Tlmočník Python 3
  • pyserial balíček

Protokol

Produkt používa protokol rámcovania údajov so štyrmi riadiacimi znakmi:

  • meno: READ_REQ, Hodnota: 0x0A – Príkaz z hostiteľa do FPGA na spustenie sekvencie zápisu na odoslanie všetkých registrov späť cez UART
  • meno: START_WRITE, Hodnota: 0x0B – Označuje začiatok sekvencie zápisu v oboch smeroch
  • meno: END_WRITE, Hodnota: 0x0C – Označuje koniec sekvencie zápisu v oboch smeroch
  • meno: ÚNIK, Hodnota: 0x0D – Escape znak používaný na escapovanie riadiacich slov

Návod na použitie produktu

Spustenie skriptov

Ak chcete produkt používať, uistite sa, že máte nainštalovaný Python 3 a balík Pyserial. Spustite skripty cez interpret Python 3.

Generovanie vlastných rozhraní

Pomocou skriptu gen_uart_regs.py vygenerujte vlastné rozhrania na čítanie a zápis hodnôt registra FPGA. Pri generovaní výstupu môžete určiť zloženie vstupných a výstupných registrov a typov files.

Interakcia s registrami

Môžete čítať alebo zapisovať do ľubovoľného počtu registrov vo svojom návrhu FPGA pomocou vygenerovaného modulu VHDL a skriptu Python. Prístupné registre môžu mať typy ako std_logic, std_logic_vector, podpísané alebo nepodpísané.

Licencia

  • Licencia MIT pokrýva požiadavky na autorské práva a podmienky používania zdrojového kódu. Pozrite si súbor LICENSE.txt file v Zip file pre podrobnosti.

Denník zmien

  • Tieto zmeny sa týkajú projektu files a tento dokument je zodpovedajúcim spôsobom aktualizovaný
Verzia Poznámky
1.0.0 Prvotné uvoľnenie
1.0.1 Opravená chyba chýbajúcej referencie «self» pri importe ako uart_regs.py ako modulu Pythonu. Výtlačok zlyhal pri zápise sa zmenil na výnimku na

vyhnite sa tlači na konzolu, keď je spustený ako importovaný modul.

1.0.2 Oprava chyby Vivado [Synth 8-248], keď neexistujú žiadne reg.
1.0.3 Oprava varovania Vivado Linter: Registrácia má aktiváciu riadenú

synchrónny reset

1.0.4 Opravte rohové písmená pri prijatí nesprávne naformátovaného slova so znakom escape ako posledným bajtom. Ďalšie slovo by sa tiež stratilo, pretože sme pri návrate do IDLE nevymazali recv_data_prev_is_escape.

Skript gen_uart_regs.py teraz povoľuje iba jedinečné názvy reg.

Popis

  • Tento dokument popisuje nasledujúce files a priečinky:
  • gen_uart_regs.py
  • vygenerované/uart_regs.vhd
  • vygenerované/uart_regs.py
  • vygenerovaná/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/
  • Skript gen_uart_regs.py a podporujúci VHDL files v tomto projekte umožňujú generovať vlastné rozhrania na čítanie a zápis hodnôt registra FPGA rôznych typov a šírok pomocou UART.
  • Vygenerovaný modul VHDL a skript Python môžete použiť na čítanie alebo zápis do ľubovoľného počtu registrov vo vašom návrhu. Registre prístupné UART môžu mať typy std_logic, std_logic_vector, signed alebo unsigned.
  • Pri generovaní výstupu môžete rozhodnúť o presnom zložení vstupných a výstupných registrov a typov files pomocou skriptu gen_uart_regs.py.
  • Python skripty boli vytvorené čiastočne s pomocou nástroja umelej inteligencie ChatGPT, zatiaľ čo kód VHDL je ručne vyrobený.

Požiadavky

  • Skripty v tomto projekte musia byť spustené cez interpret Python 3 a musí byť nainštalovaný balík Pyserial.
  • Pyserial môžete nainštalovať cez Pip pomocou tohto príkazu: pip install pyserial

Protokol

  • VHDL files a skript Python používajú protokol rámcovania údajov so štyrmi ovládacími prvkami
Meno Hodnota Komentujte
READ_REQ 0x0A Príkaz z hostiteľa do FPGA na spustenie zápisu

sekvencie na odoslanie všetkých registrov späť cez UART

START_WRITE 0x0B Označuje začiatok sekvencie zápisu v oboch

smer

END_WRITE 0x0C Označuje koniec sekvencie zápisu v oboch smeroch
ÚNIK 0x0D Escape znak používaný na escapovanie ktoréhokoľvek z riadiacich slov vrátane samotného znaku ESCAPE, keď sa objavia ako údaje medzi značkami START_WRITE a END_WRITE.

Akýkoľvek neupravený bajt READ_REQ odoslaný do FPGA je inštrukcia na odoslanie všetkých jeho UART-prístupných registrov (vstupov a výstupov) späť do hostiteľa cez UART. Tento príkaz zvyčajne vydáva iba skript uart_regs.py.
Po prijatí tohto príkazu FPGA odpovie odoslaním obsahu všetkých registrov späť hostiteľovi. Najprv vstupné signály, potom výstupné signály. Ak ich dĺžka nie je násobkom 8 bitov, spodné bity posledného bajtu budú vyplnené nulami.
Zápisová sekvencia vždy začína bajtom START_WRITE a končí bajtom END_WRITE. Akékoľvek bajty medzi nimi sa považujú za dátové bajty. Ak majú niektoré dátové bajty rovnakú hodnotu ako riadiaci znak, dátový bajt musí byť escapovaný. To znamená odoslanie ďalšieho znaku ESCAPE pred dátový bajt, ktorý označuje, že ide v skutočnosti o dáta.
Ak neescapovaný START_WRITE príde kdekoľvek v prúde bajtov, považuje sa to za začiatok sekvencie zápisu. Modul uart_regs_backend používa tieto informácie na opätovnú synchronizáciu v prípade, že sa komunikácia nesynchronizuje.

gen_uart_regs.py

  • Toto je skript, s ktorým musíte začať, aby ste vygenerovali rozhranie. Nižšie je snímka obrazovky ponuky pomocníka, ktorú môžete získať spustením: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface-Generator-FIG-1
  • Ak chcete vygenerovať vlastné rozhranie, musíte spustiť skript s každým požadovaným UART ovládateľným registrom uvedeným ako argument. Dostupné typy sú std_logic, std_logic_vector, unsigned a signed.
  • Predvolený režim (smer) je in a predvolený typ je std_logic_vector, pokiaľ register nemá dĺžku: 1. Potom bude štandardne nastavený na std_logic.
  • Ak teda chcete vytvoriť vstupný signál std_logic, môžete použiť ktorýkoľvek z týchto argumentov:
  • my_sl=1
  • my_sl=1:in
  • my_sl=1:in:std_logic
  • Všetky vyššie uvedené varianty povedú k tomu, že skript vygeneruje tento signál prístupný UART:VHDLwhiz-UART-Test-Interface-Generator-FIG-2
  • Spustite skript s argumentmi na vygenerovanie rozhrania s niekoľkými registrami rôznych smerov, dĺžok a typovVHDLwhiz-UART-Test-Interface-Generator-FIG-3

Vygenerované files

  • Úspešné spustenie skriptu gen_uart_regs.py vytvorí výstupný priečinok s názvom vygenerovaný pomocou troch filesú uvedené nižšie. Ak už existujú, budú prepísané.
  • vygenerované/uart_regs.vhd
  • vygenerované/uart_regs.py
  • vygenerovaná/instantiation_template.vho
  • uart_regs.vhd
  • Toto je modul vlastného rozhrania vygenerovaný skriptom. Musíte ho vytvoriť vo svojom návrhu, kde môže pristupovať k registrom, ktoré chcete ovládať pomocou UART.
  • Všetko nad sekciou „– UART dostupné registre“ bude identické pre každý modul uart_regs, pričom zloženie signálov portov pod týmto riadkom závisí od argumentov zadaných skriptu generátora.
  • Zoznam nižšie zobrazuje entitu pre modul uart_regs, ktorá je výsledkom príkazu generovať exampsúbor zobrazený v časti gen_uart_regs.pyVHDLwhiz-UART-Test-Interface-Generator-FIG-4
  • Nemusíte synchronizovať signál uart_rx, pretože to je spracované v uart_rx. modul.
  • Keď modul prijme požiadavku na čítanie, zachytí hodnoty všetkých vstupných a výstupných signálov v rámci aktuálneho hodinového cyklu. Okamžitá snímka sa potom odošle hostiteľovi cez UART.
  • Keď dôjde k zápisu, všetky výstupné registre sa aktualizujú novými hodnotami v rámci rovnakého hodinového cyklu. Hodnoty výstupného signálu nie je možné individuálne meniť.
  • Skript uart_regs.py však umožňuje používateľovi aktualizovať iba vybrané výstupy tak, že najskôr načíta aktuálne hodnoty všetkých registrov. Potom zapíše späť všetky hodnoty, vrátane aktualizovaných.
  • uart_regs.py
  • Vygenerovaný súbor/uart_regs.py file sa generuje spolu s modulom uart_regs VHDL a obsahuje informácie o vlastnom registri v hlavičke súboru file. Pomocou tohto skriptu môžete ľahko čítať alebo zapisovať do vlastných registrov.

Ponuka Pomoc

  • Ak chcete vytlačiť ponuku pomocníka, zadajte python uart_regs.py -h:VHDLwhiz-UART-Test-Interface-Generator-FIG-5

Nastavenie portu UART

  • Skript má možnosti na nastavenie portu UART pomocou prepínača -c. Toto funguje na Windows a Linux. Nastavte ho na jeden z dostupných portov uvedených v ponuke pomocníka. Ak chcete nastaviť predvolený port, môžete tiež upraviť premennú UART_PORT v skripte uart_regs.py.

Výpis registrov

  • Informácie o mapovaní registra sú umiestnené v hlavičke skriptu uart_regs.py skriptom gen_uart_regs.py. Zoznam dostupných registrov môžete zobraziť pomocou prepínača -l, ako je uvedené nižšie. Toto je lokálny príkaz a nebude interagovať s cieľovým FPGAVHDLwhiz-UART-Test-Interface-Generator-FIG-6

Zápis do registrov

  • Pomocou prepínača -w môžete zapisovať do ktoréhokoľvek z registrov výstupného režimu. Zadajte názov registra, za ktorým nasleduje „=“ a hodnotu zadanú ako binárnu, hexadecimálnu alebo desiatkovú hodnotu, ako je uvedené nižšie.VHDLwhiz-UART-Test-Interface-Generator-FIG-7
  • Všimnite si, že implementácia VHDL vyžaduje, aby skript zapisoval všetky výstupné registre súčasne. Preto, ak nešpecifikujete kompletnú sadu výstupných registrov, skript najprv vykoná čítanie z cieľového FPGA a potom použije tieto hodnoty pre chýbajúce. Výsledkom bude, že sa zmenia len zadané registre
  • Keď vykonáte zápis, všetky špecifikované registre sa zmenia počas rovnakého hodinového cyklu, nie hneď ako sú prijaté cez UART.

Čítanie registrov

  • Na čítanie všetkých hodnôt registra použite prepínač -r, ako je uvedené nižšie. Hodnoty označené žltou farbou sú tie, ktoré sme zmenili v predchádzajúcom zápise naprampleVHDLwhiz-UART-Test-Interface-Generator-FIG-8
  • Každé čítanie zobrazuje okamžitý prehľad všetkých vstupných a výstupných registrov. Všetci sú sampvedené počas rovnakého hodinového cyklu

Ladenie

Ak potrebujete ladiť komunikačný protokol, použite prepínač -d s ktorýmkoľvek iným prepínačom. Potom skript vytlačí všetky odoslané a prijaté bajty a tag ak ide o riadiace znaky, ako je uvedené nižšie.VHDLwhiz-UART-Test-Interface-Generator-FIG-9

Používanie rozhrania v iných skriptoch Pythonu

  • Skript uart_regs.py obsahuje triedu UartRegs, ktorú môžete jednoducho použiť ako komunikačné rozhranie v iných vlastných skriptoch Pythonu. Jednoducho importujte triedu, vytvorte z nej objekt a začnite používať metódy, ako je uvedené nižšie.VHDLwhiz-UART-Test-Interface-Generator-FIG-10
  • Pozrite si reťazce dokumentov v kóde Pythonu, kde nájdete metódy a popisy a typy návratových hodnôt.

instanciation_template.vho

  • Inštanciačná šablóna sa pre vaše pohodlie generuje spolu s modulom uart_regs. Ak chcete ušetriť čas na kódovanie, môžete do svojho návrhu skopírovať konkretizáciu modulu a deklarácie signálov.VHDLwhiz-UART-Test-Interface-Generator-FIG-11VHDLwhiz-UART-Test-Interface-Generator-FIG-12

Statické RTL files

  • Musíte zahrnúť nasledovné files vo vašom projekte VHDL tak, aby boli skompilované do rovnakej knižnice ako modul uart_regs:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Modul uart_regs_backend implementuje konečné automaty, ktoré pridávajú a odstraňujú údaje z registra. Používa moduly uart_rx a uart_tx na spracovanie komunikácie UART s hostiteľom.

Demo projekty

  • V Zip sú zahrnuté tri demo projekty file. Umožňujú vám ovládať periférne zariadenia na rôznych doskách, ako aj niekoľko väčších vnútorných registrov.
  • Demonštračné priečinky obsahujú vopred vygenerované súbory uart_regs.vhd a uart_regs.py filesú vyrobené špeciálne pre tieto dizajny.

Mriežka iCEstick

  • Priečinok demo/icecube2_icestick obsahuje demo implementáciu prístupu k registrom pre dosku FPGA Lattice iCEstick.
  • Ak chcete prejsť procesom implementácie, otvorte demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file v dizajnovom softvéri Lattice iCEcube2.
  • Po načítaní projektu v GUI iCEcube2 kliknite na Nástroje→ Spustiť všetko, aby sa vygenerovala programovacia bitmapa file.
  • Na konfiguráciu FPGA s vygenerovanou bitmapou môžete použiť samostatný nástroj Lattice Diamond Programmer Standalone file. Po otvorení programu Diamond Programmer kliknite v uvítacom dialógovom okne na položku Otvoriť existujúci projekt programátora.
  • Vyberte projekt file nájdete v Zip: demo/lattice_icestick/diamond_programmer_project.xcf a kliknite na OK.VHDLwhiz-UART-Test-Interface-Generator-FIG-13
  • Po načítaní projektu kliknite na tri bodky v File Názov stĺpca, ako je uvedené vyššie. Prejdite a vyberte bitmapu file ktoré ste vygenerovali v iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Nakoniec, s doskou iCEstick zapojenou do USB portu na vašom počítači, vyberte Design→Program na naprogramovanie SPI flash a konfiguráciu FPGA.
  • Teraz môžete pokračovať v čítaní a zapisovaní registrov pomocou skriptu demo/lattice_icestick/uart_regs.py, ako je popísané v časti uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Demo implementáciu pre testovaciu súpravu Artix-7 35T Arty FPGA nájdete v priečinku demo/arty_a7_35.
  • Otvorte Vivado a prejdite na extrahované files pomocou konzoly Tcl, ktorá sa nachádza v spodnej časti rozhrania GUI. Zadajte tento príkaz, aby ste vstúpili do priečinka demo projektu:
  • cd /demo/arty_a7_35/vivado_proj/
  • Spustite skript create_vivado_proj.tcl Tcl na regeneráciu projektu Vivado:
  • zdroj ./create_vivado_proj.tcl
  • Kliknite na Generovať bitový tok na bočnom paneli, aby ste prešli všetkými krokmi implementácie a vygenerovali programovací bitový tok file.
  • Nakoniec kliknite na Open Hardware Manager a naprogramujte FPGA cez GUI.
  • Teraz môžete pokračovať v čítaní a zapisovaní registrov pomocou skriptu demo/arty_a7_35/uart_regs.py, ako je popísané v časti uart_regs.py.

Xilinx Digilent Arty S7-50

  • Demo implementáciu pre vývojovú dosku FPGA Arty S7: Spartan-7 nájdete v priečinku demo/arty_s7_50.
  • Otvorte Vivado a prejdite na extrahované files pomocou konzoly Tcl, ktorá sa nachádza v spodnej časti rozhrania GUI. Zadajte tento príkaz, aby ste vstúpili do priečinka demo projektu:
  • cd /demo/arty_s7_50/vivado_proj/
  • Spustite skript create_vivado_proj.tcl Tcl na regeneráciu projektu Vivado:
  • zdroj ./create_vivado_proj.tcl
  • Kliknite na Generovať bitový tok na bočnom paneli, aby ste prešli všetkými krokmi implementácie a vygenerovali programovací bitový tok file.
  • Nakoniec kliknite na Open Hardware Manager a naprogramujte FPGA cez GUI.
  • Teraz môžete pokračovať v čítaní a zapisovaní registrov pomocou skriptu demo/arty_s7_50/uart_regs.py, ako je popísané v časti uart_regs.py.

Implementácia

  • Neexistujú žiadne špecifické požiadavky na implementáciu.

Obmedzenia

  • Pre tento návrh nie sú potrebné žiadne špecifické časové obmedzenia, pretože rozhranie UART je pomalé a zaobchádza sa s ním ako s asynchrónnym rozhraním.
  • Vstup uart_rx do modulu uart_regs je synchronizovaný v module uart_rx. Preto nie je potrebné synchronizovať ho v module najvyššej úrovne.

Známe problémy

  • V závislosti od toho, či vaša architektúra FPGA podporuje predvolené hodnoty registrov, možno budete musieť resetovať modul pred jeho použitím.

Viac info

často kladené otázky

Otázka: Aký je účel generátora testovacieho rozhrania UART?

Odpoveď: Generátor testovacieho rozhrania UART umožňuje vytváranie vlastných rozhraní na interakciu s hodnotami registra FPGA pomocou komunikácie UART.

Otázka: Ako nainštalujem balík Pyserial?

Odpoveď: Pyserial môžete nainštalovať cez Pip pomocou príkazu: pip install pyserial

Dokumenty / zdroje

Generátor testovacieho rozhrania VHDLwhiz UART [pdfPoužívateľská príručka
Generátor testovacieho rozhrania UART, generátor testovacieho rozhrania, generátor rozhrania, generátor

Referencie

Zanechajte komentár

Vaša emailová adresa nebude zverejnená. Povinné polia sú označené *