VHDLwhiz - logoVHDLwhiz.com
VHDL registruje generátor testovacího rozhraní UART – uživatelská příručka

Verze: 1.0.0
Datum: 1. září 2023
Autor: Jonas Julian Jensen
Produkt URL: https://vhdlwhiz.com/product/vhdl-registers-uart-test-interfacegenerator
Kontaktní email: jonas@vhdlwhiz.com
Tento dokument popisuje použití generátoru testovacího rozhraní UART od VHDLwhiz k vytvoření vlastního modulu VHDL a skriptu Python pro čtení a zápis hodnot registrů FPGA.

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í

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/

The gen_uart_regs.py skript 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 fileSkript s a Python používá protokol rámování dat se čtyřmi řídicími znaky:

Jméno Hodnota Komentář
PŘEČTĚTE SI POŽADAVEK OxOA Příkaz z hostitele do FPGA pro zahájení zápisové sekvence pro odeslání všech registrů zpět přes UART
START_WRITE Ox0B Označuje začátek sekvence zápisu v obou směrech
END_WRITE OxOC Označuje konec sekvence zápisu v obou směrech
UNIKNOUT OxOD 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 -hVHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód

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:VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 2

Spusťte skript s argumenty pro vygenerování rozhraní s několika registry různých směrů, délek a typů:VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 3

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 example zobrazeno v gen_uart_regs.py sekce.VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 4

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:VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 5

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 vypsat pomocí přepínače -l, jak je vidět níže. Toto je místní příkaz a nebude interagovat s cílovým FPGA. VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 6

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.VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 7

Poznámka že implementace VHDL vyžaduje, aby skript zapisoval všechny výstupní registry současně. Pokud tedy neurčíte kompletní 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.VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 8

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.

VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 9

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.VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 10

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.VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 11VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 12

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.VHDLwhiz VHDL registruje generátor testovacího rozhraní UART - kód 13

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_ice stick_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 k 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í konzoly 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 k 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.

Copyright VHDLwhiz.com

Dokumenty / zdroje

VHDLwhiz VHDL registruje generátor testovacího rozhraní UART [pdfUživatelská příručka
VHDL, VHDL registruje generátor testovacího rozhraní UART, registruje generátor testovacího rozhraní UART, generátor testovacího rozhraní UART, generátor testovacího rozhraní, generátor rozhraní, generátor

Reference

Zanechte komentář

Vaše emailová adresa nebude zveřejněna. Povinná pole jsou označena *