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

Генерация нескольких экземпляров интерфейса

Помню что несколько лет назад натыкался на подобное обсуждение (может даже и сам его создавал :)), но через поиск его не нашел. Собственно задача - как при описании портов устройства автоматически сгенерить несколько экземпляров одного и того же интерфйеса, используя дженерик-параметр? Насколько помню старое обсуждение - на ВХДЛе этого нельзя было сделать. Ну кроме как объединить одноименные порты в одну шину и разделить потом на нижележащие устройства. Но такой вариант мне не подходит. А вот на верилоге что то подобное можно было провернуть... Но с верилогом пока знаком очень плохо и на скорую руку гугл ничего не подсказал. Поэтому буду благодарен за примеры :)

 

зы

если использовать интрефейсы в системверилоге, то как параметризировать объявление портов модуля на топ-лвл?

 

 

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


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

Всё зависит от задачи, для которой нужно "несколько экземпляров". Если говорить про Верилог, то можно через `define'ы сделать описание интерфейса и затем размножать его как хочется:

`define INTERFACE_IN(x)					\
	input i_my_wire_``x

module test_mod (
		INTERFACE_IN(0),
		INTERFACE_IN(1),
		INTERFACE_IN(2),
		output o_my_wire
	)

Если же нужно уменьшить количество протов/интерфейсов объявления, то лучше задействовать array'и. Их можно объявлять как в Верилоге, так и VHDL с различными индексами.

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

Параметризация объявления портов? Не совсем понял вопрос, но если дело в разрядностях, тогда описываете интерфейс:

interface if_axi_lite #(
	parameter integer C_S00_AXI_DATA_WIDTH	= 32,	// Data width to AXI lite
	parameter integer C_S00_AXI_ADDR_WIDTH	= 7)	// Addr width to AXI lite
(
	input	[C_S00_AXI_ADDR_WIDTH - 1 : 0] S00_AXI_awaddr,
	input	[2 : 0] S00_AXI_awprot,
	input	S00_AXI_awvalid,
	output	S00_AXI_awready,
  ...
)

дальше подставляете нужные значения при объявлении интерфейса:

	if_axi_lite #(
		.C_S00_AXI_DATA_WIDTH(32),
		.C_S00_AXI_ADDR_WIDTH(16))
	S_00_AXI ();

и подставляете по нужным интерфейсам S_00_AXI.

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


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

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

1 hour ago, GAYVER said:

если использовать интрефейсы в системверилоге, то как параметризировать объявление портов модуля на топ-лвл?

В общем случае задавать через параметры модуля  число и тип портов  в V/SV нельзя.  Можно только менять параметры  уже объявленных - ширину вектора/размер массивов/ в отдельных случаях тип данных порта.  Поэтому  вам надо  подумать - либо менять  принцип построения системы  чтобы не требовалось  "динамически" создавать порты - либо  использовать  что-то для автоматической генерации исходников модулей. 

Удачи! Rob.

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


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

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

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

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

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

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

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

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

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

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