Генератор тестового интерфейса 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 -h
- Чтобы создать собственный интерфейс, вы должны запустить сценарий с каждым из желаемых регистров, управляемых 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:
- Запустим скрипт с аргументами для генерации интерфейса с несколькими регистрами разного направления, длины и типа.
Сгенерировано 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.py
- Вам не нужно синхронизировать сигнал uart_rx, поскольку это обрабатывается в файле uart_rx. модуль.
- Когда модуль получает запрос на чтение, он фиксирует значения всех входных и выходных сигналов в пределах текущего тактового цикла. Мгновенный снимок затем отправляется на хост через UART.
- Когда происходит запись, все выходные регистры обновляются новыми значениями в течение одного и того же такта. Невозможно изменить значения выходного сигнала по отдельности.
- Однако сценарий uart_regs.py позволяет пользователю обновлять только выбранные выходные данные, сначала считывая текущие значения всех регистров. Затем он записывает обратно все значения, включая обновленные.
- uart_regs.py
- Сгенерированный файл /uart_regs.py file генерируется вместе с модулем VHDL uart_regs и содержит информацию о пользовательском регистре в заголовке файла. 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 для получения информации о методах, описаниях и типах возвращаемых значений.
экземпляр_template.vho
- Для вашего удобства шаблон создания экземпляра создается вместе с модулем uart_regs. Чтобы сэкономить время на кодирование, вы можете скопировать экземпляр модуля и объявления сигналов в свой проект.
Статический 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 и нажмите «ОК».
- После загрузки проекта щелкните три точки в 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 значения регистров по умолчанию.
Дополнительная информация
- Авторские права VHDLwhiz.com
Часто задаваемые вопросы
В: Каково назначение генератора тестового интерфейса UART?
A: Генератор тестового интерфейса UART позволяет создавать пользовательские интерфейсы для взаимодействия со значениями регистров ПЛИС с использованием связи UART.
В: Как установить пакет Pyserial?
A: Вы можете установить Pyserial через Pip, используя команду: pip install pyserial
Документы/Ресурсы
![]() |
Генератор тестового интерфейса VHDLwhiz UART [pdf] Руководство пользователя Генератор тестового интерфейса UART, Генератор тестового интерфейса, Генератор интерфейсов, Генератор |