Mad_kvmg 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба Кому-нибудь удавалось решить проблему появления сего явления, без изменения схемы? Указание в настройках синтезатора mux extraction "no" не помогло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gothard 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба Кому-нибудь удавалось решить проблему появления сего явления А можно описать подробнее эту проблему для непосвященных? Пока что мне кажется, что проблема в HDL описании :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба А можно описать подробнее эту проблему для непосвященных? Пока что мне кажется, что проблема в 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 ругается не помогло. Хотелось бы указать этот атрибут в блоке, который выше по иерархии. То есть, есть блок который включает в себя три блока цепи которых и организуют этот комбинационный цикл. Как вот в этом блоке, стоящем выше по иерархии, прописать этот атрибут? Или может быть я вообще не в том направлении мыслю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 2 марта, 2009 Опубликовано 2 марта, 2009 (изменено) · Жалоба :) Обычно это не проблема синтезатора, а проблема кода и если синтезатор их там нашел, то надо править код. Судя по всему, Xilinx нашел баг в вашем коде. Так что выкладывайте код (схему) и полное собщение синтезатора. Иначе помочь Вам не получится. Изменено 2 марта, 2009 пользователем Sefo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба :) Обычно это не проблема синтезатора, а проблема кода и если синтезатор их там нашел, то надо править код. Так что выкладывайте код (схему) и полное собщение синтезатора. Иначе помочь Вам не получится. Эх схема огромная, и если выложить кусок на который ругается, то будет непонятно что там к чему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба А функциональность блоков в данном случае не важна. По сообщению Xilinx там нужно будет проследить почему образовался combinatorial loop. Вам помогут понять почему он образовался, ну а исправлять будете сами. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gothard 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба Или может быть я вообще не в том направлении мыслю? Вроде бы речь идет о петле комбинационной логики - т.е. у вас в числе аргументов логической цепочки присутствует ее результат - такое не допустимо кроме экзотичных случаев (я таких не знаю но вдруг...). Такое ощущение, что у вас отсутствует синхронный процесс / триггер на выходе логики или банально забыли сделать процесс синхронным (отсутствует условие фронта в начале). Покажите больше кода - к чему вы собрались применять этот атрибут? Попробуйте задать атрибут глобально для всего проекта - что-то изменится? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 2 марта, 2009 Опубликовано 2 марта, 2009 (изменено) · Жалоба Вроде бы речь идет о петле комбинационной логики - т.е. у вас в числе аргументов логической цепочки присутствует ее результат - такое не допустимо кроме экзотичных случаев (я таких не знаю но вдруг...). Такое ощущение, что у вас отсутствует синхронный процесс / триггер на выходе логики или банально забыли сделать процесс синхронным (отсутствует условие фронта в начале). Покажите больше кода - к чему вы собрались применять этот атрибут? Попробуйте задать атрибут глобально для всего проекта - что-то изменится? Ну да, процесс экзотический. Есть не детерминированное распределение данных по шести банкам памяти, далее из этих шести банков надо перегнать данные в два банка . Есть автомат на 25 состояний и мультиплексор, если в схеме не предусматривать состояния, когда в этих шести банках нету данных, то схема разводится нормально. А вот если добавить предусмотренные такого случая, то тут то и происходит калапс. Автомат выставляет сигнал, а результат действия по выставлению этого сигнала уже присутствует на входе автомата, тут то наверное и образуется эта комбинационная петля. Изменено 2 марта, 2009 пользователем Mad_max Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Gothard 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба Автомат выставляет сигнал, а результат действия по выставлению этого сигнала уже присутствует на входе автомата, тут то наверное и образуется эта комбинационная петля. Ну тогда никакие настройки не спасут. Разделяйте триггером P.S. Но имейте ввиду что у вас может вся логика "поехать" и придется решить задачу не в лоб а ухищиряться. Удачи в "разрубании" петли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба У Вас схема синхронная? Атомат синхронный? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба У Вас схема синхронная? Атомат синхронный? нет не синхронный, и выходы автомата не регистровые, а комбинационные. Ну тогда никакие настройки не спасут. Разделяйте триггером P.S. Но имейте ввиду что у вас может вся логика "поехать" и придется решить задачу не в лоб а ухищиряться. Удачи в "разрубании" петли. Поплывет это точно, я даже знаю как. При перекачки из 6 в 2 из-за этого триггера, в этих двух банках будут по два адреса не содержащих данных. От этого собственно и уходил, и нарвался вот на эту петлю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба Поплывет это точно, я даже знаю как. При перекачки из 6 в 2 из-за этого триггера, в этих двух банках будут по два адреса не содержащих данных. От этого собственно и уходил, и нарвался вот на эту петлю. Можно полюбопытствовать, что значит перекачка из 6 в 2 банка и почему введение тригера породит по 2 адреса не содержащих данных и что предполагалось делать, когда в банках нет данных? Я это спрашиваю, т.к. не могу припомнить в своей практике, чтобы синхронные схемы создавали проблемы, подобные вашим. Поэтому почти уверен, что и в вашем варианте все можно сделать синхронно и без проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба Можно полюбопытствовать, что значит перекачка из 6 в 2 банка и почему введение тригера породит по 2 адреса не содержащих данных и что предполагалось делать, когда в банках нет данных? Я это спрашиваю, т.к. не могу припомнить в своей практике, чтобы синхронные схемы создавали проблемы, подобные вашим. Поэтому почти уверен, что и в вашем варианте все можно сделать синхронно и без проблем. Ну каким то случайным образом в 6 банках распределились данные. Потом из 1-го 3-го и 5-го надо данные перекачать в один банк и соответственно из 2-го 4-го и 6-го в другой банк. Вот этот тригерочек и дает пустые данные в момент переключение одного из трех банков. Соответственно в каждом банке получается по два пустых адреса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 5 марта, 2009 Опубликовано 5 марта, 2009 (изменено) · Жалоба Во-первых, если Вы еще раз просто повторите то, что я не понял и попросил объяснить, то понятнее мне от этого не станет. Увы. Во-вторых, какое бы там копирование ни было, у Вас явно либо проблема с архитектурой, либо с реализацией - ну не может синхронная схема являться причиной появления "пустых адресов". Это просто не возможно! Мне зверски любопытно, что же такого Вы придумали, что при синхронной схеме пропуски появляются? Изменено 5 марта, 2009 пользователем Sefo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 5 марта, 2009 Опубликовано 5 марта, 2009 · Жалоба вообще (не вникая глубоко в суть) combinatorial loop убивается указанием констрейна (sdc) set_false_path на какой либо кусок этого loop, если, конечно, этого loop нельзя избежать. Очень часто при использовании асинхронных двухпортовых ОЗУ этот loop вылезает через путь read-while-write, возможно это и есть тот случай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться