Логотип 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 Виправлена ​​​​помилка відсутнього «власного» посилання під час імпорту як uart_regs.py як модуля Python. Змінено роздруківку з помилкою запису на виняток

уникайте друку на консолі під час роботи як імпортованого модуля.

1.0.2 Виправлено помилку Vivado [Synth 8-248], коли немає регулярних режимів вихідного режиму.
1.0.3 Виправте попередження Vivado Linter: Register has enable enabled by

синхронний скидання

1.0.4 Виправлено кутовий регістр під час отримання неправильного слова з escape-символом як останнім байтом. Наступне слово також буде втрачено, оскільки ми не очистили 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
  • demo/lattice_icestick/
  • demo/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.
  • Ви можете визначити точний склад вхідних і вихідних регістрів і типи під час генерації виводу 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_WRITE 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:in
  • 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 створить вихідну папку під назвою створена з трьома fileперераховані нижче. Якщо вони вже існують, їх буде перезаписано.
  • створений/uart_regs.vhd
  • generated/uart_regs.py
  • створений/instantiation_template.vho
  • uart_regs.vhd
  • Це власний модуль інтерфейсу, згенерований сценарієм. Вам потрібно створити його екземпляр у вашому проекті, де він матиме доступ до регістрів, якими ви хочете керувати за допомогою UART.
  • Усе над розділом «– UART accessible registers» буде ідентичним для кожного модуля 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
  • Created/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, щоб прочитати всі значення регістру, як показано нижче. Значення, позначені жовтим, це ті, які ми змінили під час попереднього записуampleVHDLwhiz-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

  • Вам потрібно включити наступне fileу вашому проекті 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.
  • Щоб виконати процес впровадження, відкрийте demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file у програмному забезпеченні для проектування Lattice iCEcube2.
  • Після завантаження проекту в графічний інтерфейс iCEcube2 натисніть «Інструменти»→ «Виконати все», щоб створити растрове зображення програмування. 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
  • 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. Введіть цю команду, щоб увійти в папку демонстраційного проекту:
  • компакт-диск /demo/arty_a7_35/vivado_proj/
  • Виконайте сценарій create_vivado_proj.tcl Tcl, щоб повторно створити проект Vivado:
  • джерело ./create_vivado_proj.tcl
  • Клацніть «Створити бітовий потік» на бічній панелі, щоб пройти через усі етапи впровадження та створити бітовий потік програмування 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. Введіть цю команду, щоб увійти в папку демонстраційного проекту:
  • компакт-диск /demo/arty_s7_50/vivado_proj/
  • Виконайте сценарій create_vivado_proj.tcl Tcl, щоб повторно створити проект Vivado:
  • джерело ./create_vivado_proj.tcl
  • Клацніть «Створити бітовий потік» на бічній панелі, щоб пройти через усі етапи впровадження та створити бітовий потік програмування 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.

Q: Як мені встановити пакет Pyserial?

A: Ви можете встановити Pyserial через Pip за допомогою команди: pip install pyserial

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

Генератор тестового інтерфейсу VHDLwhiz UART [pdfПосібник користувача
Генератор тестового інтерфейсу UART, генератор тестового інтерфейсу, генератор інтерфейсу, генератор

Список літератури

Залиште коментар

Ваша електронна адреса не буде опублікована. Обов'язкові поля позначені *