VHDLwhiz logó

VHDLwhiz UART teszt interfész generátor

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

Termékinformáció

Műszaki adatok:

  • Terméknév: A VHDL regisztrálja az UART teszt interfész generátort
  • Verzió: 1.0.4
  • Időpont: 18. augusztus 2024
  • Szerző: Jonas Julian Jensen
  • Termék URL: Termék link
  • Kapcsolattartási e-mail: jonas@vhdlwhiz.com

Leírás

Ez a termék lehetővé teszi egyedi interfészek létrehozását az FPGA regiszterértékek olvasásához és írásához UART használatával. A generált VHDL-modul és a Python-szkript lehetővé teszi, hogy az FPGA-tervezésben különféle típusú regiszterekkel kommunikáljon.

Követelmények

  • Python 3 tolmács
  • pyserial csomag

Jegyzőkönyv

A termék adatkeretezési protokollt használ négy vezérlőkarakterrel:

  • Név: READ_REQ, Érték: 0x0A – Parancs a gazdagéptől az FPGA-hoz, hogy írási szekvenciát indítson az összes regiszter visszaküldéséhez UART-on keresztül
  • Név: START_ÍRJ, Érték: 0x0B – Egy írási sorozat kezdetét jelöli bármelyik irányban
  • Név: END_WRITE, Érték: 0x0C – Egy írási sorozat végét jelöli bármelyik irányban
  • Név: MENEKÜLÉS, Érték: 0x0D – Escape karakter a vezérlőszavak kilépésére

A termék használati útmutatója

A szkriptek futtatása

A termék használatához győződjön meg arról, hogy telepítve van a Python 3 és a Pyserial csomag. Futtassa a szkripteket egy Python 3 értelmezőn keresztül.

Egyéni interfészek generálása

Használja a gen_uart_regs.py parancsfájlt egyéni interfészek létrehozásához az FPGA-regiszterértékek olvasásához és írásához. A kimenet generálásakor megadhatja a bemeneti és kimeneti regiszterek összetételét és típusait files.

Interakció a regiszterekkel

A generált VHDL-modul és Python-szkript használatával tetszőleges számú regiszterből olvashat vagy írhat az FPGA-tervben. Az elérhető regiszterek típusai lehetnek, például std_logic, std_logic_vector, signed vagy unsigned.

Engedély

  • Az MIT licenc lefedi a forráskód szerzői jogi követelményeit és felhasználási feltételeit. Tekintse meg a LICENSE.txt fájlt file a Zip-ben file részletekért.

Változásnapló

  • Ezek a változtatások a projektre vonatkoznak files, és ez a dokumentum ennek megfelelően frissül
Változat Megjegyzések
1.0.0 Kezdeti kiadás
1.0.1 Kijavítottuk a hiányzó «self» hivatkozási hibát, amikor uart_regs.py formátumban importált Python-modulként. Sikertelen írási nyomtatás módosult kivételre

kerülje a nyomtatást a konzolra, ha importált modulként fut.

1.0.2 Javítás a Vivado [Synth 8-248] hibára, amikor nincsenek out mode regs.
1.0.3 Vivado Linter figyelmeztetés javítása: A regisztráció engedélyezve van

szinkron visszaállítás

1.0.4 Javítsa ki a sarokbetűt, ha olyan helytelenül formázott szót kap, amelynek utolsó bájtja az escape karakter. A következő szó is elveszett, mert nem töröltük a recv_data_prev_is_escape-t, amikor visszatértünk az IDLE-hez.

A gen_uart_regs.py szkript mostantól csak egyedi reg-neveket engedélyez.

