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

SV, соединить цепью два модуля

Простенький вопрос, Quartus 9.1, SystemVerilog.

Имею топ-модуль, и в нем несколько младших модулей. Сигналы, общие для большинства, соединил с помощью интерфейса. Но есть куча сигналов, идущих только от одного модуля к другому. Их приходится описывать в топ-модуле (wire netX;). Потом при создании экземпляров младших модулей ссылаться на эти цепи. Вернее, и ссылаться не надо, если имена те же.

Нельзя просто иерархически передать цепь из модуля B в модуль C.

  B_mod B_inst(.netX(C_inst.netX), .*);
  C_mod C_inst(.netX(B_inst.netX), .*);

Вижу пока решение - собрать все такие цепи еще в одну кучу (интерфейс). И подключить этот интерфейс ко всем модулям. Лишних цепей модули все равно не возьмут. Но это не проще, чем описать все цепи в топ-модуле.

Или есть способ лучше?

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


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

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

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


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

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

От пакета отказался, вот здесь описал свои мучения.

http://electronix.ru/forum/index.php?showtopic=90224

Оставлю в топе, пожалуй.

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


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

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

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


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

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

К чему привык, тем и пользуюсь. А ну как насимулирую в ModelSim, а потом Quartus откажется укладывать?

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


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

нет

И правильно!

Ибо:

1. Моветон. (это как необъявленные переменные в pure C)

2. Потенциальные грабли.

 

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


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

1. Моветон. (это как необъявленные переменные в pure C)

2. Потенциальные грабли.

А не моветон и грабли описывать одну цепь три раза - в топе, и в каждом из модулей? А захочешь изменить название, или выбросить, добавить - лазить по всем трем модулям.

Именно по этой причине были изобретены интерфейсы. Можно, в принципе, понаделать интерфейсов на каждую такую цепь. :)

P.S. Или вы подтверждаете, что лучше интерфейсов для этой цели ничего нет? :)

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


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

Свой совет попробовать объявить внутренние сигналы в пакете признаю вредным. Стандарт это позволяет, но Precision 2009a.95 говорит :

Variable/Net declaration is not supported inside package/compilation unit scope.

Думаю, в других синтезаторах дело обстоит аналогично.

 

ЗЫ Ещё долго ждать придётся, пока тулзы начнут нормально поддерживать нормальный язык :(

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


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

Свой совет попробовать объявить внутренние сигналы в пакете признаю вредным. Стандарт это позволяет, но Precision 2009a.95 говорит :

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

А в книге "SystemVerilog for Design" написано следующее:

The synthesizable constructs that a packages can contain are:

• parameter and localparam constant definitions

• const variable definitions

• typedef user-defined types

• Fully automatic task and function definitions

• import statements from other packages

• Operator overload definitions

Packages can also contain global variable declarations, static task

definitions and static function definitions. These are not synthesiz-

able, however, and are not covered in this book.

Видимо, разработчики по книжке делали. :)

Тем более, авторы книги и стандарта одни и те же.

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


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

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

проектируйте интерфейсы заранее.

А захочешь изменить название, или выбросить, добавить - лазить по всем трем модулям.

а вам все равно лазить, порт в инстансе переименовывать.

 

Именно по этой причине были изобретены интерфейсы. Можно, в принципе, понаделать интерфейсов на каждую такую цепь. :)

немного для другого. интерфейс для цепи можно, но геморно.......

 

 

ЗЫ. а за использование глобальных сигналов для синтеза, оторвал бы руки, по самую голову :biggrin:

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


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

проектируйте интерфейсы заранее.

Так есть у меня интерфейс, общая шина для чтения-записи от микроконтроллера.

Не хочу ее поганить всякими сигналами от точки к точке. Разве что сделать еще один интерфейс.

ЗЫ. а за использование глобальных сигналов для синтеза, оторвал бы руки, по самую голову :biggrin:

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

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


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

Так есть у меня интерфейс, общая шина для чтения-записи от микроконтроллера.

Не хочу ее поганить всякими сигналами от точки к точке. Разве что сделать еще один интерфейс.

под интерфейсами я понимал не SV объект interface а интерфейсы модулей, разрабатываемые на этапе функциональной схемы.

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

я про другие глобальные сигналы.

 

ЗЫ. Кстати в случае переименования, вам потребуется изменить : объявление интерфейса, модуль источник, модуль приемник. Те же три модуля (для случая глубины иерерахии 1). так интерфейс на каждый сигнал, это шило на мыло.

 

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


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

я про другие глобальные сигналы.

Ну не томите уже, расскажите какие_такие_другие, интересно :)

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


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

Ну не томите уже, расскажите какие_такие_другие, интересно :)

кхм, это же старая фича VHDL "глобальный сигнал", можно было без всяких агентов обрабатывать/смотреть сигналы внутри модуля в симуляторе например. Реализовалось с помощью объявления сигнала в пакете и использования по месту %)

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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