Генератар тэставага інтэрфейсу VHDLwhiz UART
Інфармацыя аб прадукце
тэхнічныя характарыстыкі:
- Назва прадукту: VHDL рэгістраў генератар тэставага інтэрфейсу UART
- Версія: 1.0.4
- Дата: 18 жніўня 2024 г
- Аўтар: Ёнас Джуліян Дженсен
- Прадукт URL: Спасылка на прадукт
- Кантактны адрас электроннай пошты: jonas@vhdlwhiz.com
Апісанне
Гэты прадукт дазваляе ствараць карыстальніцкія інтэрфейсы для чытання і запісу значэнняў рэгістра FPGA з дапамогай UART. Згенераваны модуль VHDL і скрыпт Python даюць магчымасць узаемадзейнічаць з рознымі тыпамі рэгістраў у вашай канструкцыі FPGA.
Патрабаванні
- Інтэрпрэтатар python 3
- пакет pyserial
Пратакол
Прадукт выкарыстоўвае пратакол кадравання даных з чатырма сімваламі кіравання:
- Імя: READ_REQ, значэнне: 0x0A – каманда ад хоста да FPGA, каб пачаць паслядоўнасць запісу, каб адправіць усе рэгістры назад праз UART
- Імя: START_WRITE, значэнне: 0x0B - Пазначае пачатак паслядоўнасці запісу ў любым кірунку
- Імя: END_WRITE, значэнне: 0x0C – пазначае канец паслядоўнасці запісу ў любым кірунку
- Імя: Уцёкі, значэнне: 0x0D – сімвал экраніравання, які выкарыстоўваецца для экраніравання слоў кіравання
Інструкцыя па ўжыванні прадукту
Запуск сцэнарыяў
Каб выкарыстоўваць прадукт, пераканайцеся, што ў вас усталяваны Python 3 і пакет Pyserial. Запускайце скрыпты праз інтэрпрэтатар Python 3.
Стварэнне карыстацкіх інтэрфейсаў
Выкарыстоўвайце скрыпт gen_uart_regs.py для стварэння ўласных інтэрфейсаў для чытання і запісу значэнняў рэгістра FPGA. Вы можаце задаць склад уваходных і выходных рэгістраў і тыпы пры генерацыі вываду files.
Узаемадзеянне з рэгістрамі
Вы можаце чытаць або запісваць любую колькасць рэгістраў у вашай канструкцыі FPGA, выкарыстоўваючы згенераваны модуль VHDL і скрыпт Python. Даступныя рэгістры могуць мець такія тыпы, як std_logic, std_logic_vector, signed або unsigned.
Ліцэнзія
- Ліцэнзія Масачусецкага тэхналагічнага інстытута распаўсюджваецца на патрабаванні аўтарскага права і ўмовы выкарыстання зыходнага кода. Звярніцеся да LICENSE.txt file у Zip file для дэталяў.
Журнал змяненняў
- Гэтыя змены тычацца праекта files, і гэты дакумент абнаўляецца адпаведна
Версія | Заўвагі |
1.0.0 | Першапачатковы выпуск |
1.0.1 | Выпраўлена памылка адсутнай спасылкі «self» пры імпарце як uart_regs.py як модуля Python. Раздрукоўка з няўдалай запісам зменена на выключэнне
пазбягайце друку на кансолі пры працы ў якасці імпартаванага модуля. |
1.0.2 | Выпраўленне памылкі Vivado [Synth 8-248], калі няма рэгулятараў выхаднога рэжыму. |
1.0.3 | Выпраўце папярэджанне Vivado Linter: рэгістрацыя дазволіла абумоўлена
сінхронны скід |
1.0.4 | Выпраўце кутні рэгістр пры атрыманні няправільна сфарміраванага слова з кіравальным сімвалам у якасці апошняга байта. Наступнае слова таксама будзе страчана, таму што мы не ачысцілі recv_data_prev_is_escape пры вяртанні ў IDLE.
Скрыпт gen_uart_regs.py цяпер дазваляе толькі ўнікальныя імёны рэгістрацый. |
Апісанне
- Гэты дакумент апісвае наступнае files і тэчкі:
- gen_uart_regs.py
- генераваны/uart_regs.vhd
- generated/uart_regs.py
- генераваны/instantiation_template.vho
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
- дэманстрацыя/lattice_icestick/
- дэманстрацыя/xilinx_arty_a7_35/
- дэманстрацыя/xilinx_arty_s7_50/
- Сцэнар gen_uart_regs.py і падтрымка VHDL files у гэтым праекце дазваляюць ствараць карыстальніцкія інтэрфейсы для чытання і запісу значэнняў рэгістра FPGA розных тыпаў і шырыні з дапамогай UART.
- Вы можаце выкарыстоўваць згенераваны модуль VHDL і скрыпт Python для чытання або запісу ў любую колькасць рэгістраў у вашым дызайне. Рэгістры, даступныя UART, могуць мець тыпы std_logic, std_logic_vector, signed або unsigned.
- Вы можаце вызначыць дакладны склад уваходных і выходных рэгістраў і тыпы пры генерацыі вываду fileз выкарыстаннем сцэнарыя gen_uart_regs.py.
- Скрыпты Python былі створаны часткова з дапамогай інструмента штучнага інтэлекту ChatGPT, а VHDL-код створаны ўручную.
Патрабаванні
- Скрыпты ў гэтым праекце павінны запускацца праз інтэрпрэтатар Python 3 і павінен быць усталяваны пакет Pyserial.
- Вы можаце ўсталяваць pyserial праз Pip з дапамогай гэтай каманды: pip install pyserial
Пратакол
- VHDL files і скрыпт Python выкарыстоўваюць пратакол кадравання даных з чатырма элементамі кіравання
Імя | Каштоўнасць | Каментуйце |
READ_REQ | 0x0A | Каманда ад хоста да FPGA, каб пачаць запіс
паслядоўнасць, каб адправіць усе рэгістры назад праз UART |
ПАЧАЦЬ ПІСАЦЬ | 0x0B | Пазначае пачатак паслядоўнасці запісу ў любым
кірунак |
END_WRITE | 0x0C | Пазначае канец паслядоўнасці запісу ў любым кірунку |
Уцёкі | 0x0D | Сімвал экраніравання, які выкарыстоўваецца для экраніравання любога з кантрольных слоў, у тым ліку самога сімвала ESCAPE, калі яны з'яўляюцца як дадзеныя паміж маркерамі START_WRITE і END_WRITE. |
Любы неэкраніраваны байт READ_REQ, адпраўлены ў FPGA, з'яўляецца інструкцыяй адправіць усе яго даступныя з дапамогай UART рэгістры (уваходы і выхады) назад на хост праз UART. Гэтая каманда звычайна выдаецца толькі сцэнарыем uart_regs.py.
Атрымаўшы гэтую каманду, FPGA адкажа, адправіўшы змесціва ўсіх рэгістраў назад на хост. Спачатку ўваходныя сігналы, потым выхадныя. Калі іх даўжыня не кратная 8 бітам, малодшыя біты апошняга байта будуць дапаўняцца нулямі.
Паслядоўнасць запісу заўсёды пачынаецца з байта START_WRITE і заканчваецца байтам END_WRITE. Любыя байты паміж імі лічацца байтамі даных. Калі якія-небудзь байты дадзеных маюць такое ж значэнне, што і сімвал кіравання, байт дадзеных павінен быць экранаваны. Гэта азначае адпраўку дадатковага сімвала ESCAPE перад байтам дадзеных, каб паказаць, што гэта насамрэч дадзеныя.
Калі неэкраніраваны START_WRITE прыходзіць дзе-небудзь у патоку байтаў, гэта лічыцца пачаткам паслядоўнасці запісу. Модуль uart_regs_backend выкарыстоўвае гэтую інфармацыю для паўторнай сінхранізацыі ў выпадку, калі сувязь выходзіць з сінхранізацыі.
gen_uart_regs.py
- Гэта скрыпт, з якога вы павінны пачаць ствараць інтэрфейс. Ніжэй прыведзены скрыншот меню даведкі, якое можна атрымаць, запусціўшы: python gen_uart_regs.py -h
- Каб згенераваць карыстальніцкі інтэрфейс, вы павінны запусціць скрыпт з кожным з жаданых кантраляваных UART рэгістраў, пералічаных у якасці аргументаў. Даступныя тыпы: std_logic, std_logic_vector, unsigned і signed.
- Рэжым па змаўчанні (кірунак) уключаны, а тып па змаўчанні - std_logic_vector, калі толькі рэгістр не мае даўжыню: 1. Тады па змаўчанні будзе выкарыстоўвацца std_logic.
- Такім чынам, калі вы хочаце стварыць уваходны сігнал std_logic, вы можаце выкарыстоўваць любы з гэтых аргументаў:
- my_sl=1
- my_sl=1:у
- my_sl=1:in:std_logic
- Усе вышэйпералічаныя варыянты прывядуць да таго, што скрыпт згенеруе гэты даступны сігнал UART:
- Давайце запусцім скрыпт з аргументамі для стварэння інтэрфейсу з некалькімі рэгістрамі розных накірункаў, даўжынь і тыпаў
Згенераваны files
- Паспяховы запуск скрыпту gen_uart_regs.py створыць выходную папку з назвай, згенераванай з дапамогай трох files пералічаныя ніжэй. Калі яны ўжо існуюць, яны будуць перазапісаны.
- генераваны/uart_regs.vhd
- generated/uart_regs.py
- генераваны/instantiation_template.vho
- uart_regs.vhd
- Гэта карыстальніцкі інтэрфейсны модуль, створаны скрыптам. Вам трэба стварыць яго асобнік у вашым дызайне, каб ён мог атрымаць доступ да рэгістраў, якімі вы хочаце кіраваць з дапамогай UART.
- Усё, што знаходзіцца над раздзелам «– Рэгістры, даступныя UART», будзе ідэнтычным для кожнага модуля uart_regs, у той час як склад сігналаў порта ніжэй гэтага радка залежыць ад аргументаў, перададзеных скрыпту генератара.
- У спісе ніжэй паказаны аб'ект для модуля uart_regs, атрыманы ў выніку каманды генерацыі exampпаказана ў раздзеле gen_uart_regs.py
- Вам не трэба сінхранізаваць сігнал uart_rx, бо гэта апрацоўваецца ў uart_rx. модуль.
- Калі модуль атрымлівае запыт на чытанне, ён будзе фіксаваць значэнні ўсіх уваходных і выходных сігналаў у межах бягучага тактавага цыклу. Затым імгненны здымак адпраўляецца на хост праз UART.
- Калі адбываецца запіс, усе выходныя рэгістры абнаўляюцца новымі значэннямі ў межах аднаго такту. Немагчыма змяніць значэнні выхаднога сігналу асобна.
- Тым не менш, скрыпт uart_regs.py дазваляе карыстальніку абнаўляць толькі выбраныя выхады, спачатку счытваючы бягучыя значэнні ўсіх рэгістраў. Затым ён запісвае ўсе значэнні, у тым ліку абноўленыя.
- uart_regs.py
- Generated/uart_regs.py file генеруецца разам з модулем uart_regs VHDL і змяшчае інфармацыю аб карыстальніцкім рэгістры ў загалоўку file. З дапамогай гэтага сцэнарыя вы можаце з лёгкасцю чытаць або запісваць у свае ўласныя рэестры.
Меню дапамогі
- Увядзіце python uart_regs.py -h, каб раздрукаваць меню даведкі:
Настройка порта UART
- У скрыпту ёсць параметры для ўстаноўкі порта UART з дапамогай пераключальніка -c. Гэта працуе ў Windows і Linux. Усталюйце для яго адзін з даступных партоў, пералічаных у меню даведкі. Каб усталяваць порт па змаўчанні, вы таксама можаце адрэдагаваць зменную UART_PORT у скрыпце uart_regs.py.
Пералік рэестраў
- Інфармацыя аб адлюстраванні рэгістра змяшчаецца ў загалоўку скрыпта uart_regs.py скрыптом gen_uart_regs.py. Вы можаце пералічыць даступныя рэгістры з дапамогай пераключальніка -l, як паказана ніжэй. Гэта лакальная каманда, і яна не будзе ўзаемадзейнічаць з мэтавай FPGA
Запіс у рэестры
- Вы можаце запісваць у любы з рэгістраў выхаднога рэжыму з дапамогай пераключальніка -w. Увядзіце назву рэгістра, за якой варта знак “=”, і значэнне, прыведзенае ў выглядзе двайковага, шаснаццатковага або дзесятковага значэння, як паказана ніжэй.
- Звярніце ўвагу, што рэалізацыя VHDL патрабуе, каб скрыпт запісваў усе выходныя рэгістры адначасова. Такім чынам, калі вы не ўкажаце поўны набор выходных рэгістраў, скрыпт спачатку выканае чытанне з мэтавай FPGA, а затым выкарыстае гэтыя значэнні для адсутных. У выніку зменяцца толькі ўказаныя рэгістры
- Калі вы выконваеце запіс, усе ўказаныя рэгістры будуць змяняцца на працягу таго ж тактавага цыклу, а не адразу пасля атрымання праз UART.
Чытанне рэестраў
- Выкарыстоўвайце пераключальнік -r, каб прачытаць усе значэнні рэгістра, як паказана ніжэй. Значэнні, пазначаныя жоўтым, - гэта тыя, якія мы змянілі ў папярэднім запісе example
- Кожнае чытанне паказвае імгненны здымак усіх уваходных і выходных рэгістраў. Усе яны сampна працягу аднаго і таго ж такту
Адладка
Выкарыстоўвайце пераключальнік -d з любым з іншых пераключальнікаў, калі вам трэба адладзіць пратакол сувязі. Затым скрыпт раздрукуе ўсе адпраўленыя і атрыманыя байты і tag іх, калі яны з'яўляюцца сімваламі кіравання, як паказана ніжэй.
Выкарыстанне інтэрфейсу ў іншых скрыптах Python
- Скрыпт uart_regs.py утрымлівае клас UartRegs, які можна лёгка выкарыстоўваць у якасці інтэрфейсу сувязі ў іншых карыстальніцкіх сцэнарыях Python. Проста імпартуйце клас, стварыце з яго аб'ект і пачніце выкарыстоўваць метады, як паказана ніжэй.
- Звярніцеся да радкоў дакументацыі ў кодзе Python, каб даведацца пра метады, апісанні і тыпы вяртаемых значэнняў.
instantiation_template.vho
- Для вашай зручнасці шаблон стварэння ствараецца разам з модулем uart_regs. Каб зэканоміць час кадавання, вы можаце скапіяваць дэкларацыю модуля і сігналу ў свой дызайн.
Статычны RTL files
- Вы павінны ўключыць наступнае files у вашым праекце VHDL, каб яны былі скампіляваны ў тую ж бібліятэку, што і модуль uart_regs:
- rtl/uart_regs_backend.vhd
- rtl/uart_rx.vhd
- rtl/uart_tx.vhd
- Модуль uart_regs_backend рэалізуе канечныя аўтаматы, якія ўводзяць і выводзяць даныя рэгістра. Ён выкарыстоўвае модулі uart_rx і uart_tx для апрацоўкі сувязі UART з хостам.
Дэманстрацыйныя праекты
- Ёсць тры дэманстрацыйныя праекты, уключаныя ў Zip file. Яны дазваляюць кіраваць перыферыйнымі прыладамі на розных платах, а таксама некалькімі вялікімі ўнутранымі рэгістрамі.
- Дэманстрацыйныя тэчкі ўключаюць папярэдне створаныя uart_regs.vhd і uart_regs.py files зроблены спецыяльна для гэтых канструкцый.
Рашотка iCEstick
- Тэчка demo/icecube2_icestick змяшчае дэманстрацыйную рэалізацыю доступу да рэгістра для платы Lattice iCEstick FPGA.
- Каб выканаць працэс рэалізацыі, адкрыйце demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file у праграмным забеспячэнні для праектавання Lattice iCEcube2.
- Пасля загрузкі праекта ў iCEcube2 GUI націсніце Інструменты→Выканаць усе, каб стварыць растравы малюнак праграмавання file.
- Вы можаце выкарыстоўваць аўтаномны інструмент Lattice Diamond Programmer для канфігурацыі FPGA са згенераваным растравым малюнкам file. Калі Diamond Programmer адкрыецца, націсніце Адкрыць існуючы праект праграміста ў дыялогавым акне прывітання.
- Выберыце праект file знойдзены ў Zip: demo/lattice_icestick/diamond_programmer_project.xcf і націсніце OK.
- Пасля загрузкі праекта націсніце тры кропкі ў File Слупок імя, як паказана вышэй. Праглядзіце, каб выбраць растравы малюнак file якія вы згенеравалі ў iCEcube2
- дэма/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
- Нарэшце, падключыўшы плату iCEstick да USB-порта вашага камп'ютара, абярыце Дызайн→Праграма, каб запраграмаваць флэш-памяць SPI і наладзіць FPGA.
- Цяпер вы можаце перайсці да чытання і запісу рэгістраў з дапамогай сцэнарыя demo/lattice_icestick/uart_regs.py, як апісана ў раздзеле uart_regs.py.
Xilinx Digilent Arty A7-35T
- Вы можаце знайсці дэманстрацыйную рэалізацыю ацэначнага набору Artix-7 35T Arty FPGA у тэчцы demo/arty_a7_35.
- Адкрыйце Vivado і перайдзіце да вынятага fileз дапамогай кансолі Tcl, размешчанай у ніжняй частцы графічнага інтэрфейсу. Увядзіце гэтую каманду, каб увайсці ў тэчку дэманстрацыйнага праекта:
- кд /demo/arty_a7_35/vivado_proj/
- Выканайце скрыпт create_vivado_proj.tcl Tcl, каб аднавіць праект Vivado:
- крыніца ./create_vivado_proj.tcl
- Націсніце «Стварыць бітавы паток» на бакавой панэлі, каб прайсці ўсе этапы рэалізацыі і стварыць бітавы паток праграмавання file.
- Нарэшце, націсніце Open Hardware Manager і запраграмуйце FPGA праз графічны інтэрфейс.
- Цяпер вы можаце перайсці да чытання і запісу рэестраў з дапамогай сцэнарыя demo/arty_a7_35/uart_regs.py, як апісана ў раздзеле uart_regs.py.
Xilinx Digilent Arty S7-50
- Вы можаце знайсці дэманстрацыйную рэалізацыю платы распрацоўкі Arty S7: Spartan-7 FPGA у тэчцы demo/arty_s7_50.
- Адкрыйце Vivado і перайдзіце да вынятага fileз дапамогай кансолі Tcl, размешчанай у ніжняй частцы графічнага інтэрфейсу. Увядзіце гэтую каманду, каб увайсці ў тэчку дэманстрацыйнага праекта:
- кд /demo/arty_s7_50/vivado_proj/
- Выканайце скрыпт create_vivado_proj.tcl Tcl, каб аднавіць праект Vivado:
- крыніца ./create_vivado_proj.tcl
- Націсніце «Стварыць бітавы паток» на бакавой панэлі, каб прайсці ўсе этапы рэалізацыі і стварыць бітавы паток праграмавання file.
- Нарэшце, націсніце Open Hardware Manager і запраграмуйце FPGA праз графічны інтэрфейс.
- Цяпер вы можаце працягваць чытаць і запісваць рэестры з дапамогай сцэнарыя demo/arty_s7_50/uart_regs.py, як апісана ў раздзеле uart_regs.py.
Рэалізацыя
- Спецыяльных патрабаванняў да рэалізацыі няма.
Абмежаванні
- Для гэтага дызайну не патрэбны асаблівыя абмежаванні па часе, таму што інтэрфейс UART павольны і разглядаецца як асінхронны інтэрфейс.
- Уваход uart_rx у модуль uart_regs сінхранізуецца ў модулі uart_rx. Такім чынам, яго не трэба сінхранізаваць у модулі верхняга ўзроўню.
Вядомыя праблемы
- Магчыма, вам спатрэбіцца скінуць модуль, перш чым яго можна будзе выкарыстоўваць, у залежнасці ад таго, ці падтрымлівае ваша архітэктура FPGA значэнні рэгістра па змаўчанні.
Дадатковая інфармацыя
- Аўтарскае права VHDLwhiz.com
FAQ
Пытанне: Якая мэта генератара тэставага інтэрфейсу UART?
A: Генератар тэставага інтэрфейсу UART дазваляе ствараць карыстальніцкія інтэрфейсы для ўзаемадзеяння са значэннямі рэгістра FPGA з дапамогай сувязі UART.
Пытанне: Як усталяваць пакет Pyserial?
A: Вы можаце ўсталяваць Pyserial праз Pip з дапамогай каманды: pip install pyserial
Дакументы / Рэсурсы
![]() |
Генератар тэставага інтэрфейсу VHDLwhiz UART [pdfКіраўніцтва карыстальніка Генератар тэставага інтэрфейсу UART, генератар тэставага інтэрфейсу, генератар інтэрфейсу, генератар |