Leírás

  • Ez a dokumentum a következőket írja le files és mappák:
  • gen_uart_regs.py
  • genered/uart_regs.vhd
  • generated/uart_regs.py
  • generált/példányosítási_sablon.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/
  • A gen_uart_regs.py szkript és a támogató VHDL files ebben a projektben lehetővé teszik egyedi interfészek létrehozását különböző típusú és szélességű FPGA-regiszterértékek olvasásához és írásához UART segítségével.
  • A generált VHDL-modul és Python-szkript segítségével tetszőleges számú regiszterből olvashat vagy írhat a tervben. Az UART elérhető regiszterek típusai lehetnek std_logic, std_logic_vector, signed vagy unsigned.
  • A bemeneti és kimeneti regiszterek és típusok pontos összetételéről a kimenet generálásakor dönthet files a gen_uart_regs.py szkriptet használja.
  • A Python szkriptek részben a ChatGPT mesterséges intelligencia eszköz segítségével készültek, míg a VHDL kód kézzel készült.

Követelmények

  • A projektben lévő szkripteket Python 3 értelmezőn keresztül kell futtatni, és telepíteni kell a Pyserial csomagot.
  • A pyserialt a Pip-en keresztül telepítheti a következő paranccsal: pip install pyserial

Jegyzőkönyv

  • A VHDL fileAz s és a Python szkript adatkeretezési protokollt használ négy vezérléssel
Név Érték Megjegyzés
READ_REQ 0x0A Parancs a gazdagéptől az FPGA-hoz az írás kezdeményezéséhez

szekvencia az összes regiszter visszaküldéséhez UART-on keresztül

START_ÍRÁS 0x0B Az írási sorozat kezdetét jelöli bármelyikben

irány

END_WRITE 0x0C Egy írási sorozat végét jelöli bármelyik irányban
MENEKÜLÉS 0x0D Escape karakter a vezérlőszavak bármelyikének megszakítására, beleértve magát az ESCAPE karaktert is, amikor azok adatként jelennek meg a START_WRITE és END_WRITE jelölők között.

Az FPGA-nak küldött minden nem megtisztított READ_REQ bájt egy utasítás arra, hogy az összes UART-elérhető regisztert (bemeneteket és kimeneteket) visszaküldje a gazdagépnek UART-on keresztül. Ezt a parancsot általában csak az uart_regs.py parancsfájl adja ki.
A parancs fogadásakor az FPGA úgy válaszol, hogy visszaküldi az összes regiszter tartalmát a gazdagépnek. Először a bemeneti jelek, majd a kimeneti jelek. Ha a hosszuk nem adja ki a 8 bit többszörösét, az utolsó bájt alsó bitjei kitöltött nullák lesznek.
Az írási sorozat mindig a START_WRITE bájttal kezdődik és az END_WRITE bájttal végződik. A közöttük lévő minden bájt adatbájtnak minősül. Ha bármely adatbájtnak ugyanaz az értéke, mint egy vezérlőkarakternek, akkor az adatbájtot meg kell szabadítani. Ez azt jelenti, hogy az adatbájt előtt egy extra ESCAPE karaktert kell küldeni, jelezve, hogy valójában adatról van szó.
Ha egy nem megtisztított START_WRITE érkezik bárhová a bájtfolyamban, az egy írási sorozat kezdetének minősül. Az uart_regs_backend modul ezeket az információkat az újraszinkronizáláshoz használja arra az esetre, ha a kommunikáció nem szinkronizálna.

gen_uart_regs.py

  • Ezzel a szkripttel kell kezdeni a felület létrehozásához. Az alábbiakban látható egy képernyőkép a súgó menüről, amelyet a következő futtatással érhet el: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface-Generator-1. ÁBRA
  • Egyéni interfész létrehozásához le kell futtatnia a szkriptet az összes kívánt UART vezérelhető regiszterrel argumentumként. Az elérhető típusok a következők: std_logic, std_logic_vector, unsigned és signed.
  • Az alapértelmezett mód (irány) be van kapcsolva, és az alapértelmezett típus a std_logic_vector, kivéve, ha a regiszter hosszúságú: 1. Ekkor az alapértelmezett std_logic lesz.
  • Így, ha std_logic bemeneti jelet szeretne létrehozni, használhatja az alábbi argumentumok bármelyikét:
  • my_sl=1
  • my_sl=1:in
  • my_sl=1:in:std_logic
  • A fenti változatok mindegyike azt eredményezi, hogy a szkript létrehozza ezt az UART-elérhető jelet:VHDLwhiz-UART-Test-Interface-Generator-2. ÁBRA
  • Futtassuk a szkriptet argumentumokkal, hogy létrehozzunk egy interfészt több, különböző irányú, hosszúságú és típusú regiszterrelVHDLwhiz-UART-Test-Interface-Generator-3. ÁBRA

