Перейти к содержанию
    

Использование SystemC для проектирования системы в целом

Самым главным достоинством языка SystemC является то, что можно подняться на системный уровень и спускаться до уровня RTL в рамках одного языка. Т.е. моделирование комплексной системы (системы на кристалле) можно производить оставаясь в едином языковом пространстве. Еще одним преимуществом является высокая скорость моделирования.

 

Сначала создается высокоуровневая поведенческая модель системы. Все сложные элементы (такие как шины, процессоры, DDR-памяти, интерфейсы и т.д.) строятся на базе транзакционных моделей (TLM). Проверяется правильность функционирования системы в целом. В полученной модели выделяются блоки, отвечающие за аппаратную часть (HardWare), и блоки, отвечающие за программную часть (SoftWare). Далее программисты и аппаратчики работаю параллельно: программисты пишут программы на C (C++), а аппаратчики спускаются на уровень регистровых передач (RTL). Таким, образом обе группы (HardWare и SoftWare) изначально работают с одной моделью, а в процессе разработки TLM-блоки заменяются уже своими физическими (или программными) эквивалентами.

 

Не совсем понятно как взаимодействуют блоки на разных уровнях - TLM и RTL. Пример: память DDR и контроллер к ней написан на уровне TLM, а блок, использующий ее написан на RTL-уровне.

 

Настораживает, что в интернете так и не нашел TLM-моделей стандартных элементов (к примеру той же DDR-памяти или шины).

 

Есть ли у кого-нибудь опыт разработки целой системы с использованием SystemC? На сколько там все прозрачно? Оправдывает ли себя вообще такой подход? Какие есть возможности визуализации и документирования создаваемого проекта? Можно ли в проект на SystemC делать VHDL-вставки RTL-уровня?

Изменено пользователем ZED

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

введение явно лишнее, как будто статью пишете. Поиском по форуму, тема обсуждалась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Введение я написал, дабы не раздуть новое обсуждение на тему для чего он нужен и кто поддерживает/не поддерживает синтез, ну и т.д. Поиском по форуму естественно пользовался: появилось больше вопросов, чем ответов. Эти вопросы я и задаю. Пытаюсь проникнуться философией этого языка. В основном интересует TLM.

Изменено пользователем ZED

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TLM и RTL это кагбэ концепции, а СистемЦ (как SV или MyHDL или даже С++/Джава) это инструмент реализации концепции.

 

мне кажется, что инструмент содержит в себе гораздо меньше философии чем концепция, даже как бы ортогонально друг к другу

 

если владеете С++ (настоящим, а не эмбедерским :), то СистемЦ (как библиотека С++) будет понятна и проста в качестве инструмента для освоения концепций

 

сталкивался на практике: мощные программисты пишут модели на СистемЦ, плюс по сравнению с матлабом это скорость исполнения и упорядоченность кода, по сравнению с SV скорость и понятность С++ (я кстати не особо ас в С++, читать со словарем могу, писать не очень)

для самооценки можно сорцы СистемЦ-шные посмотреть - бывает и более адский С++, но и там вполне неплохо развернуто :)

 

требования для модели тоже должны быть мощные :), например для DDR контроллера применять СистемЦ, имхо, смысла нет

 

---------------------------

 

если кроме теоретического освоения нужны какие-то практические выводы, то вопрос поддержки тулзами занимает важное место

 

так можно и MyHDL взять - он на питоне написан, в мильйон раз более приятный язык чем С++, ООП там можно за 2 минуты проникнуться и навалять ООП-ного кода стотыщ строк и TLM реализовать как угодно

 

а в смысле поддержки тулзами СистемЦ, увы, в попе. немного получше MyHDL, так как все симуляторы поддерживают SC co-simulation, но не намного лучше

 

для мощной модели, когда код хитрый и проще потом переписать руками RTL на верилоге, а потом добиться совпадения SC и SV моделей (опять же в SC-шную тестбенч можно SV/V код вставить и/или наоборот)

это оправдано

 

а для простых задач, имхо, проще сразу на SV писать, там TLM развернуто и доки и готовые модели (как пример TLM - это множество SV-шных BFM-моделей)

также для SV есть много книжек, где это все подробно описывается, опять же всякие методологии верификации (а где еще TLM применять?) OVM (http://www.ovmworld.org/), VMM

 

===============

 

имхо, зависит от бэкграунда - если С++ родной берите SC, если верилог родной - то SV + OVM

ну а если питон и свободное время, то MyHDL, имхо, замечательный проект

 

но путь SV+OVM он какбы ближе к практике - к реализации чего-то на ПЛИС или АЗИКе, хотя опять же если бэкграунд в С++ велик и задача сложна, то всех SV-шников можно уделать, так как трудности с тулзами они какбы константа и при росте сложности задачи станут пренебрежимо малыми

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть ли у кого-нибудь опыт разработки целой системы с использованием SystemC? На сколько там все прозрачно? Оправдывает ли себя вообще такой подход? Какие есть возможности визуализации и документирования создаваемого проекта? Можно ли в проект на SystemC делать VHDL-вставки RTL-уровня?

1)был.

2)к тому времени синтез с СистемЦ уже завернули, поэтому для синтеза пришлось переводить всё в Верилог.

3)зависит от задачи. проект для одного ПЛИС делать по-моему так не стоит - пишите сразу на VHDL/SV. если нужно изучить действительно _систему_ разнородную на высоком уровне, то стоит. по крайне мере я именно СистемЦ собираюсь пользовать для оценки реализуемости одной системки с разными аппаратными раелизациями.

4)не знаю таких. может в Катапульте от ментора есть приблуды для визуализации.

5)можно делать mixed-language modelling. только для моделирования всяких там микросхем памяти используется не РТЛ а поведенческое описание. о синтезе с СистемЦ давно ничего не слышал. последние сведения, что его вроде бы вернули в Катапульт (так было написано в брошюре от ментора - что там на самом деле не знаю)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

yes, спасибо Вам за развернутый ответ.

 

С языком C++ не дружен к сожалению.

 

А вот взять, например систему на кристалле (SoC). Вот есть некий процессор, шинный интерфейс и ПЛИС. Для такой задачи лучше видимо подойдет SystemC, нежели SystemVerilog, или тут они примерно равны?

 

Вот хочу еще разобраться с TLM. Насколько его сложно освоить и с чего лучше начать, чтобы понять концепцию (видимо с понятия класса)? Как писать (например те же шинные интерфейсы) на этом уровне, что нужно учитывать (вопрос философии)?

 

например для DDR контроллера применять СистемЦ, имхо, смысла нет

Ну я имел ввиду транзакционную модель, чтобы использовать ее для отладки остальной части проекта, или так не делают?

 

Есть ли какие-нибудь готовые проекты или примеры с описанием применения TLM от простого к сложному?

Изменено пользователем ZED

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По TLM на SystemC много материалов здесь:

http://masters.donntu.edu.ua/2007/fvti/sme.../diss/index.htm

http://masters.donntu.edu.ua/2007/fvti/sme...brary/index.htm

Изменено пользователем Poluektovich

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Poluektovich спасибо за ссылки!!! Приятно, что даже на русском, я даже и не надеялся. Буду читать, осваивать, позже мыслях по этому поводу. отпишусь о свои

CaPpuCcino, Вам спасибо за дельный ответ, все по пунктам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С языком C++ не дружен к сожалению.

 

А вот взять, например систему на кристалле (SoC). Вот есть некий процессор, шинный интерфейс и ПЛИС. Для такой задачи лучше видимо подойдет SystemC, нежели SystemVerilog, или тут они примерно равны?

 

Вот хочу еще разобраться с TLM. Насколько его сложно освоить и с чего лучше начать, чтобы понять концепцию (видимо с понятия класса)? Как писать (например те же шинные интерфейсы) на этом уровне, что нужно учитывать (вопрос философии)?

 

если С++ не знаете и собираетесь все-таки с ПЛИС/АЗИКами работать, то, имхо, лучше берите сразу SV

 

примеров полно - посмотрел в квесте - больше дюжины примеров/уроков по SC TLM, они же доступны и без квесты, там же и доки (англицкие)

но для SV примеров/док в сто раз больше

 

ну и как мне показалось, нужно вначале разобраться с ООП (и в SV это все-таки попроще), а TLM, по моему, очень простая концепция, чтобы с ней какие-то проблемы возникли, если струментом владеешь

 

плюс SC - это бесплатность компилера, то есть для SV придется купить (если по честному) симулятор и он стоит ~100К$

а SC можно моделировать бесплатным gcc, то есть для академических целей или при каких-либо ограничениях на китайские FTP это вариант

 

ну и еще быстрота исполнения - у меня в SoC (АЗИК) бывают SV/V симуляции, которые идут неделями.

SC позволяет это сильно ускорить и вплоть до того, что приближаться к реальному времени, то есть на модели SoC можно начинать отлаживать уже взрослый софтварь для конечного устройства. там много чего: ядра, шины и т.п. предоставляется в виде предкомпиленных моделей. но системы такие дофига стоят и мне в реале не удалось посмотреть, хотя, как я понял, эти системы являются достаточно серьезным бизнесом каденса/синопсиса и всяких стартапов

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...