Выпуск #9/2018
Мадумаров Талгат Асхатович, Стефанцов Алексей Вячеславович
Проблемы внедрения SystemC в качестве каркаса для виртуального прототипирования бортовой аппаратуры и стендов для разработки БПО
Проблемы внедрения SystemC в качестве каркаса для виртуального прототипирования бортовой аппаратуры и стендов для разработки БПО
Просмотры: 1643
Рассмотрены технические проблемы внедрения виртуального прототипирования на SystemC в существующий маршрут разработки встраиваемых систем. Особое внимание уделено проблемам, связанным с управлением симулятором SystemC извне и оптимизацией производительности виртуального прототипа.
УДК 004.414.2
DOI: 10.22184/1993-8578.2018.82.184.189
УДК 004.414.2
DOI: 10.22184/1993-8578.2018.82.184.189
Теги: c/c++ embedded systems esl-modelling esl-проектирование systemc virtual prototyping виртуальное прототипирование встраиваемые системы
При проектировании встраиваемых систем часто возникает необходимость в модели системы высокого уровня, на которой была бы возможной отладка бортового программного обеспечения. Такая модель часто называется виртуальным прототипом (virtual prototype) или виртуальным прототипом системного уровня (system-level virtual prototype) [1] и должна обладать следующими свойствами:
достаточной функциональностью и точностью, для того чтобы позволять выполнять на ней немодифицированное ПО, включая драйверы, операционные системы и приложения;
достаточным быстродействием для комфортной отладки и тестирования этого ПО;
необходимым отладочным функционалом для работы совместно с отладчиком.
Изначально в НИИ «Субмикрон» виртуальное прототипирование аппаратуры велось без использования сторонних каркасов. В качестве виртуального прототипа использовалась модель уровня такта шины, написанная на чистом C. С помощью имеющихся моделей успешно решались задачи отладки и тестирования бортового ПО, включая специальное программное обеспечение (СПО) и тестовое программное обеспечение (ТПО).
При выборе каркаса для ускорения разработки виртуальных прототипов было принято решение использовать в этом качестве библиотеку SystemC [2], обладающую рядом достоинств:
богатый функционал библиотеки, поддерживающий глобальный отсчет времени, событийно-ориентированное моделирование с возможностью моделирования одновременных событий, раздельное моделирование отдельных блоков и интерфейсов взаимодействия между ними;
SystemC является промышленным стандартом, поддерживаемым целым рядом САПР, среди которых Mentor Graphics, Cadence и другие;
SystemC является библиотекой для языка C++, что позволяет использовать богатый синтаксис этого языка программирования, различные библиотеки, а также имеющиеся наработки и модели;
в библиотеке SystemC имеется синтезируемое подмножество [3], которое делает возможным синтез аппаратуры из RTL-моделей, описанных при помощи этой библиотеки;
SystemC поддерживает моделирование аппаратуры на различных уровнях абстракции, от чисто функционального уровня до синтезируемых моделей RTL-уровня, причем поддерживает одновременную симуляцию моделей разного уровня на одном движке.
В настоящий момент библиотека SystemC является очень популярным средством для разработки моделей встраиваемых систем на различных уровнях абстракции в целом, в частности для виртуального прототипирования.
При внедрении SystemC в уже имеющийся конвейер виртуального прототипирования возник ряд проблем, решение которых и представлено в докладе.
Первой проблемой является внедрение виртуального прототипа в имеющийся процесс разработки ТПО. Дело в том, что ТПО состоит из программы, загруженной в тестируемую машину, и сценария отладчика, который занимается генерацией тестовых данных, передачей этих данных тестируемой машине при помощи аппаратуры стенда, а также анализом полученных результатов. В связи с этим возникает необходимость моделирования взаимодействия аппаратуры со стендом, причем управляемое из сценария отладчика. Это делает невозможным использование методики тестирования, описанной в литературе, рекомендованной разработчиком SystemC [4], при которой и генерация тестовых данных, и верификация результатов управляются средствами SystemC. Конечно, такой подход дает высокую точность симуляции, но, с другой стороны, поскольку виртуальный прототип стенда во время отладки ТПО должен вести себя так же, как и аппаратура, то и выдавать тестовые данные он должен не в один и тот же момент, а с некоторым допуском. Проблема синхронизации виртуального прототипа с потоком, выдающим внешние данные, была решена при помощи введения в основной конечный автомат симуляции SystemC нового состояния, во время которого симуляция приостанавливается и появляется «окно» для получения специальным интерфейсом указателя на новые данные и нотификацию события модели блока приема этих данных о том, что данные были переданы. Такой подход обладает рядом достоинств: он универсален, подходит для любого уровня моделирования и не нарушает спецификации SystemC. С другой стороны, он не гарантирует абсолютной точности синхронизации сам по себе и, для того чтобы использовать его там, где необходима по крайней мере ограниченная сверху ошибка синхронизации, данный подход неприменим без соответствующих изменений.
Вторая проблема заключается в том, что SystemC не поддерживает многопоточность внутри симуляции, что негативно сказывается на производительности симуляции, особенно для таких высокоуровневых моделей, как виртуальный прототип, где подчас синхронизация между модулями происходит довольно редко. Например, процессоры семейства Multicore [5] обладают дополнительным ядром DSP, синхронизация с которым происходит довольно редко. Однако, если вынести моделирование всех вычислительных процессов всех DSP-ядер виртуального прототипа многопроцессорной ВМ в отдельные потоки, то можно получить некоторый прирост производительности. Для этого в симуляцию был введен параметр точности: через какое количество тактов DSP-сопроцессора ему необходимо синхронизироваться с движком симуляции всей системы. Подбирая эмпирическим путем этот коэффициент для каждой задачи, можно добиться существенного ускорения симуляции.
Данные моменты собраны вместе, поскольку они на самом деле обращаются с двух разных сторон к одной проблеме. С одной стороны, вычислительные машины наращивают производительность за счет увеличения числа ядер на борту, с другой — библиотека SystemC не позволяет разработчику без модернизации производить симуляцию параллельно, максимально используя вычислительные мощности компьютера. С учетом растущей сложности встраиваемых систем не за горами такой момент, когда быстродействия стандартного ядра SystemC не будет хватать для разработки виртуальных прототипов таких сложных систем, как встраиваемые системы космического назначения. Поэтому если не сама библиотека, то по крайней мере подход к ее использованию должен быть модернизирован с учетом тех вызовов, которые бросит разработчикам завтрашний день.
ЛИТЕРАТУРА
1. Bailey B., Martin G. ESL Models and Their Application: Electronic System Level Design and Verification in Practice. Springer Science & Business Media, 2009. 446 p.
2. IEEE Standard System C Language Reference Manual.
3. SystemC Synthesizable Subset Version 1.4.7 [Electronic resource] // http://www.accellera.org. 2016. URL:http://www.accellera.org/images/downloads/standards/systemc/SystemC_Synthesis_Subset_1_4_7-Apache.pdf.
4. Grötker T. et al. System Design with SystemC™. Springer Science & Business Media, 2007. 219 p.
5. http://multicore.ru.
достаточной функциональностью и точностью, для того чтобы позволять выполнять на ней немодифицированное ПО, включая драйверы, операционные системы и приложения;
достаточным быстродействием для комфортной отладки и тестирования этого ПО;
необходимым отладочным функционалом для работы совместно с отладчиком.
Изначально в НИИ «Субмикрон» виртуальное прототипирование аппаратуры велось без использования сторонних каркасов. В качестве виртуального прототипа использовалась модель уровня такта шины, написанная на чистом C. С помощью имеющихся моделей успешно решались задачи отладки и тестирования бортового ПО, включая специальное программное обеспечение (СПО) и тестовое программное обеспечение (ТПО).
При выборе каркаса для ускорения разработки виртуальных прототипов было принято решение использовать в этом качестве библиотеку SystemC [2], обладающую рядом достоинств:
богатый функционал библиотеки, поддерживающий глобальный отсчет времени, событийно-ориентированное моделирование с возможностью моделирования одновременных событий, раздельное моделирование отдельных блоков и интерфейсов взаимодействия между ними;
SystemC является промышленным стандартом, поддерживаемым целым рядом САПР, среди которых Mentor Graphics, Cadence и другие;
SystemC является библиотекой для языка C++, что позволяет использовать богатый синтаксис этого языка программирования, различные библиотеки, а также имеющиеся наработки и модели;
в библиотеке SystemC имеется синтезируемое подмножество [3], которое делает возможным синтез аппаратуры из RTL-моделей, описанных при помощи этой библиотеки;
SystemC поддерживает моделирование аппаратуры на различных уровнях абстракции, от чисто функционального уровня до синтезируемых моделей RTL-уровня, причем поддерживает одновременную симуляцию моделей разного уровня на одном движке.
В настоящий момент библиотека SystemC является очень популярным средством для разработки моделей встраиваемых систем на различных уровнях абстракции в целом, в частности для виртуального прототипирования.
При внедрении SystemC в уже имеющийся конвейер виртуального прототипирования возник ряд проблем, решение которых и представлено в докладе.
Первой проблемой является внедрение виртуального прототипа в имеющийся процесс разработки ТПО. Дело в том, что ТПО состоит из программы, загруженной в тестируемую машину, и сценария отладчика, который занимается генерацией тестовых данных, передачей этих данных тестируемой машине при помощи аппаратуры стенда, а также анализом полученных результатов. В связи с этим возникает необходимость моделирования взаимодействия аппаратуры со стендом, причем управляемое из сценария отладчика. Это делает невозможным использование методики тестирования, описанной в литературе, рекомендованной разработчиком SystemC [4], при которой и генерация тестовых данных, и верификация результатов управляются средствами SystemC. Конечно, такой подход дает высокую точность симуляции, но, с другой стороны, поскольку виртуальный прототип стенда во время отладки ТПО должен вести себя так же, как и аппаратура, то и выдавать тестовые данные он должен не в один и тот же момент, а с некоторым допуском. Проблема синхронизации виртуального прототипа с потоком, выдающим внешние данные, была решена при помощи введения в основной конечный автомат симуляции SystemC нового состояния, во время которого симуляция приостанавливается и появляется «окно» для получения специальным интерфейсом указателя на новые данные и нотификацию события модели блока приема этих данных о том, что данные были переданы. Такой подход обладает рядом достоинств: он универсален, подходит для любого уровня моделирования и не нарушает спецификации SystemC. С другой стороны, он не гарантирует абсолютной точности синхронизации сам по себе и, для того чтобы использовать его там, где необходима по крайней мере ограниченная сверху ошибка синхронизации, данный подход неприменим без соответствующих изменений.
Вторая проблема заключается в том, что SystemC не поддерживает многопоточность внутри симуляции, что негативно сказывается на производительности симуляции, особенно для таких высокоуровневых моделей, как виртуальный прототип, где подчас синхронизация между модулями происходит довольно редко. Например, процессоры семейства Multicore [5] обладают дополнительным ядром DSP, синхронизация с которым происходит довольно редко. Однако, если вынести моделирование всех вычислительных процессов всех DSP-ядер виртуального прототипа многопроцессорной ВМ в отдельные потоки, то можно получить некоторый прирост производительности. Для этого в симуляцию был введен параметр точности: через какое количество тактов DSP-сопроцессора ему необходимо синхронизироваться с движком симуляции всей системы. Подбирая эмпирическим путем этот коэффициент для каждой задачи, можно добиться существенного ускорения симуляции.
Данные моменты собраны вместе, поскольку они на самом деле обращаются с двух разных сторон к одной проблеме. С одной стороны, вычислительные машины наращивают производительность за счет увеличения числа ядер на борту, с другой — библиотека SystemC не позволяет разработчику без модернизации производить симуляцию параллельно, максимально используя вычислительные мощности компьютера. С учетом растущей сложности встраиваемых систем не за горами такой момент, когда быстродействия стандартного ядра SystemC не будет хватать для разработки виртуальных прототипов таких сложных систем, как встраиваемые системы космического назначения. Поэтому если не сама библиотека, то по крайней мере подход к ее использованию должен быть модернизирован с учетом тех вызовов, которые бросит разработчикам завтрашний день.
ЛИТЕРАТУРА
1. Bailey B., Martin G. ESL Models and Their Application: Electronic System Level Design and Verification in Practice. Springer Science & Business Media, 2009. 446 p.
2. IEEE Standard System C Language Reference Manual.
3. SystemC Synthesizable Subset Version 1.4.7 [Electronic resource] // http://www.accellera.org. 2016. URL:http://www.accellera.org/images/downloads/standards/systemc/SystemC_Synthesis_Subset_1_4_7-Apache.pdf.
4. Grötker T. et al. System Design with SystemC™. Springer Science & Business Media, 2007. 219 p.
5. http://multicore.ru.
Отзывы читателей