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 – Команда от хоста к ПЛИС для инициирования последовательности записи для отправки всех регистров обратно через UART
  • Имя: НАЧАТЬ_ПИСАТЬ, Ценить: 0x0B – обозначает начало последовательности записи в любом направлении.
  • Имя: КОНЕЦ_ЗАПИСЬ, Ценить: 0x0C – обозначает конец последовательности записи в любом направлении.
  • Имя: ПОБЕГ, Ценить: 0x0D – Экранирующий символ, используемый для экранирования управляющих слов.

Инструкции по применению продукта

Запуск скриптов

Для использования продукта убедитесь, что у вас установлен Python 3 и пакет Pyserial. Запустите скрипты через интерпретатор Python 3.

Создание пользовательских интерфейсов

Используйте скрипт gen_uart_regs.py для генерации пользовательских интерфейсов для чтения и записи значений регистров FPGA. Вы можете указать состав входных и выходных регистров и типы при генерации выходных данных files.

Взаимодействие с регистрами

Вы можете считывать или записывать в любое количество регистров в вашем проекте FPGA, используя сгенерированный модуль VHDL и скрипт Python. Доступные регистры могут иметь такие типы, как std_logic, std_logic_vector, со знаком или без знака.

Лицензия

  • Лицензия MIT охватывает требования авторских прав и условия использования исходного кода. Обратитесь к файлу LICENSE.txt. file в почтовом индексе 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 Исправить угловой случай при получении неправильно сформированного слова с escape-символом в качестве последнего байта. Следующее слово также терялось, поскольку мы не очищали recv_data_prev_is_escape при возврате в IDLE.

Скрипт gen_uart_regs.py теперь допускает только уникальные имена регистров.

Описание

  • В этом документе описываются следующие files и папки:
  • gen_uart_regs.py
  • сгенерировано/uart_regs.vhd
  • сгенерировано/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 fileВ этом проекте вы можете создавать собственные интерфейсы для чтения и записи значений регистров FPGA различных типов и ширины с использованием UART.
  • Вы можете использовать сгенерированный модуль VHDL и сценарий Python для чтения или записи в любое количество регистров вашего проекта. Регистры, доступные через UART, могут иметь типы std_logic, std_logic_vector, знаковые и беззнаковые.
  • Вы можете определить точный состав и типы входных и выходных регистров при генерации выходных данных. files с помощью скрипта gen_uart_regs.py.
  • Скрипты Python были созданы частично с помощью инструмента искусственного интеллекта ChatGPT, а код VHDL — вручную.

Требования

  • Сценарии в этом проекте необходимо запускать через интерпретатор Python 3 и установить пакет Pyserial.
  • Вы можете установить pyserial через Pip, используя эту команду: pip install pyserial

Протокол

  • VHDL files и скрипт Python используют протокол кадрирования данных с четырьмя элементами управления
Имя Ценить Комментарий
READ_REQ 0x0A Команда от хоста к ПЛИС для инициирования записи

последовательность отправки всех регистров обратно через UART

START_WRITE 0x0B Отмечает начало последовательности записи в любом

направление

END_WRITE 0x0C Отмечает конец последовательности записи в любом направлении.
ПОБЕГ 0x0D Escape-символ, используемый для экранирования любого управляющего слова, включая сам символ 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-Тест-Интерфейс-Генератор-РИС-1
  • Чтобы создать собственный интерфейс, вы должны запустить сценарий с каждым из желаемых регистров, управляемых UART, указанными в качестве аргументов. Доступные типы: std_logic, std_logic_vector, беззнаковый и подписанный.
  • Режим (направление) по умолчанию включен, а тип по умолчанию — std_logic_vector, если длина регистра не равна: 1. Тогда по умолчанию будет использоваться std_logic.
  • Таким образом, если вы хотите создать входной сигнал std_logic, вы можете использовать любой из этих аргументов:
  • my_sl=1
  • my_sl=1:в
  • my_sl=1:in:std_logic
  • Все вышеперечисленные варианты приведут к тому, что скрипт сгенерирует этот сигнал, доступный через UART:VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-2
  • Запустим скрипт с аргументами для генерации интерфейса с несколькими регистрами разного направления, длины и типа.VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-3

