Jump to content

    

Количество передаваемых переменных в модуль Verilog/SV

Приветствую Форум! При моделировании одного проекта, заметил, что modelsim не компилирует, если у модуля, будь то топ-модуль или подмодуль, много входных/выходных портов. Решил почитать документацию, чтобы узнать, а сколько можно передать переменных в модуль? В литературе не нашел, каюсь, возможно проблема в том как искал.

module1 mod(a, b, c, d,..., N);  // В данном случае N будет равняться чему?

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

Всем спасибо за ответы!

Share this post


Link to post
Share on other sites

С таким не столкнулся. Ну укомпонуйте и сгруппируйте несколько в один для тестирования.

У меня как то моделсим не хотел принимать больше 32-ух бит.

6 hours ago, Naixrim said:

? Несколько модулей в одном?

а так можно? 

Share this post


Link to post
Share on other sites
13 minutes ago, new123 said:

С таким не столкнулся. Ну укомпонуйте и сгруппируйте несколько в один для тестирования.

У меня как то моделсим не хотел принимать больше 32-ух бит.

а так можно? 

Имеется в виду, что в одном файле несколько модулей. Да, можно. Об этом описано здесь - https://www.kit-e.ru/articles/circuit/2008_5_154.php

Share this post


Link to post
Share on other sites

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

6 hours ago, Naixrim said:

... При моделировании одного проекта, заметил, что modelsim не компилирует, если у модуля, будь то топ-модуль или подмодуль, много входных/выходных портов. 

module1 mod(a, b, c, d,..., N);  // В данном случае N будет равняться чему?

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

Чудеса прям! Вы бы сказали сколько у вас "много" было 100, 1000,  и ли 10 тыс. портов?

И какое сообщение об ошибке выводит при компиляции такого модуля? Тогда мы бы тоже в чудеса поверили бы. :scratch_one-s_head:

 

О вкусах организации проектов не спорят.  Лепят кому как удобнее. Многие  компании свои IP корки поставляют одним  файлом в котором может сидеть от  десятка до сотен отдельных модулей. Удобно  компилировать - не надо писать простыни списков файлов составляющих модуль. Но редактировать такое :wacko2: - Как то раз довелось ковырять 20-ти мегабайтный исходник на VHDL c более чем 600 отдельных сущностей ... :dash2:

 

Для verilog|systemverilog есть еще такое понятие как compilation unit. Если грубо -  модули в одном файле компилируются как бы в общем глобальном пространстве имен.  Соответственно можно шарит макро и package файлы. Но поддержку такого надо смотреть для конкретного tools. 

 

 Так что организовывайте так как вам будет удобно - главное тут именно "организовывайте"

 

Удачи! Rob.

P.S.  Сам почти всегда делаю для одного модуля один файл. Бывают и исключения (но не на 20 MByte) :wink:

 

Share this post


Link to post
Share on other sites
9 minutes ago, RobFPGA said:

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

Чудеса прям! Вы бы сказали сколько у вас "много" было 100, 1000,  и ли 10 тыс. портов?

И какое сообщение об ошибке выводит при компиляции такого модуля? Тогда мы бы тоже в чудеса поверили бы. :scratch_one-s_head:

 

О вкусах организации проектов не спорят.  Лепят кому как удобнее. Многие  компании свои IP корки поставляют одним  файлом в котором может сидеть от  десятка до сотен отдельных модулей. Удобно  компилировать - не надо писать простыни списков файлов составляющих модуль. Но редактировать такое :wacko2: - Как то раз довелось ковырять 20-ти мегабайтный исходник на VHDL c более чем 600 отдельных сущностей ... :dash2:

 

Для verilog|systemverilog есть еще такое понятие как compilation unit. Если грубо -  модули в одном файле компилируются как бы в общем глобальном пространстве имен.  Соответственно можно шарит макро и package файлы. Но это поддержку такого надо смотреть для конкретного tools. 

 Так что организовывайте так как вам будет удобно - главное тут именно "организовывайте"

 

