Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000429.doc
Скачиваний:
23
Добавлен:
30.04.2022
Размер:
4.02 Mб
Скачать
    1. Краткое описание возможностей SystemC

Для проектирования и верификации SoC на системном уровне требуется язык проектирования и верификации, созданный в расчете на поддержку абстракций проектирования на системном уровне, а также с учетом сложности современных SoC.

• Системы и SoC содержат как аппаратную часть, так и программную, реализуемую на программируемых процессорах. Следовательно, язык проектирования и верификации SoC должен интегрировать модели как аппаратных, так и программных компонентов. Он также должен поддерживать симуляторы систем команд программируемых процессоров, с помощью которых можно выполнять скомпилированный объектный код.

• Системы и SoC построены из проектных элементов и компонентов, которые обрабатываются по разному, в разных «моделях вычислений» — таких как потоки данных (dataflow), конечные автоматы, дискретные события и аналоговая/смешанная область - модели этих компонентов формулируются на основе различных вычислительных предположений. Следовательно, язык проектирования и верификации SoC должен поддерживать интеграцию различных вычислительных моделей.

• SoC схемы можно проектировать «сверху-вниз» или «снизу-вверх»; т.е. начиная либо с моделей высокого уровня, которые далее детализируются, либо с моделей реализации, которые затем абстрагируются для улучшения эффективности выполнения, либо со смешанного набора моделей . Следовательно, язык проектирования и верификации SoC должен позволять совместное существование и взаимодействие моделей на разных уровнях абстракции - функциональном, архитектурном, на уровне транзакций и на уровне сигналов и бит.

• В создании компонентов и моделей SoC могут принимать участие эксперты из различных областей: аппаратной, программной, алгоритмической и системной. Следовательно, язык проектирования и верификации SoC должен основываться на обозначениях, знакомых всем этим специалистам.

• В процессе проектирования SoC должна проводиться ее верификация. Верификация должна проходить на разных уровнях абстракции, от функционального через уровень транзакций до уровня реализации. Тестовые платформы верификации должны быть пригодны для использования на всех этих уровнях, для повышения эффективности и производительности проектирования. Появляются новые методы верификации, которые должны также поддерживаться средой проектирования и верификации. Следовательно, язык проектирования и верификации SoC должен поддерживать специальные верификационные примитивы, быть пригодным к употреблению на всех уровнях и поддерживать повторное использование.

• Проектирование на базе IP-блоков и платформ требует повторного использования компонентов проектирования и верификации. Это наиболее вероятно в том случае, когда модели создаются на широко распространенных и доступных языках и в обозначениях, созданных с учетом повторного использования. Следовательно, язык проектирования и верификации SoC должен быть «спроектирован в расчете на повторное использование».

• Со стороны аппаратной части надо учитывать также этап реализации SoC, а не только этапы моделирования и проектирования. Реализация цифровой аппаратной части происходит преимущественно с помощью RTL синтеза. Следовательно, язык проектирования и верификации SoC должен поддерживать детализацию реализации или синтеза до RTL уровня.

• SoC проекты содержат сложные схемы коммуникаций на чипе. Моделирование коммуникаций на чипе так же важно, как и моделирование функциональности отдельных блоков. Следовательно, язык проектирования и верификации SoC должен поддерживать моделирование коммуникаций на различных уровнях и интеграцию этих моделей в работоспособную модель системы. Почему SystemC является подходящим языком для спецификации, моделирования, проектирования и верификации SoC схем и систем?

Рассмотрим свойства и преимущества этого языка в свете описанных выше требований:

• SystemC основан на C++ и построен на основе расширения библиотек и ядра симуляции, написанном на C++. Следовательно, он способен интегрировать все основанные на C++ модели, включая симуляторы систем команд, программные модели, аппаратные модели и результаты работы средств моделирования на высоком уровне, генерирующих С или C++ код.

• SystemC использует такие примитивы, как каналы, интерфейсы и методы, которые дают большую гибкость в моделировании на основе различных вычислительных методов и обеспечивают возможность совместной работы этих моделей. Были продемонстрированы системные модели, комбинирующие HW дискретных событий, аналоговую часть, потоки данных, программную часть и конечные автоматы - и все на SystemC.

• SystemC поддерживает модели на всех уровнях абстракции и использует, в рамках инициативы OSCI (Open SystemC Initiative), стандартную семантику на уровне транзакций и API, что гарантирует возможность совместной работы моделей.

• Язык SystemC основан на C++, который в свою очередь основан на С. Хотя, возможно, C/C++ и не совсем знаком некоторым специалистам по HW, большинство разработчиков и экспертов в аппаратной области, программной, области алгоритмов и системной области более менее знакомы с C/C++. Редкий выпускник технического вуза сейчас не встречался с C/C++ во время обучения. SystemC основан на широко известном языке.

• SystemC поддерживает современные методологии верификации с помощью многоуровневой библиотеки верификации SystemC (SCV - SystemC Verification library). SCV поддерживает создание тестовых платформ, запись транзакций (входные сигналы, мониторы, проверка откликов), рандомизацию переменных, наложение ограничений/связей, а также применение новых методологий верификации на основе транзакций.

• SystemC создан в расчете на проектирование на базе IP-блоков и повторное использование проектных и верификационных компонентов, на основе C++ и OSCI стандартов по взаимодействию компонентов на уровне транзакций. SystemC «спроектирован для повторного использования».

• SystemC поддерживает моделирование аппаратной части и детализацию проекта до RTL уровня. SystemC обеспечивает взаимосовместимость аппаратных, сигнальных и битовых структурных компонентов, и полностью поддерживает как ручную детализацию, так и методы синтеза до уровня RTL и далее.

• SystemC предоставляет каналы, модули, интерфейсы и методы, позволяющие гибко, удобно и эффективно моделировать все виды схем коммуникаций на чипе - стандартные шины, сетевые и типа точка (point to point). Моделирование коммуникаций на чипе естественным образом поддерживается в SystemC.

Таким образом, очевидны преимущества SystemC для проектирования SoC. SystemC естественным образом поддерживает все основные требования к языку проектирования и верификации SoC.

В тоже время в течение последних двух лет разгорелась значительная дискуссия и даже возникла некоторая путаница по поводу ролей, занимаемых различными уже существующими, а также новыми, либо модифицированными языками проектирования. Если мы захотим составить список языков, используемых в проектировании сложных систем или SoC проекте, получится примерно следующее:

• В большинстве SoC проектов присутствует хотя бы один программируемый процессор. Поэтому нам скорее всего придется работать с симулятором набора инструкций (ISS), подсистемой памяти и шиной (например ARM+AMBA), и все это может быть смоделировано в SystemC. На самом деле весьма вероятно наличие двух процессоров, RISC-типа и DSP, каждый со своей подсистемой моделирования и ISS.

• На этих процессорах будут выполняться какие-то встроенные программы - системные и прикладные аппаратно-зависимое SW(HdS), прикладное и посредническое SW. Добавляем соответственно языки С, C++ и/или Java.

• Команда разработчиков может создавать либо модифицировать цифровые IP блоки - некоторые из них (например, блоки обработки сигналов/изображений или кодирования/декодирования) моделируются в Matlab/Simulink (потоки данных), а некоторые в Verilog или VHDL.

• В наши дни редкий SoC проект обходится без цифровых IP блоков приобретенных со стороны - которые описываются на языках Verilog или VHDL.

• Во многих SoC проектах есть блоки AMS (analogue/mixed-signal) интерфейсов или тактовые генераторы на основе PLL (phase-locked loop), приобретенные со стороны либо созданные проектными командами - они моделируются на Spice, либо на Verilog или VHDL варианте в случае AMS интерфейсов (Verilog-A, VHDL-AMS) для того, чтобы AMS интерфейсы могли быть протестированы в рамках общего проекта SoC, путем подключения их моделей к симулятору смешанного моделирования.

• Также необходимо создать тестовые платформы (testbench) и тесты для верификации проекта. Хотя для этого обычно используются HDL языки, в последнее время растет интерес в специализированных языках аппаратной верификации (Hardware Verification Languages - HVLs) - таких как «е» от Verisity, Vera от Synopsys, Open Verification Library (OVL) на основе HDL, а также создаваемые в данный момент языки SystemVerilog и Verilog-2005. Конечно, для этих целей может использоваться и новая библиотека верификации SystemC - SystemC Verification Library (SCV).

Утверждения - Ассёрты (assertions) и верификация на основе ассертов представляют собой новый способ спецификации проектных характеристик, как в случае формальной (статической) верификации, так и динамической (на базе симуляции). Для этих целей могут быть использованы такие языки как Open Vera Assertions (OVA), Accellera Property Specification Language (PSL), основанный на Sugar от IBM, и ассерты языка SystemVerilog. В реальном проекте IP блоки, приобретенные от различных поставщиков, могут содержать ассерты заданные на всех перечисленных выше языках.

Если мы теперь подсчитаем все языки и системы обозначений, используемые в проекте, то получим как минимум девять, и как максимум может быть даже 16 или 17 различных форматов! И, тем не менее, существуют способы работы с таким количеством языков. Сначала мы должны понять, что каждому языку соответствуют конкретные цели или модели использования. Для каждой задачи проектирования часто могут быть одинаково пригодны сразу несколько языков. Наконец, очень маловероятно, что какой-либо единственный язык может решить все задачи системного проектирования - от спецификаций на высоком уровне до RTL реализации; от верификации через моделирование до синтеза; от создания встроенных программ до аппаратного проектирования.

При рассмотрении широкой области проектирования на системном уровне очевидно, что SystemC является языком системного проектирования, покрывающий наиболее важные уровни абстракции в проектировании на системном уровне, от не временного (untimed) функционального моделирования HW-SW платформ на уровне транзакций до реализации на уровне RTL. Он позволяет проектным командам моделировать и верифицировать проекты, на действительно системных уровнях абстракции, а затем детализировать эти проекты, отражая детали реализации, и, в конце концов, связать системную модель с реализацией и верификацией аппаратного проекта. В SystemC можно создать модель-прототип проектной платформы на уровне транзакций, что позволяет быстро верифицировать тестовые платформы на системном уровне перед тем, как переходить к дальнейшей детализации. SystemC является естественным моделирующим языком для решения всех проблем, возникающих в системах и платформах со смешанной аппаратной и программной частью.