Jump to content

    
Sign in to follow this  
OparinVD

Симуляторы HDL, что для чего, что умеют

Recommended Posts

22 hours ago, Nick_K said:

 Рисовалки нет, но со временем в ней необходимость отпадёт,

есть, но в HDL Designer от тойже фирмы. Кому то нравится)

Share this post


Link to post
Share on other sites
On 12/11/2020 at 12:50 PM, OparinVD said:

А.. понял. Значит мой следующий шаг - прикрутить Моделсим как основной симулятор в Виваде и научиться его готовить. 

Тогда последний вопрос из области симуляторов. В свое время я его отбросил, как нечто из области фантастики, но вдруг я ошибался... Вопрос такой: могут ли современные симуляторы взаимодействовать с внешним миром кроме как через файловую систему? А именно, можно ли организовать такой стенд, где тестер накидывает пакеты через изернет и получает интерактивно ответы, но обработка идет не железе, а в модели? Или оно не стоит потраченных сил?

Мне тоже больше нравится Квестасим, в ней всё очень удобно, большой функционал. Хорошо работает с систем верилогом при написании тестбенчей. Простой и понятный интерфейс. Позволяет на ранних стадиях быстро выкинуть все системные ошибки. Можно подтянуть ip-ядра и их промоделить, если не очень понятно как там и что работает. В общем каждому своё, но инструмент очень полезный. По скорости работы и вылетам тоже не было нареканий.

On 12/12/2020 at 11:09 AM, des00 said:

есть, но в HDL Designer от тойже фирмы. Кому то нравится)

В своё время писал код только блочками в VHDL/verilog. При работе в больших проектах с большой вложенностью голова дурела вспоминать где и что лежит и что к чему относится, следить за разрядностью портов, сигналов in/out.. Любое кардинальное изменение приводило к куче опечаток и дальнейшему поиску ошибок... Как перешёл на HDL Designer, в другом ни в чём уже работать не могу и не хочу. Очень удобно, всё видно и понятно. Сложно заблудиться в коде. Легко следить за подключениями шин, сигналов и прочим. Так что скажу, что мне он определённо нравится, работа с комбинированием графики и кода намного удобнее для меня. После него оглядываясь на прочие старые проекты из десятков файлов vhd/verilog не понимаю как я там вообще ориентировался.. Много лишнего времени уходило никуда.

Share this post


Link to post
Share on other sites

Приветствую!

30 minutes ago, Kronac said:

Мне тоже больше нравится Квестасим, в ней всё очень удобно, большой функционал. ...

... Так что скажу, что мне он определённо нравится, работа с комбинированием графики и кода намного удобнее для меня. После него оглядываясь на прочие старые проекты из десятков файлов vhd/verilog не понимаю как я там вообще ориентировался.. Много лишнего времени уходило никуда.

Хорошо работать хорошими инструментами особенно когда они условно "бесплатны" :wink2:

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
12 часов назад, Kronac сказал:

При работе в больших проектах с большой вложенностью голова дурела вспоминать где и что лежит и что к чему относится, следить за разрядностью портов, сигналов in/out..

Вот тут начинают рулить интерфейсы. Даже простые, примитивные, которые просто упаковывают тучи сигналов в одну строчку. Тогда описание иерархии становится компактным, а управление простым.

Share this post


Link to post
Share on other sites
13 hours ago, Kronac said:

Как перешёл на HDL Designer, в другом ни в чём уже работать не могу и не хочу. Очень удобно, всё видно и понятно.

честно пытался с ним подружиться, года два. Так и не смог. Мне код приятнее и удобнее, настолько что даже некоторые вещи предпочитаю моделировать кодом в матлабе, а не в симулинке. А про код @RobFPGA написал) в проектах 300-500 RTL файлов, особых затруднений не вижу)

13 hours ago, RobFPGA said:

Хорошо работать хорошими инструментами особенно когда они условно "бесплатны" :wink2:

ЕМНИП, хдл дезайнер порядка 10-20к$ за рабочее место, квеста, лет 5 назад обходилась всего в 5млн рублей за лицензию, моделсим в 1,5 млн)

1 hour ago, dxp said:

Вот тут начинают рулить интерфейсы. Даже простые, примитивные, которые просто упаковывают тучи сигналов в одну строчку. Тогда описание иерархии становится компактным, а управление простым.

