Введение
Разработанная система передачи данных на базе ПЛИС, обеспечивающая автономное чтение из встроенной SPI Flash-памяти и передачу через UART, продемонстрировала существенное ускорение относительно архитектуры на базе ЭВМ, особенно на высоких символьных скоростях [1]. Вместе с тем анализ временных характеристик выявил ряд внутренних ограничений текущей реализации, устранение которых способно дополнительно повысить производительность системы. В настоящей статье рассматриваются возможные направления оптимизации интерфейса SPI, проводится их количественная оценка и анализируется ожидаемый эффект при раздельном и совместном применении.
Анализ узкого места текущей реализации
В текущей реализации каждый байт данных передаётся посредством отдельной SPI-транзакции, включающей 32 такта на передачу команды чтения и 24-битного адреса и 8 тактов на приём одного байта по линии MISO. Итоговое число тактов на байт составляет 40, а КПД транзакции — 20 %. При тактовой частоте SPI 25 МГц время одной транзакции составляет 1,60 мкс, из которых 1,28 мкс (80 %) приходится на накладные расходы передачи команды и адреса. Время передачи одного байта по UART при этом существенно превышает время SPI-транзакции: при 921600 Бод длительность UART-кадра составляет 10,85 мкс — в 6,8 раза больше длительности SPI-транзакции. Таким образом, узким местом системы на всём исследованном диапазоне символьных скоростей является интерфейс UART, а не SPI, однако накладные расходы SPI-транзакции суммируются с временем UART-передачи, что и обуславливает наблюдаемое превышение теоретического минимума на 14,7 % при 921600 Бод.
Конвейеризация операций чтения и передачи
Наиболее перспективным направлением оптимизации является конвейеризация (pipeline) операций чтения из Flash-памяти и передачи по UART. В текущей реализации данные операции выполняются строго последовательно, поэтому 32 такта передачи команды и адреса добавляются к суммарному времени как накладные расходы для каждого байта. При конвейерной организации передача команды и адреса байта N+1 может выполняться параллельно с UART-передачей байта N; неустранимой остаётся только задержка приёма 8 бит данных по линии MISO (0,32 мкс при 25 МГц). Время обработки одного байта при этом определяется выражением t = max(t_UART, t_data), где t_UART — длительность передачи байта по UART, а t_data — время приёма данных по SPI. Максимальный выигрыш достигается при 921600 Бод и составляет 14,7 % (сокращение времени передачи 100 МБ с 1305 до 1138 с). Реализация требует введения однобайтового буфера и разделения конечного автомата на два параллельных пути управления SPI и UART.
Режим Quad-SPI
Используемая Flash-память S25FL128 поддерживает режим Quad-SPI, в котором данные передаются одновременно по четырём линиям шины (команда Fast Read Quad I/O, код EBh). Суммарное число тактов на транзакцию сокращается с 40 до 20, а время приёма данных при 25 МГц уменьшается с 0,32 до 0,08 мкс. Поскольку на исследованном диапазоне скоростей узким местом остаётся UART, изолированное применение Quad-SPI не даёт выигрыша по суммарному времени передачи — эффект проявляется только в сочетании с конвейеризацией или пакетным чтением. Необходимые линии QSPI_DQ [3:0] уже разведены на используемой плате, что позволяет реализовать данное улучшение без аппаратных изменений.
Повышение тактовой частоты SPI и пакетное чтение
Микросхема S25FL128 поддерживает частоту до 133 МГц в режиме Fast Read, тогда как в текущей реализации используется 25 МГц. Повышение частоты SPI пропорционально ускоряет SPI-операции, однако даёт ощутимый результат только при пакетном режиме чтения, где SPI-компонента вносит заметный вклад в суммарное время. Наиболее радикальным улучшением является переход от побайтного чтения к пакетному: при удержании сигнала Chip Select на низком уровне на протяжении всей транзакции Flash-память автоматически инкрементирует адрес и выдаёт последовательные байты данных. КПД транзакции при размере пакета 256 байт (размер страницы Flash) возрастает до 98,5 % против 20 % в текущей реализации, а время приёма 256 байт сокращается с 409,6 до 83,2 мкс — ускорение чтения из Flash в 4,92 раза. Реализация требует буфера FIFO объёмом 256 байт, для которого достаточно одного блока BRAM18E1 (менее 0,4 % ресурсов BRAM кристалла XC7A100T).
Количественная оценка эффекта
Результаты прогнозируемого времени передачи 100 МБ данных при применении рассмотренных оптимизаций для двух наиболее показательных скоростей приведены в таблице 1.
Таблица 1
Прогнозируемый эффект оптимизаций
|
Скорость, Бод |
Факт, с |
Pipeline, с |
Pipeline+Quad+50МГц+Batch, с |
Ускорение, × |
|
460 800 |
2,391 |
2,276 |
2,276 |
1,05 |
|
921 600 |
1,305 |
1,138 |
1,138 |
1,15 |
На скоростях до 460800 Бод узким местом системы остаётся UART, поэтому рассматриваемые оптимизации SPI-части приводят результат к единому теоретическому пределу и не дают дополнительного выигрыша. На скоростях 460800–921600 Бод конвейерная организация обеспечивает выигрыш 5,1–14,7 %, а Quad-SPI и повышение частоты становятся значимыми при дальнейшем росте символьной скорости за пределами исследованного диапазона.
Заключение
Проведённый анализ показал, что узким местом разработанной системы на исследованном диапазоне скоростей является интерфейс UART, а не SPI. Наиболее эффективным направлением оптимизации в текущих условиях является конвейеризация операций чтения и передачи, обеспечивающая выигрыш до 14,7 % при минимальных аппаратных изменениях. Режим Quad-SPI, повышение тактовой частоты и пакетное чтение с буфером представляют собой резерв производительности, актуальный при дальнейшем увеличении символьной скорости передачи данных сверх 921600 Бод. Совместное применение всех рассмотренных направлений позволяет приблизить фактическое время передачи к теоретическому пределу интерфейса UART и обеспечивает масштабируемость системы.
Литература:
- Харрис Д. М., Харрис С. Л. Цифровая схемотехника и архитектура компьютера / пер. с англ. — М.: ДМК Пресс, 2013. — 1664 с.
- Chu P. P. FPGA Prototyping by SystemVerilog Examples: Xilinx MicroBlaze MCS SoC Edition. — Hoboken: John Wiley & Sons, 2018. — 704 p.
- S25FL128P 128-Mbit 3.0 V Flash Memory Datasheet [Электронный ресурс]. — Infineon Technologies. — URL: https://www.infineon.com/assets/row/public/documents/non-assigned/49/infineon-s25fl128p-128-mbit-3.0-v-flash-memory-datasheet-en.pdf (дата обращения: 05.05.2026).
- Vivado Design Suite User Guide: Programming and Debugging [Электронный ресурс]. — AMD Xilinx. — URL: https://docs.amd.com (дата обращения: 06.04.2026).

