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

combinatorial loops

Кому-нибудь удавалось решить проблему появления сего явления, без изменения схемы?

Указание в настройках синтезатора mux extraction "no" не помогло.

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


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

Кому-нибудь удавалось решить проблему появления сего явления

А можно описать подробнее эту проблему для непосвященных?

Пока что мне кажется, что проблема в HDL описании :)

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


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

А можно описать подробнее эту проблему для непосвященных?

Пока что мне кажется, что проблема в HDL описании :)

XST выдает следующее сообщение

WARNING:Xst:2170 - Unit xxx : the following signal(s) form a combinatorial loop: (перечисление имен цепей)

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

xilinx.com по этому поводу говорит следующее

This issue can occur when there are a large number of muxes that constitute combinatorial loops (mux extraction cannot handle them properly).
You can work around this issue by setting the mux extraction option to "no."

В опциях синтезатора установка "no" никак не помогает.

Соответственно надо попытаться в hdl описании указать данный атрибут.

Синтаксис у него следующий

attribute mux_extract: string;

attribute mux_extract of {signal_name|entity_name}: {entity|signal} is
"{yes|no|force}";

Указание этого атрибута в описании элементов на цепи которых xst ругается не помогло.

Хотелось бы указать этот атрибут в блоке, который выше по иерархии.

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

Как вот в этом блоке, стоящем выше по иерархии, прописать этот атрибут?

Или может быть я вообще не в том направлении мыслю?

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


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

:) Обычно это не проблема синтезатора, а проблема кода и если синтезатор их там нашел, то надо править код. Судя по всему, Xilinx нашел баг в вашем коде. Так что выкладывайте код (схему) и полное собщение синтезатора. Иначе помочь Вам не получится.

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

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


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

:) Обычно это не проблема синтезатора, а проблема кода и если синтезатор их там нашел, то надо править код. Так что выкладывайте код (схему) и полное собщение синтезатора. Иначе помочь Вам не получится.

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

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


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

А функциональность блоков в данном случае не важна. По сообщению Xilinx там нужно будет проследить почему образовался combinatorial loop. Вам помогут понять почему он образовался, ну а исправлять будете сами. :)

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


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

Или может быть я вообще не в том направлении мыслю?

Вроде бы речь идет о петле комбинационной логики - т.е. у вас в числе аргументов логической цепочки присутствует ее результат - такое не допустимо кроме экзотичных случаев (я таких не знаю но вдруг...). Такое ощущение, что у вас отсутствует синхронный процесс / триггер на выходе логики или банально забыли сделать процесс синхронным (отсутствует условие фронта в начале).

 

Покажите больше кода - к чему вы собрались применять этот атрибут?

Попробуйте задать атрибут глобально для всего проекта - что-то изменится?

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


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

Вроде бы речь идет о петле комбинационной логики - т.е. у вас в числе аргументов логической цепочки присутствует ее результат - такое не допустимо кроме экзотичных случаев (я таких не знаю но вдруг...). Такое ощущение, что у вас отсутствует синхронный процесс / триггер на выходе логики или банально забыли сделать процесс синхронным (отсутствует условие фронта в начале).

 

Покажите больше кода - к чему вы собрались применять этот атрибут?

Попробуйте задать атрибут глобально для всего проекта - что-то изменится?

Ну да, процесс экзотический.

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

Есть автомат на 25 состояний и мультиплексор, если в схеме не предусматривать состояния, когда

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

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

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

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


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

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

Ну тогда никакие настройки не спасут. Разделяйте триггером

P.S. Но имейте ввиду что у вас может вся логика "поехать" и придется решить задачу не в лоб а ухищиряться. Удачи в "разрубании" петли.

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


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

У Вас схема синхронная? Атомат синхронный?

нет не синхронный, и выходы автомата не регистровые, а комбинационные.

 

Ну тогда никакие настройки не спасут. Разделяйте триггером

P.S. Но имейте ввиду что у вас может вся логика "поехать" и придется решить задачу не в лоб а ухищиряться. Удачи в "разрубании" петли.

Поплывет это точно, я даже знаю как. При перекачки из 6 в 2 из-за этого триггера, в этих двух банках будут по два адреса не содержащих данных.

От этого собственно и уходил, и нарвался вот на эту петлю.

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


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

Поплывет это точно, я даже знаю как. При перекачки из 6 в 2 из-за этого триггера, в этих двух банках будут по два адреса не содержащих данных.

От этого собственно и уходил, и нарвался вот на эту петлю.

 

Можно полюбопытствовать, что значит перекачка из 6 в 2 банка и почему введение тригера породит по 2 адреса не содержащих данных и что предполагалось делать, когда в банках нет данных? Я это спрашиваю, т.к. не могу припомнить в своей практике, чтобы синхронные схемы создавали проблемы, подобные вашим. Поэтому почти уверен, что и в вашем варианте все можно сделать синхронно и без проблем.

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


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

Можно полюбопытствовать, что значит перекачка из 6 в 2 банка и почему введение тригера породит по 2 адреса не содержащих данных и что предполагалось делать, когда в банках нет данных? Я это спрашиваю, т.к. не могу припомнить в своей практике, чтобы синхронные схемы создавали проблемы, подобные вашим. Поэтому почти уверен, что и в вашем варианте все можно сделать синхронно и без проблем.

Ну каким то случайным образом в 6 банках распределились данные. Потом из 1-го 3-го и 5-го надо данные перекачать в один банк и соответственно из 2-го 4-го и 6-го в другой банк. Вот этот тригерочек и дает пустые данные в момент переключение одного из трех банков. Соответственно в каждом банке получается по два пустых адреса.

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


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

Во-первых, если Вы еще раз просто повторите то, что я не понял и попросил объяснить, то понятнее мне от этого не станет. Увы.

 

Во-вторых, какое бы там копирование ни было, у Вас явно либо проблема с архитектурой, либо с реализацией - ну не может синхронная схема являться причиной появления "пустых адресов". Это просто не возможно!

 

Мне зверски любопытно, что же такого Вы придумали, что при синхронной схеме пропуски появляются?

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

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


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

вообще (не вникая глубоко в суть) combinatorial loop убивается указанием констрейна (sdc) set_false_path на какой либо кусок этого loop, если, конечно, этого loop нельзя избежать. Очень часто при использовании асинхронных двухпортовых ОЗУ этот loop вылезает через путь read-while-write, возможно это и есть тот случай.

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


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

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

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

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

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

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

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

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

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

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