BlackOps 0 10 августа, 2010 Опубликовано 10 августа, 2010 (изменено) · Жалоба Значит так, кода много будет вставлять объясню так. Ест несколько регистров (флип-флопов с Enable) которые контролируются мультиплексорами. Ну и есть автомат управления который всем етим управляет через мультиплексоры, т.е. читает значения выводов регистров, и в зависимости от етих значений переходит в соответствующие положения и изменяет ети регистры..опять таки не напрямую конечноже а через мультиплексоры. Так вот, когда я все ето дело симуировал, а потом реализовывал на EDK 9.1 то на чипе потом все работало так как хотел. А теперь, с версией 10.1 у меня какие то странности! А именно: Есть например один регистр, и автомат управления следит когда его вывод будет равен 768..в етом случае автомат управления должен записать в него 0 через мультиплексор ну и сделать другие определенные действия. Но етого не происxодит! т.к. после того как вывод регистра достигает значения 13 он сбрасывается на 0! Ну и соответственно автомат управления не переходит в нужное состояние которое достигается после значения 768. Странное явление, и повторю еще раз именно с версией софта Xilinx 10.1 !! Ест какие соображения? И еще...регистр етот 10 битовый! И что интересно, у меня еще есть несколько регистров которые примерно так работают..но они не сбрасываются раньше времени и с ними все нормально... а они примерно 5-6 бит... т.е. етот самый длинный как бы.. может сдесь что я недоглядел?... хотя чтоже тут особенного... спасибо Изменено 10 августа, 2010 пользователем BlackOps Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewkrot 0 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба Пока не выложите хоть кусок кода никто Вам не поможет. Мое мнение = асинхронщина. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба добавлю/поясню к предыдущему сообщению - нужна схема или описание на HDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 10 августа, 2010 Опубликовано 10 августа, 2010 (изменено) · Жалоба ок ну вот фрагмент мультиплексора с регистром: -- Row counter register row_counter_reg: entity work.dffn generic map ( n => 10 ) port map ( clk => clk, en => row_cnt_reg_en, rst => rst, d => row_cnt_reg_in, q => row_cnt_reg_out ); -- Row counter register control Mux with row_cnt_inc select row_cnt_reg_in <= row_cnt_reg_out when "00", row_cnt_reg_out + 1 when "01", "0000000000" when "10", (others => '0') when others; для управления использую row_cnt_reg_en и row_cnt_inc. в поле чувствительности процесса автомата управления сигнал row_cnt_reg_out, в зависимости от его значения поднимаю row_cnt_reg_en и ставлю нужное значение на row_cnt_inc ну а еслиб асинхронщина была то и с версией софта 9.1 проблемы бы были.. п.с. автомат управления работает на том же клоке что и регистры Изменено 10 августа, 2010 пользователем BlackOps Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewkrot 0 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба А что в качестве клока используете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tema-electric 0 10 августа, 2010 Опубликовано 10 августа, 2010 (изменено) · Жалоба Может у вас настройки сред разные? Одна соптимизировала, другая нет ... В одной фиттер впихнул ненужное, а в другой не впихнул. Сравните количество ресурсов потребляемое в разных средах в конечном виде и делайте выводы с помощью rtl вьювера схем, или Technology map вьювера. Но второе - это уже жескач конечно. :) Ещё как дополнение, если уж совсем всё плохо и не понятно, то можно провести моделирование схемы (rtl) и затем при необходимости конечную (gate level). ПС: хотелось бы увидеть побольше кода. Не совсем понятно, что за типы вы там используете .... вектора std_logic или signed, unsigned. Может ISE арифметику вам по разному синтезировал ... Изменено 10 августа, 2010 пользователем tema-electric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба клок, ну ето уже системный клок на котором все работает, стабильный нормальный..с етим проблем нет. да уж...надо будет может в настройках поковыряться...тока знать бы что именно могло бы быть связано именно с етим... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tema-electric 0 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба да уж...надо будет может в настройках поковыряться...тока знать бы что именно могло бы быть связано именно с етим... Выше там добавил в месадж ;). Увы не знаток ISE. Если найдете разницу в утилзации ресурсов количество регистров/логических ячеек. То смотреть надо на опции синтезатора и фиттера ... И повырубать или повключать всякого рода оптимизации, как они у вас были. Если там всё гуд ... синтезатор с его репликацией логики мог увеличить вам быстродествие ))). Стратегию синтеза ... площадь, скорость, баланс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба значит так...а данные простые стд_логик_вектор... ничего особенного....да и кодирую я всегда в таком стиле, поменьше разных заморочек а больше на регистровом уровне... разве что +/- оставляю как есть...а остальное нет. поетому незнаю почему тут такое дело...ну и как я уже говорил в аналогичном виде у меня и другие регистры работают которые меньше размером...и проблем никаких... да весь код у меня такоы...разве что автомат управления большой который остальными сигналами манипулирует...а в обшем всеми етими парами регистр-мультиплексор управляет только етими двумя сигналами. вот уже в логе синтеза обнаружил: INFO:Xst:2117 - HDL ADVISOR - Mux Selector <row_cnt_inc> of Case statement line 0 was re-encoded using one-hot encoding. The case statement will be optimized (default statement optimization), but this optimization may lead to design initialization problems. To ensure the design works safely, you can: - add an 'INIT' attribute on signal <row_cnt_inc> (optimization is then done without any risk) и еще ето: Using one-hot encoding for signal <row_cnt_inc>. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tema-electric 0 10 августа, 2010 Опубликовано 10 августа, 2010 (изменено) · Жалоба значит так...а данные простые стд_логик_вектор... ничего особенного....да и кодирую я всегда в таком стиле, поменьше разных заморочек а больше на регистровом уровне... разве что +/- оставляю как есть...а остальное нет. поетому незнаю почему тут такое дело...ну и как я уже говорил в аналогичном виде у меня и другие регистры работают которые меньше размером...и проблем никаких... да весь код у меня такоы...разве что автомат управления большой который остальными сигналами манипулирует...а в обшем всеми етими парами регистр-мультиплексор управляет только етими двумя сигналами. Отступление: Для std_logic_vector, лучше вообще не использовать арифметику. Нервы целей будут. Ибо он изначально непонятно какой ... то-ли знаковый то-ли беззнаковый. Не пользую даже в ситуациях "ничего особенного". signed и unsigned такие же вектора, только фокусов не будет. И конвертятся они в std_logci_vector и обратно простым приведением типов. Мне кажется тот код который вы привели, он работает нормально. У вас приходит row_cnt_inc на сброс. И тут вы выбрали способ кодирование состояний автомата не очень хорошо и оно может быть не совпадает с предыдущей версией ISE. А выбор способа кодирования определяет оптимизацию по утилизации регистров и быстродействие автомата. Исследуйте процесс формирования row_cnt_inc от регистров состояния автомата в rtl вьювире схемы. Если там целый табор этих регистров, значит вам просто не хватает быстродействия. ПС: вы так ничего и не сказали про утилизацию ресурсов в разных версиях ISE. ----------------- Ну вот и вылазят догадки :) Using one-hot encoding for signal <row_cnt_inc>. Изменено 10 августа, 2010 пользователем tema-electric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба вот уже в логе синтеза обнаружил: INFO:Xst:2117 - HDL ADVISOR - Mux Selector <row_cnt_inc> of Case statement line 0 was re-encoded using one-hot encoding. The case statement will be optimized (default statement optimization), but this optimization may lead to design initialization problems. To ensure the design works safely, you can: - add an 'INIT' attribute on signal <row_cnt_inc> (optimization is then done without any risk) и еще ето: Using one-hot encoding for signal <row_cnt_inc>. Если хочется победить Xst:2117 - HDL ADVISOR, то попробуйте заменить (others => '0') when others на (others => '0') when "11". При использовании case отказ от when others => мне помог (в ISE 10.1SP3) избавиться от этого сообщения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба Есть например один регистр, и автомат управления следит когда его вывод будет равен 768..в етом случае автомат управления должен записать в него 0 через мультиплексор ну и сделать другие определенные действия. Но етого не происxодит! т.к. после того как вывод регистра достигает значения 13 он сбрасывается на 0! Ну и соответственно автомат управления не переходит в нужное состояние которое достигается после значения 768. Странное явление, и повторю еще раз именно с версией софта Xilinx 10.1 !! Узнали что не работает с помощью ChipScope? Что показывает временное моделирование? Какой результат в 12 ой версии исе? вот уже в логе синтеза обнаружил: и еще ето: Ничего страшного в этом нет, исе увидел что два бита нужно подать на отдельную логику, из которой нужно сформировать сигнал сброса и входного переноса и изменил кодирование этих двух бит, что бы выиграть в этом месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tema-electric 0 10 августа, 2010 Опубликовано 10 августа, 2010 (изменено) · Жалоба попробуйте заменить (others => '0') when others на (others => '0') when "11". А на сколько правомерна такая замена? std_logic кодируется не только по 0 и 1. У него 9 значений. И все остальные получатся неопределенными. Если я не ошибаюсь конечно. И по идее правильней бы всё это выглядело как-то так ... -- Row counter register control Mux with row_cnt_inc select row_cnt_reg_in <= row_cnt_reg_out when "00", row_cnt_reg_out + 1 when "01", (others => '0') when "10", (others => '0') when "11", (others => '-') when others; Изменено 10 августа, 2010 пользователем tema-electric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба А на сколько правомерна такая замена? std_logic кодируется не только по 0 и 1. У него 9 значений. И все остальные получатся неопределенными. Если я не ошибаюсь конечно. Для моделирования замена не равнозначная (тут, по идеи, на others надо ловушки вешать, явно описав все правильные состояния),.. а вот для синтеза - полностью эквивалентная. (Вообще-то для case'ов я использовал перечисляемые типы, и соответственно явно указывал все возможные комбинации. Если же вместо одной из комбинация написать others, то появляется сей неприятный XST Info.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BlackOps 0 10 августа, 2010 Опубликовано 10 августа, 2010 · Жалоба значит так..такое кодирование попробовал: -- Row counter register control Mux with row_cnt_inc select row_cnt_reg_in <= row_cnt_reg_out when "00", row_cnt_reg_out + 1 when "01", (others => '0') when "10", (others => '0') when "11", (others => '-') when others; тоже не сработало... тоже самое. проверяю в ЧипСкопе... той машини где была версия 9.1 установлена у меня уже нету...только тот код который там исправно работал использую тут... как видели синтесайзер еще советовал использовать ИНИТ атрибут... посмотрю тепер стоит ли...или всетаки еще че в кодировании поменять. а ИНИТ тут описан: http://www.xilinx.com/itp/xilinx7/books/da...cgd0100_61.html вобшем покопаюсь еще посмотрю что можно изменить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться