Генератор тестового інтерфейсу 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 -h
- Щоб створити настроюваний інтерфейс, ви повинні запустити сценарій із кожним із потрібних контрольованих 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:
- Давайте запустимо сценарій з аргументами для створення інтерфейсу з кількома регістрами різних напрямків, довжини та типів
Згенерований 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.py
- Вам не потрібно синхронізувати сигнал 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, щоб надрукувати меню довідки:
Налаштування порту UART
- Сценарій має параметри для встановлення порту UART за допомогою перемикача -c. Це працює в Windows і Linux. Встановіть для нього один із доступних портів, перелічених у меню довідки. Щоб встановити порт за замовчуванням, ви також можете відредагувати змінну UART_PORT у сценарії uart_regs.py.
Реєстри списків
- Інформація про відображення реєстрів розміщується в заголовку сценарію uart_regs.py сценарієм gen_uart_regs.py. Ви можете перерахувати доступні регістри за допомогою перемикача -l, як показано нижче. Це локальна команда, яка не взаємодіятиме з цільовою FPGA
Запис до реєстрів
- Ви можете записувати в будь-який з регістрів вихідного режиму за допомогою перемикача -w. Введіть ім’я реєстру, за яким слід «=», і значення, подане як двійкове, шістнадцяткове або десяткове значення, як показано нижче.
- Зауважте, що реалізація VHDL вимагає, щоб сценарій записував усі вихідні регістри одночасно. Тому, якщо ви не вкажете повний набір вихідних регістрів, сценарій спочатку виконає читання з цільової FPGA, а потім використає ці значення для відсутніх. Результатом буде зміна лише вказаних регістрів
- Коли ви виконуєте запис, усі вказані регістри змінюватимуться протягом того самого тактового циклу, а не відразу після їх отримання через UART.
Регістри читання
- Використовуйте перемикач -r, щоб прочитати всі значення регістру, як показано нижче. Значення, позначені жовтим, це ті, які ми змінили під час попереднього записуample
- Кожне зчитування показує миттєвий знімок усіх вхідних і вихідних регістрів. Усі вони сampведеться протягом того самого тактового циклу
Налагодження
Використовуйте перемикач -d з будь-яким іншим перемикачем, якщо вам потрібно налагодити протокол зв’язку. Потім сценарій роздрукує всі надіслані та отримані байти та tag їх, якщо вони є керуючими символами, як показано нижче.
Використання інтерфейсу в інших сценаріях Python
- Сценарій uart_regs.py містить клас UartRegs, який можна легко використовувати як інтерфейс зв’язку в інших користувацьких сценаріях Python. Просто імпортуйте клас, створіть його об’єкт і почніть використовувати методи, як показано нижче.
- Зверніться до рядків документів у коді Python для методів, описів і типів повернених значень.
instantiation_template.vho
- Шаблон екземпляра створюється разом із модулем uart_regs для вашої зручності. Щоб заощадити час кодування, ви можете скопіювати екземпляр модуля та оголошення сигналів у свій дизайн.
Статичний 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.
- Після завантаження проекту натисніть три крапки в 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 значення регістрів за замовчуванням.
Більше інформації
- Авторське право VHDLwhiz.com
поширені запитання
З: Яка мета генератора тестового інтерфейсу UART?
Відповідь: Генератор тестового інтерфейсу UART дозволяє створювати власні інтерфейси для взаємодії зі значеннями регістра FPGA за допомогою зв’язку UART.
Q: Як мені встановити пакет Pyserial?
A: Ви можете встановити Pyserial через Pip за допомогою команди: pip install pyserial
Документи / Ресурси
![]() |
Генератор тестового інтерфейсу VHDLwhiz UART [pdfПосібник користувача Генератор тестового інтерфейсу UART, генератор тестового інтерфейсу, генератор інтерфейсу, генератор |