Сгенерировано files

  • Успешный запуск сценария gen_uart_regs.py создаст выходную папку с именем, созданным с помощью трех fileперечислены ниже. Если они уже существуют, они будут перезаписаны.
  • сгенерировано/uart_regs.vhd
  • сгенерировано/uart_regs.py
  • сгенерировано/instantiation_template.vho
  • uart_regs.vhd
  • Это пользовательский интерфейсный модуль, созданный сценарием. Вам необходимо создать его экземпляр в своем проекте, где он сможет получить доступ к регистрам, которыми вы хотите управлять, с помощью UART.
  • Все, что находится выше раздела «– Доступные регистры UART», будет идентично для каждого модуля uart_regs, а состав сигналов портов ниже этой строки зависит от аргументов, переданных скрипту-генератору.
  • В листинге ниже показан объект для модуля uart_regs, полученный в результате команды генерации exampфайл, показанный в разделе gen_uart_regs.pyVHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-4
  • Вам не нужно синхронизировать сигнал uart_rx, поскольку это обрабатывается в файле uart_rx. модуль.
  • Когда модуль получает запрос на чтение, он фиксирует значения всех входных и выходных сигналов в пределах текущего тактового цикла. Мгновенный снимок затем отправляется на хост через UART.
  • Когда происходит запись, все выходные регистры обновляются новыми значениями в течение одного и того же такта. Невозможно изменить значения выходного сигнала по отдельности.
  • Однако сценарий uart_regs.py позволяет пользователю обновлять только выбранные выходные данные, сначала считывая текущие значения всех регистров. Затем он записывает обратно все значения, включая обновленные.
  • uart_regs.py
  • Сгенерированный файл /uart_regs.py file генерируется вместе с модулем VHDL uart_regs и содержит информацию о пользовательском регистре в заголовке файла. file. С помощью этого сценария вы можете легко читать или записывать в свои пользовательские регистры.

Меню помощи

  • Введите python uart_regs.py -h, чтобы распечатать меню справки:VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-5

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

  • Скрипт имеет опции для установки порта UART с помощью переключателя -c. Это работает в Windows и Linux. Установите его на один из доступных портов, перечисленных в меню справки. Чтобы установить порт по умолчанию, вы также можете отредактировать переменную UART_PORT в скрипте uart_regs.py.

Листинговые регистры

  • Информация о сопоставлении регистров помещается в заголовок скрипта uart_regs.py скриптом gen_uart_regs.py. Вы можете вывести список доступных регистров с помощью переключателя -l, как показано ниже. Это локальная команда, и она не будет взаимодействовать с целевой FPGAVHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-6

Запись в регистры

  • Вы можете производить запись в любой из регистров режима вывода, используя ключ -w. Укажите имя регистра, за которым следует знак «=», а также значение, заданное в двоичном, шестнадцатеричном или десятичном формате, как показано ниже.VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-7
  • Обратите внимание, что реализация VHDL требует, чтобы скрипт одновременно записывал все выходные регистры. Поэтому, если вы не укажете полный набор выходных регистров, скрипт сначала выполнит чтение из целевой FPGA, а затем использует эти значения для отсутствующих. Результатом будет то, что изменятся только указанные регистры
  • Когда вы выполняете запись, все указанные регистры будут изменяться в течение одного и того же такта, а не сразу после их получения через UART.

Чтение регистров

  • Используйте ключ -r для чтения всех значений регистров, как показано ниже. Значения, отмеченные желтым, — это те, которые мы изменили в предыдущем примере записи.ampleVHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-8
  • При каждом чтении отображается мгновенный снимок всех входных и выходных регистров. Они все сampпривело в течение того же тактового цикла

