Generátor testovacího rozhraní VHDLwhiz UART
Informace o produktu
Specifikace:
- Název produktu: VHDL registruje generátor testovacího rozhraní UART
- Verze: 1.0.4
- Datum: 18. srpna 2024
- Autor: Jonas Julian Jensen
- Produkt URL: Odkaz na produkt
- Kontaktní email: jonas@vhdlwhiz.com
Popis
Tento produkt umožňuje generovat uživatelská rozhraní pro čtení a zápis hodnot registrů FPGA pomocí UART. Generovaný modul VHDL a skript Python poskytují možnost interakce s různými typy registrů ve vašem návrhu FPGA.
Požadavky
- Python 3 interpret
- pyserial balíček
Protokol
Produkt používá protokol rámování dat se čtyřmi řídicími znaky:
- Jméno: READ_REQ, Hodnota: 0x0A – Příkaz z hostitele do FPGA pro zahájení zápisové sekvence pro odeslání všech registrů zpět přes UART
- Jméno: START_WRITE, Hodnota: 0x0B – Označuje začátek sekvence zápisu v obou směrech
- Jméno: END_WRITE, Hodnota: 0x0C – Označuje konec sekvence zápisu v obou směrech
- Jméno: UNIKNOUT, Hodnota: 0x0D – Escape znak používaný pro escapování řídicích slov
Návod k použití produktu
Spouštění skriptů
Chcete-li produkt používat, ujistěte se, že máte nainstalovaný Python 3 a balíček Pyserial. Spusťte skripty přes interpret Python 3.
Generování uživatelských rozhraní
Pomocí skriptu gen_uart_regs.py vygenerujte vlastní rozhraní pro čtení a zápis hodnot registru FPGA. Při generování výstupu můžete určit složení vstupních a výstupních registrů a typů files.
Interakce s registry
Pomocí vygenerovaného modulu VHDL a skriptu Python můžete číst nebo zapisovat do libovolného počtu registrů ve vašem návrhu FPGA. Přístupné registry mohou mít typy jako std_logic, std_logic_vector, podepsané nebo nepodepsané.
Licence
- Licence MIT pokrývá požadavky na autorská práva ke zdrojovému kódu a podmínky použití. Viz soubor LICENSE.txt file v Zipu file pro podrobnosti.
Seznam změn
- Tyto změny se týkají projektu files a tento dokument je odpovídajícím způsobem aktualizován
Verze | Poznámky |
1.0.0 | Počáteční vydání |
1.0.1 | Opravena chybějící referenční chyba «self» při importu jako uart_regs.py jako modulu Pythonu. Výtisk se nezdařilým zápisem byl změněn na výjimku na
vyhněte se tisku na konzoli, když běží jako importovaný modul. |
1.0.2 | Oprava chyby Vivado [Synth 8-248], když neexistují žádné reg. režimu out. |
1.0.3 | Opravit varování Vivado Linter: Registr má povolení řízené
synchronní reset |
1.0.4 | Opravte malá a velká písmena při příjmu chybně tvarovaného slova se znakem escape jako posledním bajtem. Další slovo by bylo také ztraceno, protože jsme při návratu do IDLE nevymazali recv_data_prev_is_escape.
Skript gen_uart_regs.py nyní povoluje pouze jedinečné názvy reg. |
Popis
- Tento dokument popisuje následující files a složky:
- gen_uart_regs.py
- vygenerováno/uart_regs.vhd
- vygenerováno/uart_regs.py
- vygenerováno/instanciation_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ící VHDL files v tomto projektu umožňují generovat vlastní rozhraní pro čtení a zápis hodnot registrů FPGA různých typů a šířek pomocí UART.
- Vygenerovaný modul VHDL a skript Python můžete použít ke čtení nebo zápisu do libovolného počtu registrů ve vašem návrhu. Registry přístupné UART mohou mít typy std_logic, std_logic_vector, signed nebo unsigned.
- O přesném složení vstupních a výstupních registrů a typů můžete rozhodnout při generování výstupu files pomocí skriptu gen_uart_regs.py.
- Python skripty byly vytvořeny částečně s pomocí nástroje umělé inteligence ChatGPT, zatímco kód VHDL je ručně vytvořen.
Požadavky
- Skripty v tomto projektu musí být spouštěny přes interpret Python 3 a musí být nainstalován balíček Pyserial.
- Pyserial můžete nainstalovat přes Pip pomocí tohoto příkazu: pip install pyserial
Protokol
- VHDL files a skript Python používají protokol datového rámce se čtyřmi ovládacími prvky
Jméno | Hodnota | Komentář |
READ_REQ | 0x0A | Příkaz z hostitele do FPGA pro zahájení zápisu
sekvence pro odeslání všech registrů zpět přes UART |
START_WRITE | 0x0B | Označuje začátek sekvence zápisu v obou
směr |
END_WRITE | 0x0C | Označuje konec sekvence zápisu v obou směrech |
UNIKNOUT | 0x0D | Escape znak používaný pro escapování kteréhokoli z řídicích slov, včetně samotného znaku ESCAPE, když se objeví jako data mezi značkami START_WRITE a END_WRITE. |
Jakýkoli neupravený bajt READ_REQ odeslaný do FPGA je instrukce k odeslání všech jeho UART přístupných registrů (vstupů a výstupů) zpět na hostitele přes UART. Tento příkaz obvykle vydává pouze skript uart_regs.py.
Po přijetí tohoto příkazu FPGA odpoví odesláním obsahu všech registrů zpět hostiteli. Nejprve vstupní signály, poté výstupní signály. Pokud se jejich délky nesčítají do násobku 8 bitů, budou nižší bity posledního bytu doplněny nulami.
Zápisová sekvence vždy začíná byte START_WRITE a končí byte END_WRITE. Jakékoli bajty mezi nimi jsou považovány za datové bajty. Pokud mají některé datové bajty stejnou hodnotu jako řídicí znak, musí být datový bajt escapován. To znamená odeslání dalšího znaku ESCAPE před datový bajt, který označuje, že se skutečně jedná o data.
Pokud kamkoli v proudu bajtů dorazí neupravený START_WRITE, považuje se to za začátek sekvence zápisu. Modul uart_regs_backend používá tyto informace k opětovné synchronizaci v případě, že se komunikace nesynchronizuje.
gen_uart_regs.py
- Toto je skript, se kterým musíte začít, abyste vytvořili rozhraní. Níže je snímek obrazovky nabídky nápovědy, kterou můžete získat spuštěním: python gen_uart_regs.py -h
- Chcete-li vygenerovat vlastní rozhraní, musíte skript spustit s každým z požadovaných řiditelných registrů UART uvedeným jako argumenty. Dostupné typy jsou std_logic, std_logic_vector, unsigned a Signed.
- Výchozí režim (směr) je in a výchozí typ je std_logic_vector, pokud registr nemá délku: 1. Poté bude výchozí std_logic.
- Pokud tedy chcete vytvořit vstupní signál std_logic, můžete použít kterýkoli z těchto argumentů:
- my_sl=1
- my_sl=1:in
- my_sl=1:in:std_logic
- Všechny výše uvedené varianty povedou k tomu, že skript vygeneruje tento signál přístupný UART:
- Spusťte skript s argumenty pro vygenerování rozhraní s několika registry různých směrů, délek a typů
Vygenerováno files
- Úspěšné spuštění skriptu gen_uart_regs.py vytvoří výstupní složku pojmenovanou vygenerovanou třemi filejsou uvedeny níže. Pokud již existují, budou přepsány.
- vygenerováno/uart_regs.vhd
- vygenerováno/uart_regs.py
- vygenerováno/instanciation_template.vho
- uart_regs.vhd
- Toto je modul uživatelského rozhraní generovaný skriptem. Musíte ji vytvořit ve svém návrhu, kde může přistupovat k registrům, které chcete ovládat pomocí UART.
- Vše nad sekcí „– UART available registry“ bude identické pro každý modul uart_regs, zatímco složení signálů portů pod tímto řádkem závisí na argumentech zadaných skriptu generátoru.
- Níže uvedený seznam ukazuje entitu pro modul uart_regs vyplývající z příkazu gener exampsoubor zobrazený v sekci gen_uart_regs.py
- Signál uart_rx nemusíte synchronizovat, protože je to řešeno v uart_rx. modul.
- Když modul obdrží požadavek na čtení, zachytí hodnoty všech vstupních a výstupních signálů v rámci aktuálního hodinového cyklu. Okamžitý snímek je pak odeslán hostiteli přes UART.
- Když dojde k zápisu, všechny výstupní registry jsou aktualizovány novými hodnotami v rámci stejného hodinového cyklu. Hodnoty výstupního signálu nelze jednotlivě měnit.
- Skript uart_regs.py však umožňuje uživateli aktualizovat pouze vybrané výstupy nejprve zpětným načtením aktuálních hodnot všech registrů. Poté zapíše zpět všechny hodnoty, včetně aktualizovaných.
- uart_regs.py
- Vygenerovaný soubor/uart_regs.py file je generován společně s modulem uart_regs VHDL a obsahuje informace o vlastním registru v záhlaví souboru file. Pomocí tohoto skriptu můžete snadno číst nebo zapisovat do vlastních registrů.
Nabídka nápovědy
- Chcete-li vytisknout nabídku nápovědy, zadejte python uart_regs.py -h:
Nastavení portu UART
- Skript má možnosti nastavit port UART pomocí přepínače -c. Toto funguje na Windows a Linux. Nastavte jej na jeden z dostupných portů uvedených v nabídce nápovědy. Chcete-li nastavit výchozí port, můžete také upravit proměnnou UART_PORT ve skriptu uart_regs.py.
Výpis registrů
- Informace o mapování registru jsou umístěny v záhlaví skriptu uart_regs.py skriptem gen_uart_regs.py. Seznam dostupných registrů můžete zobrazit pomocí přepínače -l, jak je vidět níže. Toto je lokální příkaz a nebude interagovat s cílovým FPGA
Zápis do registrů
- Pomocí přepínače -w můžete zapisovat do libovolného registru výstupního režimu. Zadejte název registru následovaný „=“ a hodnotu danou jako binární, hexadecimální nebo decimální hodnotu, jak je uvedeno níže.
- Všimněte si, že implementace VHDL vyžaduje, aby skript zapisoval všechny výstupní registry současně. Pokud tedy neurčíte úplnou sadu výstupních registrů, skript nejprve provede čtení z cílového FPGA a poté tyto hodnoty použije pro chybějící. Výsledkem bude, že se změní pouze zadané registry
- Když provedete zápis, všechny specifikované registry se změní během stejného hodinového cyklu, ne jakmile jsou přijaty přes UART.
Čtení registrů
- Použijte přepínač -r ke čtení všech hodnot registrů, jak je znázorněno níže. Žlutě označené hodnoty jsou ty, které jsme změnili v předchozím zápisu example
- Každé čtení zobrazuje okamžitý snímek všech vstupních a výstupních registrů. Všichni jsou sampvedeny během stejného hodinového cyklu
Ladění
Pokud potřebujete ladit komunikační protokol, použijte přepínač -d s jakýmkoli jiným přepínačem. Poté skript vytiskne všechny odeslané a přijaté bajty a tag pokud se jedná o řídicí znaky, jak je uvedeno níže.
Použití rozhraní v jiných skriptech Pythonu
- Skript uart_regs.py obsahuje třídu UartRegs, kterou můžete snadno použít jako komunikační rozhraní v jiných vlastních skriptech Pythonu. Jednoduše importujte třídu, vytvořte její objekt a začněte používat metody, jak je uvedeno níže.
- Metody a popisy a typy návratových hodnot najdete v docstrings v kódu Pythonu.
instanciation_template.vho
- Instanční šablona je pro vaše pohodlí generována spolu s modulem uart_regs. Chcete-li ušetřit čas kódování, můžete zkopírovat konkretizaci modulu a deklarace signálů do svého návrhu.
Statické RTL files
- Musíte zahrnout následující files ve vašem projektu VHDL tak, aby byly zkompilovány do stejné knihovny jako modul uart_regs:
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
- Modul uart_regs_backend implementuje stroje s konečným stavem, které zachycují a odebírají data registru. Ke zpracování komunikace UART s hostitelem používá moduly uart_rx a uart_tx.
Demo projekty
- V Zipu jsou tři demo projekty file. Umožňují vám ovládat periferie na různých deskách a také několik větších vnitřních registrů.
- Demonstrační složky zahrnují předem vygenerované uart_regs.vhd a uart_regs.py filejsou vyrobeny speciálně pro tyto návrhy.
Mřížkový iCEstick
- Složka demo/icecube2_icestick obsahuje demo implementaci přístupu k registru pro desku FPGA Lattice iCEstick.
- Chcete-li projít proces implementace, otevřete demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file v návrhovém softwaru Lattice iCEcube2.
- Po načtení projektu do grafického uživatelského rozhraní iCEcube2 klikněte na Nástroje→ Spustit vše a vygenerujte bitmapu programování file.
- Ke konfiguraci FPGA s vygenerovanou bitmapou můžete použít nástroj Lattice Diamond Programmer Standalone file. Po otevření Diamond Programmer klikněte v uvítacím dialogovém okně na Otevřít existující projekt programátoru.
- Vybrat projekt file naleznete v Zip: demo/lattice_icestick/diamond_programmer_project.xcf a klikněte na OK.
- Po načtení projektu klikněte na tři tečky v File Sloupec Název, jak je uvedeno výše. Procházením vyberte bitmapu file které jste vygenerovali v iCEcube2
- demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
- Nakonec, s deskou iCEstick zapojenou do USB portu na vašem počítači, vyberte Design→Program pro naprogramování SPI flash a konfiguraci FPGA.
- Nyní můžete přistoupit ke čtení a zápisu registrů pomocí skriptu demo/lattice_icestick/uart_regs.py, jak je popsáno v sekci uart_regs.py.
Xilinx Digilent Arty A7-35T
- Demo implementaci pro testovací sadu FPGA Artix-7 35T Arty najdete ve složce demo/arty_a7_35.
- Otevřete Vivado a přejděte na extrahované files pomocí konzole Tcl, která se nachází ve spodní části rozhraní GUI. Zadejte tento příkaz pro vstup do složky demo projektu:
- CD /demo/arty_a7_35/vivado_proj/
- Spusťte skript create_vivado_proj.tcl Tcl pro regeneraci projektu Vivado:
- zdroj ./create_vivado_proj.tcl
- Kliknutím na Generovat bitový tok na postranním panelu projdete všemi kroky implementace a vygenerujete programovací bitový tok file.
- Nakonec klikněte na Open Hardware Manager a naprogramujte FPGA přes GUI.
- Nyní můžete přistoupit ke čtení a zápisu registrů pomocí skriptu demo/arty_a7_35/uart_regs.py, jak je popsáno v sekci uart_regs.py.
Xilinx Digilent Arty S7-50
- Demo implementaci pro vývojovou desku FPGA Arty S7: Spartan-7 najdete ve složce demo/arty_s7_50.
- Otevřete Vivado a přejděte na extrahované files pomocí konzole Tcl, která se nachází ve spodní části rozhraní GUI. Zadejte tento příkaz pro vstup do složky demo projektu:
- CD /demo/arty_s7_50/vivado_proj/
- Spusťte skript create_vivado_proj.tcl Tcl pro regeneraci projektu Vivado:
- zdroj ./create_vivado_proj.tcl
- Kliknutím na Generovat bitový tok na postranním panelu projdete všemi kroky implementace a vygenerujete programovací bitový tok file.
- Nakonec klikněte na Open Hardware Manager a naprogramujte FPGA přes GUI.
- Nyní můžete přistoupit ke čtení a zápisu registrů pomocí skriptu demo/arty_s7_50/uart_regs.py, jak je popsáno v sekci uart_regs.py.
Implementace
- Neexistují žádné specifické požadavky na implementaci.
Omezení
- Pro tento návrh nejsou potřeba žádná konkrétní časová omezení, protože rozhraní UART je pomalé a je s ním zacházeno jako s asynchronním rozhraním.
- Vstup uart_rx do modulu uart_regs je synchronizován v modulu uart_rx. Není tedy nutné jej synchronizovat v modulu nejvyšší úrovně.
Známé problémy
- V závislosti na tom, zda vaše architektura FPGA podporuje výchozí hodnoty registrů, budete možná muset před použitím modul resetovat.
Více informací
- Copyright VHDLwhiz.com
Nejčastější dotazy
Otázka: Jaký je účel generátoru testovacího rozhraní UART?
Odpověď: Generátor testovacího rozhraní UART umožňuje vytvoření vlastních rozhraní pro interakci s hodnotami registru FPGA pomocí komunikace UART.
Otázka: Jak nainstaluji balíček Pyserial?
Odpověď: Pyserial můžete nainstalovat přes Pip pomocí příkazu: pip install pyserial
Dokumenty / zdroje
![]() |
Generátor testovacího rozhraní VHDLwhiz UART [pdfUživatelská příručka Generátor testovacího rozhraní UART, generátor testovacího rozhraní, generátor rozhraní, generátor |