VHDLwhiz-лого

Генератор на тест интерфејс VHDLwiz UART

VHDLwiz-UART-Test-Interface-Generator-PRODUCT

Информации за производот

Спецификации:

  • Име на производ: VHDL го регистрира UART тест генератор на интерфејс
  • Верзија: 1.0.4
  • Датум: 18 август 2024 година
  • Автор: Јонас Џулијан Џенсен
  • Производ URL: Линк за производот
  • Е-пошта за контакт: jonas@vhdlwhiz.com

Опис

Овој производ ви овозможува да генерирате сопствени интерфејси за читање и пишување вредности на регистарот FPGA користејќи UART. Генерираниот VHDL модул и Python скриптата обезбедуваат можност за интеракција со различни типови на регистри во вашиот FPGA дизајн.

Барања

  • Пајтон 3 толкувач
  • pyserial пакет

Протокол

Производот користи протокол за рамка на податоци со четири контролни знаци:

  • Име: READ_REQ, Вредност: 0x0A – Наредба од домаќинот до FPGA да иницира редослед за пишување за да ги испрати сите регистри назад преку UART
  • Име: START_ПИШИ, Вредност: 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.

Лиценца

  • Лиценцата МИТ ги покрива барањата за авторски права на изворниот код и условите за користење. Погледнете во ЛИЦЕНЦАТА.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 сега дозволува само уникатни имиња на рег.

Опис

  • Овој документ го опишува следново fileи папки:
  • gen_uart_regs.py
  • генерирана/uart_regs.vhd
  • генерирана/uart_regs.py
  • генерирана/инстанција_шаблон.vho
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • демо/решетка_icestick/
  • демо/xilinx_arty_a7_35/
  • демо/xilinx_arty_s7_50/
  • Скриптата gen_uart_regs.py и поддржува VHDL files во овој проект ви овозможуваат да генерирате сопствени интерфејси за читање и пишување на вредности на FPGA регистар од различни типови и ширини користејќи UART.
  • Можете да го користите генерираниот VHDL модул и Python скриптата за читање или пишување на кој било број на регистри во вашиот дизајн. УАРТ достапните регистри може да ги имаат типовите std_logic, std_logic_vector, signed или unsigned.
  • Можете да одлучите за прецизниот состав на влезните и излезните регистри и типовите кога го генерирате излезот files користејќи ја скриптата gen_uart_regs.py.
  • Скриптите на Python беа делумно создадени со помош на алатката за вештачка интелигенција ChatGPT, додека VHDL кодот е рачно изработен.

Барања

  • Скриптите во овој проект мора да се извршуваат преку интерпретер на Python 3 и мора да се инсталира пакетот Pyserial.
  • Можете да инсталирате pyserial преку Pip користејќи ја оваа команда: pip install pyserial

Протокол

  • VHDL files и Python скриптата користат протокол за врамување податоци со четири контроли
Име Вредност Коментар
READ_REQ 0x0A Наредба од домаќинот до FPGA да иницира запишување

секвенца за испраќање на сите регистри назад преку UART

START_ПИШИ 0x0B Го означува почетокот на редоследот на пишување во било кое

насока

END_WRITE 0х0С Го означува крајот на редоследот на пишување во која било насока
БЕГАЈ 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 -hVHDLwiz-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:in
  • my_sl=1:in:std_logic
  • Сите горенаведени варијанти ќе резултираат со тоа што скриптата ќе го генерира овој сигнал достапен за UART:VHDLwiz-UART-Test-Interface-Generator-FIG-2
  • Ајде да ја извршиме скриптата со аргументи за да генерираме интерфејс со неколку регистри со различни насоки, должини и типовиVHDLwiz-UART-Test-Interface-Generator-FIG-3

Генерирани files

  • Успешното извршување на скриптата gen_uart_regs.py ќе произведе излезна папка именувана генерирана со трите fileсе наведени подолу. Ако веќе постојат, ќе бидат препишани.
  • генерирана/uart_regs.vhd
  • генерирана/uart_regs.py
  • генерирана/инстанција_шаблон.vho
  • uart_regs.vhd
  • Ова е прилагодениот модул за интерфејс генериран од скриптата. Треба да го инстанцирате во вашиот дизајн, каде што може да пристапи до регистрите што сакате да ги контролирате користејќи UART.
  • Сè што е над делот „– UART пристапни регистри“ ќе биде идентично за секој uart_regs модул, додека составот на сигналите на пристаништето под таа линија зависи од аргументите дадени на скриптата на генераторот.
  • Списокот подолу го прикажува ентитетот за модулот uart_regs што произлегува од командата генерира прampе прикажано во делот gen_uart_regs.pyVHDLwiz-UART-Test-Interface-Generator-FIG-4
  • Не треба да го синхронизирате сигналот uart_rx, бидејќи тој се ракува во uart_rx. модул.
  • Кога модулот ќе добие барање за читање, тој ќе ги фати вредностите на сите влезни и излезни сигнали во рамките на тековниот такт. Инстантната снимка потоа се испраќа до домаќинот преку UART.
  • Кога ќе се случи запишување, сите излезни регистри се ажурираат со новите вредности во истиот такт циклус. Не е можно поединечно да се менуваат вредностите на излезниот сигнал.
  • Сепак, скриптата uart_regs.py му овозможува на корисникот да ги ажурира само избраните излези со прво читање на тековните вредности на сите регистри. Потоа ги запишува сите вредности, вклучувајќи ги и ажурираните.
  • uart_regs.py
  • Генерираниот/uart_regs.py file се генерира заедно со uart_regs VHDL модулот и ги содржи информациите за прилагодениот регистар во заглавието на file. Со оваа скрипта, можете лесно да читате од или да пишувате на вашите сопствени регистри.

Мени за помош

  • Напишете python uart_regs.py -h за да го испечатите менито за помош:VHDLwiz-UART-Test-Interface-Generator-FIG-5

Поставување на портата UART

  • Скриптата има опции за поставување на портата UART со помош на прекинувачот -c. Ова работи на Windows и Linux. Поставете го на една од достапните порти наведени во менито за помош. За да поставите стандардна порта, можете исто така да ја уредувате променливата UART_PORT во скриптата uart_regs.py.

Регистри за котација

  • Информациите за мапирањето на регистарот се ставаат во заглавјето на скриптата uart_regs.py со скриптата gen_uart_regs.py. Можете да ги наведете достапните регистри со прекинувачот -l, како што се гледа подолу. Ова е локална команда и нема да комуницира со целната FPGAVHDLwiz-UART-Test-Interface-Generator-FIG-6

Пишување во регистри

  • Можете да пишувате на кој било од регистрите на режимот за излез со користење на прекинувачот -w. Наведете го името на регистарот проследено со „=“ и вредноста дадена како бинарна, хексадецимална или децимална вредност, како што е прикажано подолу.VHDLwiz-UART-Test-Interface-Generator-FIG-7
  • Забележете дека имплементацијата на VHDL бара скриптата да ги запишува сите излезни регистри истовремено. Затоа, ако не наведете целосен сет на излезни регистри, скриптата прво ќе изврши читање од целната FPGA и потоа ќе ги користи тие вредности за оние што недостасуваат. Резултатот ќе биде дека се менуваат само наведените регистри
  • Кога ќе извршите запишување, сите наведени регистри ќе се променат во текот на истиот такт, а не веднаш штом ќе бидат примени преку UART.

Регистри за читање

  • Користете го прекинувачот -r за да ги прочитате сите вредности на регистарот, како што е прикажано подолу. Вредностите означени со жолто се оние што ги сменивме во претходниот запис прampleVHDLwiz-UART-Test-Interface-Generator-FIG-8
  • Секое читање покажува моментална слика од сите влезни и излезни регистри. Сите тие се сampводени во текот на истиот часовник

Дебагирање

Користете го прекинувачот -d со кој било од другите прекинувачи ако треба да го дебагирате протоколот за комуникација. Потоа, скриптата ќе ги испечати сите испратени и примени бајти и tag ако се контролни знаци, како што е прикажано подолу.VHDLwiz-UART-Test-Interface-Generator-FIG-9

Користење на интерфејсот во други скрипти на Python

  • Скриптата uart_regs.py содржи класа UartRegs што можете лесно да ја користите како интерфејс за комуникација во други сопствени скрипти на Python. Едноставно внесете ја класата, креирајте објект од неа и почнете да ги користите методите, како што е прикажано подолу.VHDLwiz-UART-Test-Interface-Generator-FIG-10
  • За методот и описите и типовите на повратни вредности, погледнете ги стринговите на документи во кодот на Python.