Отладка

Используйте ключ -d с любым другим ключом, если вам нужно отладить протокол связи. Затем скрипт распечатает все отправленные и полученные байты и tag их, если они являются управляющими символами, как показано ниже.VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-9

Использование интерфейса в других скриптах Python

  • Скрипт uart_regs.py содержит класс UartRegs, который можно легко использовать в качестве интерфейса связи в других пользовательских скриптах Python. Просто импортируйте класс, создайте его объект и начните использовать методы, как показано ниже.VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-10
  • Обратитесь к строкам документации в коде Python для получения информации о методах, описаниях и типах возвращаемых значений.

экземпляр_template.vho

  • Для вашего удобства шаблон создания экземпляра создается вместе с модулем uart_regs. Чтобы сэкономить время на кодирование, вы можете скопировать экземпляр модуля и объявления сигналов в свой проект.VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-11VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-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Он создан специально для этих проектов.

Решетка

  • Папка 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 и нажмите «ОК».VHDLwhiz-UART-Тест-Интерфейс-Генератор-РИС-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, расположенной в нижней части графического интерфейса. Введите эту команду, чтобы войти в папку демонстрационного проекта:
  • компакт-диск /demo/arty_a7_35/vivado_proj/
  • Выполните Tcl-скрипт create_vivado_proj.tcl для регенерации проекта Vivado:
  • источник ./create_vivado_proj.tcl
  • Нажмите «Создать битовый поток» на боковой панели, чтобы выполнить все этапы реализации и сгенерировать битовый поток программирования. file.
  • Наконец, нажмите «Открыть диспетчер оборудования» и запрограммируйте 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 и перейдите к извлеченному files с помощью консоли Tcl, расположенной в нижней части графического интерфейса. Введите эту команду, чтобы войти в папку демонстрационного проекта:
  • компакт-диск /demo/arty_s7_50/vivado_proj/
  • Выполните Tcl-скрипт create_vivado_proj.tcl для регенерации проекта Vivado:
  • источник ./create_vivado_proj.tcl
  • Нажмите «Создать битовый поток» на боковой панели, чтобы выполнить все этапы реализации и сгенерировать битовый поток программирования. file.
  • Наконец, нажмите «Открыть диспетчер оборудования» и запрограммируйте FPGA через графический интерфейс.
  • Теперь вы можете приступить к чтению и записи регистров, используя скрипт demo/arty_s7_50/uart_regs.py, как описано в разделе uart_regs.py.

Выполнение

  • Особых требований к реализации нет.

Ограничения

  • Для этой конструкции не требуется никаких особых ограничений по времени, поскольку интерфейс UART медленный и рассматривается как асинхронный интерфейс.
  • Входные данные uart_rx в модуль uart_regs синхронизируются внутри модуля uart_rx. Таким образом, его не нужно синхронизировать в модуле верхнего уровня.

Известные проблемы

  • Возможно, вам придется перезагрузить модуль, прежде чем его можно будет использовать, в зависимости от того, поддерживает ли ваша архитектура FPGA значения регистров по умолчанию.

Дополнительная информация

Часто задаваемые вопросы

В: Каково назначение генератора тестового интерфейса UART?

A: Генератор тестового интерфейса UART позволяет создавать пользовательские интерфейсы для взаимодействия со значениями регистров ПЛИС с использованием связи UART.

В: Как установить пакет Pyserial?

A: Вы можете установить Pyserial через Pip, используя команду: pip install pyserial

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

Генератор тестового интерфейса VHDLwhiz UART [pdf] Руководство пользователя
Генератор тестового интерфейса UART, Генератор тестового интерфейса, Генератор интерфейсов, Генератор

Ссылки

Оставьте комментарий

Ваш адрес электронной почты не будет опубликован. Обязательные поля отмечены *