Удачи! Rob.

P.S.  Сам почти всегда делаю для одного модуля один файл. Бывают и исключения (но не на 20 MByte) :wink:

 

Знаете, я пошел воссоздавать ситуацию, которая привела к ошибке и прочее. И у меня не получилось! Я в модуль закинул портов еще больше чем было тогда ( тогда было порядка 12ти) и сейчас все работает, я просто с нуля переписал топ модуль, по всей видимости не заметил ранее ошибку. Сейчас сижу и думаю насколько глупо я выгляжу. Насчет организации, ваш посыл я понял, спасибо за ответ, скрестил пальцы и надеюсь, что по 20 Мб файлы делать не буду =)

Share this post


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

Сейчас сижу и думаю насколько глупо я выгляжу.

я тут целый год на глазах у всех учился fpga на паленой плате. Вот кто глупо выглядел =))

Edited by new123

Share this post


Link to post
Share on other sites

Одно из правил линта как раз требует чтобы имя модуля совпадало с именем файла. Максимум видел индусский case на 14тыс. строк, как же проблемно было высчитывать начала и конца, приходилось перекидывать файлы со станции на PC, чтобы нормально разделить и прочесть код. Но 20МБ RTL кода, это за гранью нормального. Это скорее всего релизный  вариант, чтобы отдать одним файлом, но не работать с ним.

Share this post


Link to post
Share on other sites

Буквально недавно столкнулся с подобным поведением QuestaSim, Когда перешёл на версию 10.7c c версии 10.4e, тоже не увидел часть портов.

Упорное гугление и чтение доков дало вот что: теперь Ментор рекомендует трёхстадийный процесс: vcom/vlog -> vopt -> vsim. Если делать по-старинке vcom -> vsim, то это как раз и скрывает часть портов.

Теперь я добавляю при вызове vsim ключ -voptargs=+acc и всё вижу. Возможно, есть более изящное решение, но пока как-то нет большого желания разбираться глубже. Я стал ленив и нелюбопытен.

Share this post


Link to post
Share on other sites

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

15 hours ago, andrew_b said:

Буквально недавно столкнулся с подобным поведением QuestaSim, Когда перешёл на версию 10.7c c версии 10.4e, тоже не увидел часть портов.

Упорное гугление и чтение доков дало вот что: теперь Ментор рекомендует трёхстадийный процесс: vcom/vlog -> vopt -> vsim. Если делать по-старинке vcom -> vsim, то это как раз и скрывает часть портов.

Не так уж упорно -  начиная с 10.7с версии, по умолчанию, сим запускается с оптимизацией. А режим сима без оптимизации (-novopt) объявили устаревшим с угрозой в последующих версиях вообще убрать. Поэтому теперь надо явно указывать какие внутренние порты|/сигналы вы хотите видеть (опцией +acc).

Удачи! Rob.

 

Share this post


Link to post
Share on other sites
On 4/18/2019 at 11:09 AM, Naixrim said:

Каждый, прям совсем каждый, отдельный модуль по своим файлам? Несколько модулей в одном? Или комбинация из этого?

это определяется внутрикорпоративными правилами либо выбором одного из нескольких стилистических стандартов.

Всякие синопсисы/кейденсы/фрискейлы рекомендуют использовать правило (именно как правило, а не рекомендуцию): 1 модуль = файл, имя модуля == имени файла

 

On 4/19/2019 at 7:58 AM, lexx said:

Одно из правил линта как раз требует чтобы имя модуля совпадало с именем файла.

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

да, конкретно это правило имеет под собой рациональную почву, но это стилевая вещь, а не нарушение догм LRM

и в целом неплохо было бы прежде "выбрать свою религию" и соответствующим ей настроить рулы тула, иначе линт превратится в "вангователя стиля кодирования"

Share this post


Link to post
Share on other sites
18 hours ago, Doka said:

да, конкретно это правило имеет под собой рациональную почву, но это стилевая вещь, а не нарушение догм LRM

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

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