а я так и не смог к ним привыкнуть вот в таких мелочах, слишком много сущностей для меня. Структуры да, свои типы да, но под каждую мелочь свой интерфейс, не смог)

Share this post


Link to post
Share on other sites
16 hours ago, RobFPGA said:

Приветствую!

Хорошо работать хорошими инструментами особенно когда они условно "бесплатны" :wink2:

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

 

Удачи! Rob.

Слава тем, кто эти хорошие инструменты ломает и выкладывает для общего пользования =)

Share this post


Link to post
Share on other sites
22 часа назад, des00 сказал:

а я так и не смог к ним привыкнуть вот в таких мелочах, слишком много сущностей для меня. Структуры да, свои типы да, но под каждую мелочь свой интерфейс, не смог)

Не очень понял, в чём затруднение и где лишние сущности. По сути эн строк простых портов заменяются одной строкой интерфейса. И инстанцирование модуля занимает не три экрана, а пяток строк. И сопровождать/модифицировать куда проще: добавил сигнал в определении интерфейса и дальше уже по месту в модулях с ним работаешь, а в случае простых портов это ещё правки секции портов всех модулей, где используется порт, добавление сигналов для соединения. Вот где "сущности" для правки множатся. :)

 

Когда приходится работать с сильно многопортовыми модулями - например, с IP ядрами типа PCIe, первым делом пишется модуль-обёртка, где эти сотни сигналов портов мапятся на три-четыре интерфейса. Иначе работать с этими "простынями" сигналов портов, когда основные рабочие клавиши - PageDown/PageUp, просто адъ. :)

 

Пробовал вместо простых интерфейсов использовать пару структур (вход, выход), очень неудобно и путано оказалось. 

 

 

 

 

Share this post


Link to post
Share on other sites
5 hours ago, dxp said:

Не очень понял, в чём затруднение и где лишние сущности. По сути эн строк простых портов заменяются одной строкой интерфейса.

Все так, но вот например, чтобы далеко не ходить, любой из выложеных мной на этом форуме FEC кодеков. порядка 10-15 уникальных модулей. Интерфейсы уникальны,  в каждом модуле порядка 10-20 сигналов, часть из них параметризуемые, рассчитаные под множественный инстантс модулей верхнего уровня в проекты. Если делать все на интерфейсах, то получаем 10-15 уникальных интерфейсов, лежащих в отдельных файлах, отдельно параметризуемых и вставляемых в проект, еще и с учетом модпортов, оторваных от описания модулей, которые в другом файле....  Может оно и более правильно, но не мое, слишком много, для меня, лишних сущностей. Использую предварительную проработку проекта и самописный генератор шаблонов модулей RTL кода. Никому свой подход не навязываю, просто отметил что для меня, такое использование интерфейсов размывает проект.

5 hours ago, dxp said:

Когда приходится работать с сильно многопортовыми модулями - например, с IP ядрами типа PCIe, первым делом пишется модуль-обёртка, где эти сотни сигналов портов мапятся на три-четыре интерфейса. Иначе работать с этими "простынями" сигналов портов, когда основные рабочие клавиши - PageDown/PageUp, просто адъ. :)

Может что не понимаю, в последнем проекте 14 GTX + PCIE,. По GTX взял врапер с генератора, завернул в обертку, из всего массива сигналов из инстанса взял нужные, подключил. PCIE собрал в BD, высунул наружу акси шину, которую да, подключил через интерфейсы, т.к. в этом месте считаю это целесообразным, как и использование интерфейсов как статических классов для шаблонов функций)

Share this post


Link to post
Share on other sites
4 часа назад, des00 сказал:

Если делать все на интерфейсах, то получаем 10-15 уникальных интерфейсов, лежащих в отдельных файлах, отдельно параметризуемых и вставляемых в проект

Вот эти 20 сигналов описаны один раз в интерфейсе. А на простых портах все 20 сигналов описаны в каждом модуле и ещё 20 проводками для межсоединений. В случае прокидывания сигналов по иерархии вся эта "красота" дублируется на каждом уровне иерархии. При добавлении/удалении сигнала это делается один раз в интерфейсе, порты не меняются.

 

Конечно, если у вас генератор модулей и инстансов, то вся эта рутина-писанина автоматизирована, но вопрос читабельности кода остаётся.

4 часа назад, des00 сказал:

