fpgabench
Расширение для лабораторных работ по ПЛИС на плате с кристаллом EP4CE6E22C8:
проверка схемы тестирующими модулями, синтез, чертёж схемы по ГОСТ и загрузка
конфигурации в ПЛИС по последовательному порту. Устанавливать Quartus, Icarus
Verilog или python не требуется: синтез и моделирование выполняет сборочный
сервер, программа загрузки поставляется вместе с расширением.
Начало работы
- Открыть в редакторе каталог проекта. Исходные файлы схемы находятся в
rtl/, тестирующие модули — в tb/.
- Открыть панель fpgabench значком на боковой панели.
- Если в каталоге нет паспорта проекта
fpgabench.toml, нажать «Создать
проект» или взять шаблон на вкладке «Лабораторные». Недостающие файлы
создаются из раздела «Образцы файлов»: верхний модуль, модуль, тест.
- Адрес сборочного сервера курса подставляется сам; другой адрес задаётся в
паспорте проекта (
[board] server) или настройкой fpgabench.buildServer.
Пароль сервера запрашивается при первом обращении и хранится в хранилище
ключей системы. После десяти неверных паролей подряд ввод пароля
блокируется до переустановки расширения.
- Новые версии расширения устанавливаются автоматически со сборочного
сервера: проверка выполняется при запуске редактора и каждые шесть часов,
после установки предлагается перезагрузить окно. Отключается настройкой
fpgabench.autoUpdate.
Этапы
Этапы работы расположены последовательно. Состояние этапа показывает значок:
выполнен, устарел (исходные файлы изменены после выполнения), не выполнен.
Развёрнутым отображается первый невыполненный этап. Результаты показываются
инфографикой — плитками, шкалами и полосами; подробности выводятся во
всплывающих подсказках.
| Этап |
Кнопки |
Результат |
| Тестирование |
выбор теста, «Запустить тест», «Открыть диаграмму» |
число пройденных и непройденных проверок, формулировки непройденных, временная диаграмма |
| Синтез |
«Синтезировать», «RTL» |
занятые ячейки, предельная частота, файл конфигурации в build/; вкладка RTL с графом модулей и 20 худшими путями |
| Функциональная схема |
выбор модуля, «Построить», «Открыть» |
схема выбранного модуля по ГОСТ 2.743-91 в редакторе, выгрузка в SVG и PNG |
| Загрузка в ПЛИС |
выбор порта, «Загрузить в ПЛИС», «Загрузить с ILA», «Монитор», «Загрузчик + схема» |
схема в ПЛИС, поток байтов из порта |
| Запись сигналов (ILA) |
«Запустить», «Открыть диаграмму» |
временная диаграмма сигналов, записанных в ПЛИС по разделу [ila] паспорта |
Тестирующий модуль сообщает результат каждой проверки строкой, начинающейся
со слова PASS или FAIL. Тест считается пройденным, если есть хотя бы одна
строка PASS и нет ни одной FAIL.
Итог этапа, полученный до последнего изменения исходных файлов, помечается как
устаревший. Выполнение этапа можно прервать кнопкой «Остановить».
RTL и задержки
Кнопка «RTL» этапа «Синтез» (команда «fpgabench: RTL и задержки») открывает
вкладку со схемой в том виде, в каком её понял синтез. Вид «Модули» — граф
экземпляров вложенными рамками: у каждого число ячеек и худший проходящий
через него путь, провода между экземплярами подписаны разрядностью; щелчок
раскрывает или сворачивает рамку, двойной щелчок открывает RTL модуля. Вид
«RTL» — ячейки модуля символами: сумматоры, сравнения, мультиплексоры,
регистры с тактовым входом, блоки памяти, подмодули с выводами (двойной
щелчок открывает подмодуль); шина рисуется толще и подписана разрядностью.
Щелчок по элементу подсвечивает все его провода и элементы, с которыми он
соединён; повторный щелчок или щелчок по пустому месту снимает подсветку.
Справа — 20 худших путей по оценке Quartus (модель slow 85C): запас,
задержка и полоса звеньев — ячейки и провода разным цветом, звенья с
наибольшим вкладом выделены. Выбранный путь подсвечивается на обоих видах (щелчок по нему ещё раз
снимает подсветку):
экземпляры с задержкой в каждом, начальный и конечный регистры и все ячейки и
провода между ними. Узлы окрашены по запасу: красный — отрицательный,
оранжевый — меньше десятой доли такта. Данные берутся с сервера по заданию
синтеза и сохраняются в build/rtl.json: повторное открытие работает без
сети. Раскладка графов — ELK (Eclipse Layout Kernel, лицензия EPL-2.0).
Временная диаграмма
Файлы .vcd, .fst и .ghw открываются во встроенной программе просмотра
Surfer. Отдельная программа просмотра не требуется; цвета берутся из темы
редактора и меняются вместе с ней.
При длительном моделировании основную часть файла временной диаграммы
занимает тактовый сигнал: он изменяется каждые полпериода. Поэтому диаграмма
записывается через фильтр. Фильтр находит тактовые сигналы — однобитные
сигналы, изменяющиеся через равные промежутки времени, — и сохраняет от них
признак тактового сигнала, начальное значение и два первых фронта; остальное программа
просмотра восстанавливает сама. Если тактовый сигнал отклонился от периода
(остановлен, изменена частота), с этого момента он записывается полностью.
Изменять тестирующий модуль для этого не требуется.
Нотация lle
Функциональная схема хранится текстом — кодом на элементах библиотеки stde
из ldamle, файлом lle/<модуль>.lle.js на каждый лист. Файлы пишутся сами при
построении чертежа, и лист вентилями строится по ним: правка текста и
сохранение перерисовывают чертёж. Кнопка «Нотация» открывает файл
показанного листа. При изменении Verilog файл переписывается, если его не
правили руками; правленый остаётся, а при расхождении со схемой по Verilog
предлагается «Заменить из Verilog».
Лист строится стандартными элементами. Модуль до 400 вентилей рисуется
вентилями и триггерами; модуль крупнее (ядро, АЛУ, делитель) — элементами из
RTL-представления по ГОСТ 2.743-91: сумматор SM, вычитатель SUB, умножитель
MPL, делитель DIV, компаратор COMP (входы P и Q, выход «=», «<» или «>»),
сдвиг — ALU с меткой направления «←», «→», мультиплексор MUX, дешифратор DC,
регистр RG. Константа на входе рисуется выводом без линии, значение пишется
рядом. В нотации это функции stde: stde.sm(32), stde.comp('<', 32),
stde.rg(32, { reset: 'sync' }). Вид «блоки» (логика модуля одним узлом F)
выключен и включается строкой blocks = true в разделе [schema] паспорта.
Одинаковые элементы подряд пишутся массивом, повторяющиеся по разрядам связи —
циклом, шины собираются сами. Настройки листа (формат, ориентация, крупность,
основная надпись) — строка sheet({...}) в том же файле; прежние записи
[[sheet]] паспорта переезжают туда сами. Наведение на функцию нотации
показывает её описание, на элемент — входы, выходы, откуда и куда идут цепи и
позиционное обозначение на листе.
Команда «fpgabench: чертёж по нотации lle» (и кнопка в заголовке файла
*.lle.js) строит лист по любому такому файлу без сборочного сервера.
Паспорт проекта
Файл fpgabench.toml в корне проекта описывает название, верхний модуль,
каталоги исходных файлов, адрес сервера, способ сборки образа, тесты,
назначение выводов и листы чертежа. Без паспорта расширение в каталоге ничего
не выполняет и не создаёт файлов; паспорт создаётся кнопкой «Создать проект»,
образец с пояснениями к каждому ключу — кнопкой «Паспорт проекта» в разделе
«Образцы файлов».
Настройки редактора fpgabench.* имеют приоритет над паспортом.
Настройки
| Настройка |
Назначение |
fpgabench.buildServer |
адрес сборочного сервера |
fpgabench.autoUpdate |
устанавливать новые версии расширения с сервера автоматически |
fpgabench.port |
последовательный порт платы; пусто — найти переходник автоматически |
fpgabench.top |
верхний модуль; пусто — взять из паспорта, иначе top |
fpgabench.localTool |
только для разработчиков комплекта: собирать собственным инструментом по ssh |
fpgabench.toolHost |
только для разработчиков комплекта: машина для собственного инструмента |
Диагностика ошибок
Команда fpgabench: журнал открывает журнал действий расширения; тот же
журнал записывается в файл build/fpgabench.log проекта. Неверный пароль
сервера удаляется автоматически и запрашивается повторно при следующем
обращении к серверу; сохранённый пароль также можно удалить командой
fpgabench: забыть пароль сборочного сервера.