Автоматизация генерации C-тестов для комплексной верификации SoC
Проекты SoC становятся всё сложнее, но многие системные наборы тестов всё ещё состоят из тысяч строк рукописного C-кода — устаревший подход, противоречащий принципу автоматизации. В частности, C-тесты, исполняемые на встроенных процессорах для валидации всего чипа до тап-аута, остаются в основном ручными.
Почему автоматизация критична
Автоматизация создания тестов повышает продуктивность на всех этапах разработки SoC. Методы constrained-random в UVM-тестбенчах генерируют сценарийно-специфичные случайные векторы, улучшая покрытие на уровне блоков. Однако дизайн остаётся «чёрным ящиком»: стимулы, проверки и код покрытия пишутся отдельно — громоздкий и ошибочный процесс для крупных блоков.
Расширение этих методов на системный уровень сложно: нужно интегрировать процессорный тест-код с I/O-транзакциями, обычно на эмуляторах или прототипах. Полная верификация SoC требует задействования самих процессоров, но UVM и другие constrained-random техники обычно опускают процессорный код. На практике UVM применяется к SoC путём замены процессоров на виртуальный I/O, оставляя подсистему без процессора под тестом.
Признавая недостатки constrained-random тестбенчей, инженеры прибегают к ручному написанию C-тестов, запускаемых на процессорах в симуляции и эмуляции. Но эти платформы не поддерживают полноценную ОС: тесты выполняются в bare-metal режиме, усложняя композицию. Координированное многоядерное, многонитевое выполнение редко, поэтому критические поведения — конкурентность и когерентность — проверяются слабо.
Автоматическая генерация C-тестов
Автоматизированная генерация C-тестов освобождает инженерное время и расширяет покрытие. Сгенерированные кейсы охватывают больше функциональности SoC, выявляя сложные corner-кейсы. Многонитевые, многоядерные тесты проходят все параллельные пути, валидируют конкурентность, стресс-тестируют когерентность памяти и синхронизируются с I/O-транзакциями. Результат: системное функциональное покрытие регулярно превышает 90%, далеко опережая традиционные подходы.
Инструмент генерации — Test Suite Synthesis — используёт понятную графовую модель сценария, инкапсулирующую задуманное поведение дизайна. Инженеры могут описывать модели на нативном C++ с использованием стандарта Accellera Portable Stimulus или визуально, отражая обычные диаграммы потока данных, рисуемые на доске при обсуждении дизайна.
Каждая модель включает стимулы, проверки, метрики покрытия и отладочные данные, давая генератору всё необходимое для производства качественных самопроверяемых C-тестов, задействующих все аспекты дизайна. Иерархические модульные модели позволяют переиспользовать блоковые тесты в полных SoC-моделях и делиться ими между командами и проектами. Инструмент синтеза декомпозирует единую модель намерений в конкурентные тесты, охватывающие нити и I/O-порты, с жёсткой синхронизацией.
Преимущества синтеза наборов тестов
Ключевое преимущество — возможность задавать цели покрытия на уровне модели намерений. После спецификации намерения инструмент анализирует её, оценивая число необходимых тест-кейсов и ожидаемое функциональное покрытие.
В типичном SoC генерируются тысячи тестов. Ограничивая намерение, инженеры могут нацелиться на конкретные цели покрытия и сконцентрировать инструмент на критических областях. Это устраняет утомительный итеративный цикл: настройка тестов → прогон верификации → оценка покрытия → перенастройка.
Кейс-стади на крупном SoC ведущего semiconductor-вендора показала 80% сокращение времени композиции тестов по сравнению с рукописными. Автоматизация дала более строгие кейсы, подняв покрытие с 84% до 97%. Модели оказались переносимыми между средами.
Одна модель намерений может производить тест-кейсы для виртуальных платформ, RTL-симуляции, эмуляции, FPGA-прототипов или даже готового чипа при пост-силиконной валидации.
Отладка остаётся основным пожирателем времени на уровне SoC. Когда тест находит дефект, инженерам нужно проследить сбой до исходного теста и базовой сценарийной модели. Коррелируя каждый тест-кейс с его графовым представлением, модульные самодостаточные тесты обеспечивают быструю изоляцию и анализ багов.
Сценарии применения
Синтезированные тест-кейсы могут драйвить реалистичные use-case сценарии. Рассмотрим SoC цифровой камеры на рисунке 1.
Блоковые компоненты SoC включают два процессора, периферию и память. Упрощённый граф под блок-диаграммой показывает высокоуровневые пути верификации. Один сценарий (верхний путь): чтение JPEG с SD-карты, маршрутизация к фото-процессору через область памяти, трансформация изображения для дисплея, загрузка во второй блок памяти, отправка в дисплей-контроллер. Каждый высокоуровневый блок иерархичен, содержащий множество действий и решений.
Инструмент синтеза планирует рандомизированные тесты соответственно. В простейшей форме тесты выполняются последовательно в одной нити. Истинная сила проявляется при интерливинге приложений по множественным нитям и процессорам, запуская столько конкурентных экземпляров, сколько позволяет дизайн, и аллоцируя память в сложных паттернах. Альтернативное представление на рисунке показывает тесты, распределённые по трём нитям с использованием разнообразных областей памяти.
Хотя иллюстрация высокоуровневая, инструмент фактически разворачивает иерархический граф в тысячи действий и связей, включая рандомизированные решения, проходящие через солвер. По мере обхода графа AI-планировщики анализируют желаемые выходы и уточняют входные тесты для оптимального соответствия. Инструмент также предоставляет OS-подобные сервисы — аллокацию памяти, доступ к адресным картам, обработку прерываний — для поддержки полных тестовых структур, затем рандомизированно планирует тесты, alokируя хранилище и ресурсы.
Заключение
Как constrained-random тестбенчи убрали ручной труд из блочной верификации, так синтезированный тестовый контент для SoC с встроенными процессорами доказал снижение усилий системной верификации. Подход теперь расширяется на блочную верификацию и пост-силиконную валидацию. Автоматизированные C-тесты воплощают принцип «автоматизируй где возможно», давая драматический прирост покрытия и сжатие сроков верификации.
Встроенный
- ST Microelectronics демонстрирует 28 нм FD-SOI MCU с встроенным PCM для powertrain, ADAS и электрификации
- Analog Devices демонстрирует ИИ, промышленные сети и решения питания на Embedded World 2019
- IoT-инновации GIGAIPC на Embedded World 2019
- Cervoz ультра-тонкие M.2 NVMe SSD: высокопроизводительное хранение для промышленных пограничных приложений
- Keysight представляет передовый N5511A Phase Noise Test System для авиакосмической, обороны и 5G дизайна
- ST и YouTransactor запускают PCI‑Secure SoC, питание 50 000+ мобильных платежных терминалов
- UltraSoC Bus Sentinel: real‑time HW IP для защиты транзакций шины SoC
- IBASE CMI300-988: Ультракомпактный Mini-ITX ПК на AMD Ryzen Embedded V1807B
- Axiomtek запускает фанлес eBOX100-51R-FL: Ультракомпактное Intel-powered Edge Computing решение
- Встроенные системы и системная интеграция: современная архитектура и связность