14 GTX + PCIE,. По GTX взял врапер с генератора, завернул в обертку, из всего массива сигналов из инстанса взял нужные, подключил. PCIE собрал в BD, высунул наружу акси шину

Разве при инстанцировании IP PCIe нужно руками подключать трансиверы? Оно само цепляет их и не на абы какие, а на вполне определённые.

 

С BD может как-то иначе, не пробовал, но вот, к примеру, 7 Series FPGAs Integrated Block for PCI Express (Xilinx PG054, да и для UltraScale та же история) выдаёт сигналов на три-четыре экрана, где помимо AXI Stream'ов торчат configuration, flow control, physical. И их тоже надо корректно подключить (на часть подать константные значения, часть использовать в пользовательской логике). Когда начинал с этим работать, просто уставал листать исходники. Провёл рефакторинг: написал обёртку с интерфейсами, из которой торчало 4 интерфейса: transaction, cfg, fc, phy. В итоге простая и красивая иерархия без этих уродливых инстансов на эн экранов.

Share this post


Link to post
Share on other sites
11 minutes ago, dxp said:

Вот эти 20 сигналов описаны один раз в интерфейсе. А на простых портах все 20 сигналов описаны в каждом модуле и ещё 20 проводками для межсоединений. В случае прокидывания сигналов по иерархии вся эта "красота" дублируется на каждом уровне иерархии. При добавлении/удалении сигнала это делается один раз в интерфейсе, порты не меняются.

Стоит отметить что интерфейс не один,  для красивого описания их должно быть несколько у модуля, чтобы он связывался с соседями. И они уникальные. и два модпорта, если делать правильно. Это еще не затронуты вопросы параметризации модуля/интерфейса. Но это уже так, софистика, я понимаю как вы делаете, но мне так не нравится). Ну а про дублирование и добавление, у меня генератор делает заготовку, по моим правилам, потом просто копи паст, при этом я до сих пор придерживаюсь старого стиля описания модулей. Читаемость можно посмотреть в теме про FEC

 

11 minutes ago, dxp said:

Разве при инстанцировании IP PCIe нужно руками подключать трансиверы? Оно само цепляет их и не на абы какие, а на вполне определённые.

PCIE да, но

11 minutes ago, dxp said:

С BD может как-то иначе, не пробовал, но вот, к примеру, 7 Series FPGAs Integrated Block for PCI Express (Xilinx PG054, да и для UltraScale та же история) выдаёт сигналов на три-четыре экрана, где помимо AXI Stream'ов торчат configuration, flow control, physical. И их тоже надо корректно подключить (на часть подать константные значения, часть использовать в пользовательской логике). Когда начинал с этим работать, просто уставал листать исходники. Провёл рефакторинг: написал обёртку с интерфейсами, из которой торчало 4 интерфейса: transaction, cfg, fc, phy. В итоге простая и красивая иерархия без этих уродливых инстансов на эн экранов.

там же еще 14 отдельных GTX, для пропиетарного протокола. Для данных мне нужно пару clk/data, для управления/состояния, reset/status. 4 сигнала на порт. Констаты в обертке вписывал, на все про все минут 15 в слике ушло. Вот DRP да, его на интерфейсы ловчее забросить

Share this post


Link to post
Share on other sites

Приветствую!

 

Думаю что универсального рецепта пока нет - где то удобно интерфейсами, где-то структурами, а где-то и  голыми портами да еще с потрошками макросами :yes3: 

Каждый выбирает как ему более нравится. Хорошо когда есть из чего выбрать!

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
2 часа назад, dxp сказал:

А на простых портах все 20 сигналов описаны в каждом модуле и ещё 20 проводками для межсоединений. В случае прокидывания сигналов по иерархии вся эта "красота" дублируется на каждом уровне иерархии.

В SV для инстанцирования модулей встроили обфускатор .*. Радикально сокращает размер портов, но радикально же усложняет читаемость исходников.

Share this post


Link to post
Share on other sites
On 12/24/2020 at 5:21 PM, Kronac said:

Мне тоже больше нравится Квестасим

Да, инструмент хороший. Не нравится только, что он позволяет код писать через жёппу. То, что у Synopsys/Cadence выявляется на этапе сборки, в Questa вылезает только в рантайме.

С другой стороны, у Cadence просто отрватительное решение по рандомизации. Притом, сломали они его в 2019. До этого Xcelium был неплох. А вот VCS прекрасен до сих пор.

Edited by one_eight_seven

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this