instantiation_template.vho

  • Шаблонот за инстанција е генериран заедно со модулот uart_regs за ваша погодност. За да заштедите време за кодирање, можете да ја копирате инстанцијата на модулот и декларации за сигнали во вашиот дизајн.VHDLwiz-UART-Test-Interface-Generator-FIG-11VHDLwiz-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 fileнаправени специјално за тие дизајни.

Решеткаст iCEstick

  • Папката demo/icecube2_icestick содржи демо имплементација за пристап до регистар за плочката Lattice iCEstick FPGA.
  • За да го извршите процесот на имплементација, отворете го демо/lattice_icestick/icecube2_proj/uart_regs_sbt.project file во софтверот за дизајн на Lattice iCEcube2.
  • Откако ќе го вчитате проектот во iCEcube2 GUI, кликнете Tools→ Run All за да ја генерирате програмската битмапа file.
  • Можете да ја користите алатката Lattice Diamond Programmer Standalone за да ја конфигурирате FPGA со генерирана битмапа file. Кога ќе се отвори Diamond Programmer, кликнете Отвори постоечки проект за програмер во полето за дијалог за добредојде.
  • Изберете проект file пронајдете во Zip: demo/lattice_icestick/diamond_programmer_project.xcf и кликнете OK.VHDLwiz-UART-Test-Interface-Generator-FIG-13
  • Откако ќе се вчита проектот, кликнете на трите точки во File Колона за име, како што е прикажано погоре. Прелистајте за да изберете битмапа file што сте ги генерирале во iCEcube2
  • demo/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 и одете до извлеченото files користејќи ја конзолата Tcl што се наоѓа на дното на интерфејсот GUI. Внесете ја оваа команда за да влезете во папката за демо-проект:
  • cd /demo/arty_a7_35/vivado_proj/
  • Извршете ја скриптата create_vivado_proj.tcl Tcl за да го регенерирате проектот Vivado:
  • извор ./create_vivado_proj.tcl
  • Кликнете Generate Bitstream во страничната лента за да ги поминете сите чекори за имплементација и да го генерирате програмскиот битстрим file.
  • Конечно, кликнете Open Hardware Manager и програмирајте го FPGA преку GUI.
  • Сега можете да продолжите да читате и пишувате регистри со користење на скриптата 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 и одете до извлеченото files користејќи ја конзолата Tcl што се наоѓа на дното на интерфејсот GUI. Внесете ја оваа команда за да влезете во папката за демо-проект:
  • cd /demo/arty_s7_50/vivado_proj/
  • Извршете ја скриптата create_vivado_proj.tcl Tcl за да го регенерирате проектот Vivado:
  • извор ./create_vivado_proj.tcl
  • Кликнете Generate Bitstream во страничната лента за да ги поминете сите чекори за имплементација и да го генерирате програмскиот битстрим file.
  • Конечно, кликнете Open Hardware Manager и програмирајте го FPGA преку GUI.
  • Сега можете да продолжите да читате и пишувате регистри со користење на скриптата demo/arty_s7_50/uart_regs.py како што е опишано во делот uart_regs.py.

Имплементација

  • Нема конкретни барања за имплементација.

Ограничувања

  • Не се потребни конкретни временски ограничувања за овој дизајн бидејќи интерфејсот UART е бавен и се третира како асинхрон интерфејс.
  • Влезот uart_rx во модулот uart_regs е синхронизиран во модулот uart_rx. Така, не треба да се синхронизира во модулот од највисоко ниво.

Познати прашања

  • Можеби ќе треба да го ресетирате модулот пред да може да се користи, во зависност од тоа дали вашата FPGA архитектура поддржува стандардни вредности на регистарот.

Повеќе информации

Најчесто поставувани прашања

П: Која е целта на генераторот на тест интерфејс UART?

О: Генераторот на тест интерфејс UART овозможува создавање прилагодени интерфејси за интеракција со вредностите на регистарот FPGA користејќи UART комуникација.

П: Како да го инсталирам пакетот Pyserial?

О: Можете да инсталирате Pyserial преку Pip користејќи ја командата: pip install pyserial

Документи / ресурси

Генератор на тест интерфејс VHDLwiz UART [pdf] Упатство за користење
Тест генератор на интерфејс UART, генератор на тест интерфејс, генератор на интерфејс, генератор

Референци

Оставете коментар

Вашата адреса за е-пошта нема да биде објавена. Задолжителните полиња се означени *