Generált files

  • A gen_uart_regs.py szkript sikeres futtatása egy kimeneti mappát hoz létre, amelynek neve a három filealább felsorolva. Ha már léteznek, akkor felülírják őket.
  • genered/uart_regs.vhd
  • generated/uart_regs.py
  • generált/példányosítási_sablon.vho
  • uart_regs.vhd
  • Ez a szkript által generált egyéni interfész modul. Példányosítania kell a tervben, ahol hozzáférhet az UART segítségével vezérelni kívánt regiszterekhez.
  • Az „– UART hozzáférhető regiszterek” szakasz felett minden uart_regs modulnál azonos lesz, míg a sor alatti portjelek összetétele a generátor szkriptnek adott argumentumoktól függ.
  • Az alábbi lista az uart_regs modul entitását mutatja, amely az ex generálási parancs eredményeampa gen_uart_regs.py szakaszban láthatóVHDLwhiz-UART-Test-Interface-Generator-4. ÁBRA
  • Nem kell szinkronizálnia az uart_rx jelet, mivel azt az uart_rx kezeli. modul.
  • Amikor a modul olvasási kérést kap, az aktuális óracikluson belüli összes bemeneti és kimeneti jel értékét rögzíti. A pillanatnyi pillanatfelvétel ezután elküldésre kerül a gazdagépnek UART-on keresztül.
  • Amikor írás történik, az összes kimeneti regiszter frissül az új értékekkel ugyanazon az órajelen belül. A kimeneti jelek értékeinek egyenkénti megváltoztatása nem lehetséges.
  • Az uart_regs.py szkript azonban lehetővé teszi a felhasználó számára, hogy csak a kiválasztott kimeneteket frissítse úgy, hogy először visszaolvassa az összes regiszter aktuális értékét. Ezután minden értéket visszaír, beleértve a frissítetteket is.
  • uart_regs.py
  • A generált/uart_regs.py file az uart_regs VHDL modullal együtt jön létre, és az egyéni regiszterinformációkat tartalmazza a fejlécben. file. Ezzel a szkripttel könnyedén olvashat vagy írhat egyéni regisztereiből.

Súgó menü

  • A súgó menü kinyomtatásához írja be a python uart_regs.py -h parancsot:VHDLwhiz-UART-Test-Interface-Generator-5. ÁBRA

Az UART port beállítása

  • A szkript rendelkezik az UART port beállításával a -c kapcsolóval. Ez Windows és Linux rendszeren működik. Állítsa be a súgó menüben felsorolt ​​elérhető portok egyikére. Az alapértelmezett port beállításához szerkesztheti az UART_PORT változót is az uart_regs.py szkriptben.

Listázási nyilvántartások

  • A regiszterleképezéssel kapcsolatos információkat a gen_uart_regs.py szkript helyezi el az uart_regs.py szkript fejlécében. Az elérhető regisztereket a -l kapcsolóval listázhatja, ahogy az alább látható. Ez egy helyi parancs, és nem lép kölcsönhatásba a cél FPGA-valVHDLwhiz-UART-Test-Interface-Generator-6. ÁBRA

Írás a nyilvántartásokhoz

  • Bármelyik out mode regiszterbe írhat a -w kapcsolóval. Adja meg a regiszternevet, amelyet a „=” követ, és a bináris, hexadecimális vagy decimális értékként megadott értéket, az alábbiak szerint.VHDLwhiz-UART-Test-Interface-Generator-7. ÁBRA
  • Vegye figyelembe, hogy a VHDL implementáció megköveteli, hogy a szkript egyidejűleg írja ki az összes kimeneti regisztert. Ezért, ha nem adja meg a kimeneti regiszterek teljes készletét, a szkript először végrehajt egy olvasást a cél FPGA-ból, majd ezeket az értékeket használja a hiányzókhoz. Az eredmény az lesz, hogy csak a megadott regiszterek változnak
  • Amikor írást hajt végre, az összes megadott regiszter ugyanazon óraciklus alatt változik, nem pedig azonnal, amikor az UART-on keresztül megérkezik.

