Jump to content

    

Организация проекта на System Verilog

Проблема такая:
Есть сравнительно сложный проект на System Verilog. Он содержит кучу разных моих модулей, альтеровких FIFO и RAM и пр.
Причём могут добавляться варианты модулей(например другой SPI поддерживающий другое внешнее устройство), FIFO могут быть разной ширины и глубины и т.д.
Причём всё это должно работать для разных ПЛИС - Cyclone3, Cyclone5, MAX10.
Причём всё это должно быть просимулированно в разных конфигурациях и затем конкретная конфигурация должна быть синтезирована.

Меня интересует как оптимально организовать проект:
1. Чтобы можно было автоматически просимулировать разные конфигурации. Например, если используются параметры, можно ли их автоматически заменять. Если используются разные FIFO можно ли их каким либо образом заменять.
2. Может быть создать своего рода библиотеку из всех модулей и использовать скрипт, чтобы составлять verilog файл из частей. Ну и скриптом менять файлы, например на FIFO с другой глубиной
3. Генерировать синтезируемую часть для конкретной конфигурации.

Если несовсем внятно объяснил - спрашивайте.

 

Share this post


Link to post
Share on other sites
Quote

1. Чтобы можно было автоматически просимулировать разные конфигурации. Например, если используются параметры, можно ли их автоматически заменять. Если используются разные FIFO можно ли их каким либо образом заменять.

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

Share this post


Link to post
Share on other sites

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

1 hour ago, djhall said:

1. Чтобы можно было автоматически просимулировать разные конфигурации. Например, если используются параметры, можно ли их автоматически заменять. Если используются разные FIFO можно ли их каким либо образом заменять.

Что вы имеете в виду "автоматически заменять"   Для SV на этапе запуска сима (elaboration) можно заменить значения любого parameter в иерархии модулей проекта.  Соответственно сим  запустится в конфигурации с изменёнными параметрами.  Но только на этапе запуска - в процессе работы тестбенча  значения  уже не изменить. 

Подстановку  FIFO, RAM и других платформно-зависимых примитивов  можно делать по разному -  через  кодогенерацию  из скриптов,  выбором  через parameter из списка заранее сгенерированных IP корок.  Но мне кажется что более правильный путь это вынос из основного кода этой функциональности в собственные модули которые могут конфигурироваться через набор parameter. С уходом по возможности от  использования не конфигурируемых IP от вендоров. В таком случае миграция на другое семейство или вендора  будет проще.

1 hour ago, djhall said:

2. Может быть создать своего рода библиотеку из всех модулей и использовать скрипт, чтобы составлять verilog файл из частей. Ну и скриптом менять файлы, например на FIFO с другой глубиной

Чем более универсальную генерилку вы сделаете тем более  она будет похожа на qsys в Qu или ip-inegrator в Vivado :wink2:. Но в этом случае вам придется больше на Tcl  писать, а не на SV.  Мне попадались такие "уникальные"  генерилки в виде части BSP для разных FPGA-шных плат. В большинстве своем кошмар. Оно и понятно - сил на создание более или менее универсального решения требуется много. Поэтому сопровождать это очень тяжело.  В результате  для плат на последних семействах FPGA  генерилки выдают код который со времен царя гороха не обновлялся.  :bad: 

Удачи! Rob.

Share this post


Link to post
Share on other sites
23 hours ago, des00 said:

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

А можно какой-нибудь пример или ссылку на пример.

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

 

23 hours ago, Doka said:

djhall

попробуйте посмотреть труды нашего форумчанина:

https://gitlab.com/camlab/xilinx-vivado-bullet/wikis/Fpga build system

Да спасибо огромное это очень похоже на то что нужно. Уже изучаю.

 

21 hours ago, RobFPGA said:

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

Что вы имеете в виду "автоматически заменять"   Для SV на этапе запуска сима (elaboration) можно заменить значения любого parameter в иерархии модулей проекта.  Соответственно сим  запустится в конфигурации с изменёнными параметрами.  Но только на этапе запуска - в процессе работы тестбенча  значения  уже не изменить.

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

 

21 hours ago, RobFPGA said:

Чем более универсальную генерилку вы сделаете тем более  она будет похожа на qsys в Qu или ip-inegrator в Vivado :wink2:. Но в этом случае вам придется больше на Tcl  писать, а не на SV.  Мне попадались такие "уникальные"  генерилки в виде части BSP для разных FPGA-шных плат. В большинстве своем кошмар. Оно и понятно - сил на создание более или менее универсального решения требуется много. Поэтому сопровождать это очень тяжело.  В результате  для плат на последних семействах FPGA  генерилки выдают код который со времен царя гороха не обновлялся.  :bad:

Лучшее решение сохранить разные варианты IP или систем Qsys ну и скриптами генерить Qsys и перемещать по разным папкам для дальнейшей работы, как по ссылке https://gitlab.com/camlab/xilinx-vivado-bullet/wikis/Fpga build system ?

 

Может есть какой промышленный стандарт для таких вещей, по типу https://gitlab.com/camlab/xilinx-vivado-bullet/wikis/Fpga build system ну или просто опробированное решение?

Edited by djhall

Share this post


Link to post
Share on other sites
5 minutes ago, djhall said:

А можно какой-нибудь пример или ссылку на пример.

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

да в самом симуляторе посмотрите. в том же менторе есть параметр к vlog +define <blablabla>, этим можно управлять конфигурацией параметров/инстансов во время компиляции проекта из скрипта. Можно обойтись без копирования. В остальном все как вы описали

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this