Лагатып VHDLwhiz

Генератар тэставага інтэрфейсу VHDLwhiz UART

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 -hVHDLwhiz-UART-Test-Interface-Generator-FIG-1
  • Каб згенераваць карыстальніцкі інтэрфейс, вы павінны запусціць скрыпт з кожным з жаданых кантраляваных 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:VHDLwhiz-UART-Test-Interface-Generator-FIG-2
  • Давайце запусцім скрыпт з аргументамі для стварэння інтэрфейсу з некалькімі рэгістрамі розных накірункаў, даўжынь і тыпаўVHDLwhiz-UART-Test-Interface-Generator-FIG-3

Згенераваны 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.pyVHDLwhiz-UART-Test-Interface-Generator-FIG-4
  • Вам не трэба сінхранізаваць сігнал 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, каб раздрукаваць меню даведкі:VHDLwhiz-UART-Test-Interface-Generator-FIG-5

Настройка порта UART

  • У скрыпту ёсць параметры для ўстаноўкі порта UART з дапамогай пераключальніка -c. Гэта працуе ў Windows і Linux. Усталюйце для яго адзін з даступных партоў, пералічаных у меню даведкі. Каб усталяваць порт па змаўчанні, вы таксама можаце адрэдагаваць зменную UART_PORT у скрыпце uart_regs.py.

Пералік рэестраў

  • Інфармацыя аб адлюстраванні рэгістра змяшчаецца ў загалоўку скрыпта uart_regs.py скрыптом gen_uart_regs.py. Вы можаце пералічыць даступныя рэгістры з дапамогай пераключальніка -l, як паказана ніжэй. Гэта лакальная каманда, і яна не будзе ўзаемадзейнічаць з мэтавай FPGAVHDLwhiz-UART-Test-Interface-Generator-FIG-6

Запіс у рэестры

  • Вы можаце запісваць у любы з рэгістраў выхаднога рэжыму з дапамогай пераключальніка -w. Увядзіце назву рэгістра, за якой варта знак “=”, і значэнне, прыведзенае ў выглядзе двайковага, шаснаццатковага або дзесятковага значэння, як паказана ніжэй.VHDLwhiz-UART-Test-Interface-Generator-FIG-7
  • Звярніце ўвагу, што рэалізацыя VHDL патрабуе, каб скрыпт запісваў усе выходныя рэгістры адначасова. Такім чынам, калі вы не ўкажаце поўны набор выходных рэгістраў, скрыпт спачатку выканае чытанне з мэтавай FPGA, а затым выкарыстае гэтыя значэнні для адсутных. У выніку зменяцца толькі ўказаныя рэгістры
  • Калі вы выконваеце запіс, усе ўказаныя рэгістры будуць змяняцца на працягу таго ж тактавага цыклу, а не адразу пасля атрымання праз UART.

Чытанне рэестраў

  • Выкарыстоўвайце пераключальнік -r, каб прачытаць усе значэнні рэгістра, як паказана ніжэй. Значэнні, пазначаныя жоўтым, - гэта тыя, якія мы змянілі ў папярэднім запісе exampleVHDLwhiz-UART-Test-Interface-Generator-FIG-8
  • Кожнае чытанне паказвае імгненны здымак усіх уваходных і выходных рэгістраў. Усе яны сampна працягу аднаго і таго ж такту

Адладка

Выкарыстоўвайце пераключальнік -d з любым з іншых пераключальнікаў, калі вам трэба адладзіць пратакол сувязі. Затым скрыпт раздрукуе ўсе адпраўленыя і атрыманыя байты і tag іх, калі яны з'яўляюцца сімваламі кіравання, як паказана ніжэй.VHDLwhiz-UART-Test-Interface-Generator-FIG-9

Выкарыстанне інтэрфейсу ў іншых скрыптах Python

  • Скрыпт uart_regs.py утрымлівае клас UartRegs, які можна лёгка выкарыстоўваць у якасці інтэрфейсу сувязі ў іншых карыстальніцкіх сцэнарыях Python. Проста імпартуйце клас, стварыце з яго аб'ект і пачніце выкарыстоўваць метады, як паказана ніжэй.VHDLwhiz-UART-Test-Interface-Generator-FIG-10
  • Звярніцеся да радкоў дакументацыі ў кодзе Python, каб даведацца пра метады, апісанні і тыпы вяртаемых значэнняў.

instantiation_template.vho

  • Для вашай зручнасці шаблон стварэння ствараецца разам з модулем uart_regs. Каб зэканоміць час кадавання, вы можаце скапіяваць дэкларацыю модуля і сігналу ў свой дызайн.VHDLwhiz-UART-Test-Interface-Generator-FIG-11VHDLwhiz-UART-Test-Interface-Generator-FIG-12

Статычны 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.VHDLwhiz-UART-Test-Interface-Generator-FIG-13
  • Пасля загрузкі праекта націсніце тры кропкі ў 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 значэнні рэгістра па змаўчанні.

Дадатковая інфармацыя

FAQ

Пытанне: Якая мэта генератара тэставага інтэрфейсу UART?

A: Генератар тэставага інтэрфейсу UART дазваляе ствараць карыстальніцкія інтэрфейсы для ўзаемадзеяння са значэннямі рэгістра FPGA з дапамогай сувязі UART.

Пытанне: Як усталяваць пакет Pyserial?

A: Вы можаце ўсталяваць Pyserial праз Pip з дапамогай каманды: pip install pyserial

Дакументы / Рэсурсы

Генератар тэставага інтэрфейсу VHDLwhiz UART [pdfКіраўніцтва карыстальніка
Генератар тэставага інтэрфейсу UART, генератар тэставага інтэрфейсу, генератар інтэрфейсу, генератар

Спасылкі

Пакінуць каментар

Ваш электронны адрас не будзе апублікаваны. Абавязковыя для запаўнення палі пазначаны *