Olvasóregiszterek

  • Használja az -r kapcsolót az összes regiszterérték olvasásához, az alábbiak szerint. A sárgával jelölt értékek azok, amelyeket az előző írásban megváltoztattunk plampleVHDLwhiz-UART-Test-Interface-Generator-8. ÁBRA
  • Minden olvasás azonnali pillanatképet mutat az összes bemeneti és kimeneti regiszterről. Mindannyian sampugyanazon óraciklus alatt vezetett

Hibakeresés

Használja a -d kapcsolót bármelyik másik kapcsolóval, ha hibakeresésre van szüksége a kommunikációs protokollban. Ezután a szkript kinyomtatja az összes elküldött és fogadott bájtot és tag ha vezérlő karakterek, az alábbiak szerint.VHDLwhiz-UART-Test-Interface-Generator-9. ÁBRA

A felület használata más Python-szkriptekben

  • Az uart_regs.py szkript tartalmaz egy UartRegs osztályt, amelyet könnyedén használhat kommunikációs felületként más egyéni Python-szkriptekben. Egyszerűen importálja az osztályt, hozzon létre belőle egy objektumot, és kezdje el használni a metódusokat az alábbiak szerint.VHDLwhiz-UART-Test-Interface-Generator-10. ÁBRA
  • Tekintse meg a Python-kód docstringjeit a metódusok és leírások, valamint a visszatérési érték típusai tekintetében.

példányosítási_sablon.vho

  • A példányosítási sablon az uart_regs modullal együtt jön létre az Ön kényelme érdekében. A kódolási idő megtakarítása érdekében bemásolhatja a modul példányosítását és a jeldeklarációkat a tervbe.VHDLwhiz-UART-Test-Interface-Generator-11. ÁBRAVHDLwhiz-UART-Test-Interface-Generator-12. ÁBRA

Statikus RTL files

  • A következőket kell tartalmaznia files a VHDL projektben úgy, hogy azok ugyanabba a könyvtárba legyenek fordítva, mint az uart_regs modul:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • Az uart_regs_backend modul azokat a véges állapotú gépeket valósítja meg, amelyek be- és kikapcsolják a regiszteradatokat. Az uart_rx és uart_tx modulokat használja az UART kommunikáció kezelésére a gazdagéppel.

Demo projektek

  • A Zip három demo projektet tartalmaz file. Lehetővé teszik a különböző kártyákon lévő perifériák, valamint néhány nagyobb belső regiszter vezérlését.
  • A demómappák tartalmazzák az előre generált uart_regs.vhd és uart_regs.py fájlokat files kifejezetten azokhoz a tervekhez készült.

Rácsos iCEstick

  • A demo/icecube2_icestick mappa a Lattice iCEstick FPGA kártya regiszterelérési demo megvalósítását tartalmazza.
  • A megvalósítási folyamat végrehajtásához nyissa meg a demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file a Lattice iCEcube2 tervezőszoftverben.
  • Miután betöltötte a projektet az iCEcube2 grafikus felületre, kattintson az Eszközök→Futtat mindent a programozási bittérkép létrehozásához. file.
  • A Lattice Diamond Programmer Standalone eszközzel konfigurálhatja az FPGA-t a generált bittérképpel file. Amikor megnyílik a Diamond Programmer, kattintson a Meglévő programozói projekt megnyitása elemre az üdvözlő párbeszédpanelen.
  • Válassza ki a projektet file megtalálja a ZIP-fájlban: demo/lattice_icestick/diamond_programmer_project.xcf, majd kattintson az OK gombra.VHDLwhiz-UART-Test-Interface-Generator-13. ÁBRA
  • A projekt betöltése után kattintson a három pontra File Név oszlop, ahogy fent látható. Tallózással válassza ki a bittérképet file amelyet az iCEcube2-ben generált
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Végül, miután az iCEstick kártyát a számítógép USB-portjához csatlakoztatta, válassza a Tervezés → Program menüpontot az SPI flash programozásához és az FPGA konfigurálásához.
  • Most már folytathatja a regiszterek olvasását és írását a demo/lattice_icestick/uart_regs.py szkript használatával, az uart_regs.py szakaszban leírtak szerint.

