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

Verilog, взаимодействие параметров и препроцессора

Здравствуйте, уважаемые гуры.

Хочу сделать модуль с параметром (количество портов). Если чо, все это в Vivado 2019.

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

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

module#
  (
  parameter NumCh = 1
  )
  UpperModule
  (
  набор сигналов
)
  
generate

if (NumCh == 1)
  begin:GTH_1Ch_Block
    `define GTH_1Ch
  end
else
  begin:GTH_2Ch_Block
  	`define GTH_2Ch
  end 

`ifdef GTH_1Ch
LowerModule1
`endif
`ifdef GTH_2Ch
LowerModule2
`endif
    
    (
    	// Common signals
    	.Input(In1),
    	...
    
    	//Configurable signals
    	`ifdef GTH_2Ch
    	.Input(In2),
    	`endif
    );

Проблема: не работает.

Vivado явно не понимает подключение различных модулей в зависимости от `define, который объявляется в generate.

С одной стороны, не выдает ошибок, с другой стороны явно подключает не тот модуль, который задан параметром.

 

Что я делаю не так?

 

P.S. Я понимаю, что можно в зависимости от значения подключать разные модули через generate, без директив препроцессора.

Но это неудобно, т.к. у подключаемых модулей много общих сигналов.

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

Насколько я понимаю, сделать это можно только при помощи директив препроцессора (`ifdef).

Но я явно что-то не так делаю при создании `define в зависимости от параметра.

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


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

дефайн в generate не прокатывает. Давненько сам так поймался в квартусе

https://stackoverflow.com/questions/59264458/define-in-generate-if-statement

 

пришлось в generate сразу модули прописывать.

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

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


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

Всем спасибо, это я уже нагуглил.

Есть ли человеколюбивое решение моего вопроса?

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

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


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

Я стремлюсь к блочности кода, чтобы по сто раз в разных местах не менять. Может бывалые придут расскажут как быть

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


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

1 hour ago, Koluchiy said:

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

Дефайны обрабатываются на этапе препроцессинга, а дженерейты на этапе элаборации. Так и не будет работать, увы.

Не совсем понятна задача. Если нужно подключать разные модули, тогда сделайте всё под дженерейт. Прямо подключение целого модуля по параметру дженерейта (А присвоение портов через wildcard'ы). Минус этого решения - если не будет обьявлен неподключаемый модуль в библиотеке, тогда будет ошибка.

Второй вариант - попробовать сделать всё в Интерфейсе. Сделать интерфейс враппер для всех модулей, а внутри уже по параметру выбирать нужный

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


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

5 часов назад, Koluchiy сказал:

в зависимости от параметра определять `define, в зависимости от `define подключать нужные модули

Если хотите менять список портов модуля, то параметр не подойдет. Нужен `ifdef или interface/modport

Если список портов должен зависеть от параметра (т.е. разные инстансы должны иметь разные порты), то только интерфейсы.

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


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

13 часов назад, Nick_K сказал:

А присвоение портов через wildcard'ы

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

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


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

On 3/13/2021 at 6:37 AM, andrew_b said:

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

При чём здесь это? Я предложил возможное решение. Какой ценой - это совсем другой вопрос.

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


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

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

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

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

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

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

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

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

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

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