Xilinx Digilent Arty A7-35T

  • Az Artix-7 35T Arty FPGA kiértékelő készlet demó megvalósítását a demo/arty_a7_35 mappában találja.
  • Nyissa meg a Vivado-t, és navigáljon a kivonathoz files a grafikus felhasználói felület alján található Tcl konzol használatával. Írja be ezt a parancsot, hogy belépjen a demóprojekt mappájába:
  • CD /demo/arty_a7_35/vivado_proj/
  • Futtassa a create_vivado_proj.tcl Tcl parancsfájlt a Vivado projekt újragenerálásához:
  • forrás ./create_vivado_proj.tcl
  • Kattintson a Bitfolyam generálása elemre az oldalsávon az összes megvalósítási lépés végrehajtásához és a programozási bitfolyam létrehozásához file.
  • Végül kattintson a Hardverkezelő megnyitása lehetőségre, és programozza be az FPGA-t a grafikus felhasználói felületen keresztül.
  • Most már folytathatja a regiszterek olvasását és írását a demo/arty_a7_35/uart_regs.py szkript használatával, az uart_regs.py szakaszban leírtak szerint.

Xilinx Digilent Arty S7-50

  • Az Arty S7: Spartan-7 FPGA fejlesztőlap demó megvalósítását a demo/arty_s7_50 mappában találod.
  • Nyissa meg a Vivado-t, és navigáljon a kivonathoz files a grafikus felhasználói felület alján található Tcl konzol használatával. Írja be ezt a parancsot, hogy belépjen a demóprojekt mappájába:
  • CD /demo/arty_s7_50/vivado_proj/
  • Futtassa a create_vivado_proj.tcl Tcl parancsfájlt a Vivado projekt újragenerálásához:
  • forrás ./create_vivado_proj.tcl
  • Kattintson a Bitfolyam generálása elemre az oldalsávon az összes megvalósítási lépés végrehajtásához és a programozási bitfolyam létrehozásához file.
  • Végül kattintson a Hardverkezelő megnyitása lehetőségre, és programozza be az FPGA-t a grafikus felhasználói felületen keresztül.
  • Most már folytathatja a regiszterek olvasását és írását a demo/arty_s7_50/uart_regs.py szkript használatával, az uart_regs.py szakaszban leírtak szerint.

Végrehajtás

  • Nincsenek konkrét végrehajtási követelmények.

Korlátozások

  • Ehhez a kialakításhoz nincs szükség speciális időzítési megkötésekre, mivel az UART interfész lassú, és aszinkron interfészként kezelik.
  • Az uart_regs modul uart_rx bemenete szinkronizálva van az uart_rx modulon belül. Így nem kell szinkronizálni a legfelső szintű modulban.

Ismert problémák

  • Előfordulhat, hogy a modult alaphelyzetbe kell állítania a használat előtt, attól függően, hogy az FPGA architektúrája támogatja-e az alapértelmezett regiszterértékeket.

További információ

GYIK

K: Mi a célja az UART teszt interfész generátornak?

V: Az UART teszt interfész generátor lehetővé teszi egyéni interfészek létrehozását az FPGA regiszterértékekkel való interakcióhoz UART kommunikáció segítségével.

K: Hogyan telepíthetem a Pyserial csomagot?

V: A Pyserial-t a Pip-en keresztül telepítheti a következő paranccsal: pip install pyserial

Dokumentumok / Források

VHDLwhiz UART teszt interfész generátor [pdf] Felhasználói kézikönyv
UART teszt interfész generátor, teszt interfész generátor, interfész generátor, generátor

Hivatkozások

Hagyj megjegyzést

E-mail címét nem tesszük közzé. A kötelező mezők meg vannak jelölve *