iosifk 3 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба По поводу нужности или не нужности сброса: "Краткий курс" Часть 11, Литература: 11.1. Synchronous Resets? Asynchronous Resets? I am so confused! How will I ever know which to use? Clifford E. Cummings, Don Mills. www.sunburst-design.com 11.2. Get Smart About Reset: Think Local, Not Global. WP272 (v1.0) January 8, 2008 www.xilinx.com Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба Вот как выглядит альтеровский триггер (в Arria 10) Собственно видно, что у него есть только асинхронный сброс - поэтому квартус при всем желании не сможет асинхронно установить его в 1, только сбросить в 0 А вот синхронно можно установить как в 0, так и 1. Причем дополнительных слоев логики использовано для этого не будет. Все уже реализовано в самом триггере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба Как появился locked - асинхронный сброс снимается. Тут я еще раз обращаю внимание что снимать его надо синхронно. Просто неожиданно было натолкнуться на то, что инициализация регистров единицами добавляет лишний слой логики В общем случае это не верно. Это происходит в альтере так как все элементы по старту в 0. А в ксалинксе есть возможность задать как 0, так и 1 по старту, поэтому там такого не происходит. Так же от архитектуры зависит и предпочитаемый сброс. В ксалинксе изначально элементы настроены на синхронный сброс и установку, при этом асинхронный держат только сброс. У альтеры ситуация обратная, синхронно они вроде только сбрасываются, зато имеют асинхронный сет и ресет. И как следствие альтера тянет специальную сеть асинхронного сброса, которую не тянет ксалинкс (вроде бы). Так что я бы все же рекомендовал следовать наставлениям венедра. Альтера предлагает сбрасывать все и асинхронно, ксалинкс рекомендует сбрасывать только что надо и синхронно, если я правильно помню. Вот как выглядит альтеровский триггер (в Arria 10) Собственно видно, что у него есть только асинхронный сброс - поэтому квартус при всем желании не сможет асинхронно установить его в 1, только сбросить в 0 А вот синхронно можно установить как в 0, так и 1. Причем дополнительных слоев логики использовано для этого не будет. Все уже реализовано в самом триггере. Теперь еще можно добавить что в разных семействах по разному, кажется в циклоне 4 было иначе. Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба Приветствую Уважаемые посетители форума. Возникло некоторое недопонимание процесса инициализации регистров. Хотелось бы услышать мнение более опытных коллег. На самом деле вопрос сформулирован не правильно. Разработка - это риск. Задача инженера - свести риск к минимуму. А значит по моему опыту необходимо строить проект следующим образом. Все сигналы внутри проекта должны быть активны логической 1. И в том числе - сброс. Все регистры по исходному и по сбросу должны быть 0. Если нужна инверсия, то она делается на входе буфером или на выходе буфером. А все другие подходы увеличивают вероятность ошибки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lembrix 0 13 сентября, 2017 Опубликовано 13 сентября, 2017 (изменено) · Жалоба Доводы против использования инициализации регистров вместо сброса: 1. Только для реконфигурируемых схем, ASIC не поддерживается. 2. Нет гарантии поддержки инициализации всеми синтезаторами. 3. Нет возможности сброса схемы в процессе работы. 4. Нет задержки на время стабилизации клока от PLL. 5. Нет возможности задержки выхода схемы из сброса. 6. Не поддерживается ALTERA Partial Reconfiguration. 7. Некоторые стандарты требуют сброса в явном виде. Изменено 13 сентября, 2017 пользователем lembrix Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба Тут я еще раз обращаю внимание что снимать его надо синхронно. Да именно так. В момент асинхронного сброса у меня всегда присутствует синхронный. После снятия асинхронного - какое то время синхронный продолжает быть активным. Потом и он снимается. В итоге получается - установка сброса асинхронная, а его снятие - синхронное. Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип. Вот тут 100 процентов согласен с вами. Разработка - это риск. Задача инженера - свести риск к минимуму Хорошая фраза, даже в подпись добавить можно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба Теперь еще можно добавить что в разных семействах по разному, кажется в циклоне 4 было иначе. Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип. А таковы вообще присутствуют ? Мне, например, ни разу не попадались.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба В момент асинхронного сброса у меня всегда присутствует синхронный. После снятия асинхронного - какое то время синхронный продолжает быть активным. Потом и он снимается. Тогда зачем асинхронный сброс? Держите синхронный сброс какое-то количество тактов после стабилизации тактового сигнала, потом снимайте. Я триггеры сбрасываю асинхронно, в качестве сигнала сброса применяю LOCK с PLL, пропущенный через два, иногда три, (для подавления метастабильностей) триггера. Тем самым и обеспечивается синхронное снятие сброса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tausinov 0 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба А таковы вообще присутствуют ? Мне, например, ни разу не попадались.... ug1026-ultrascale-migration-guide.pdf - вот, например. Там есть раздел Use of Control Signals. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба Тогда зачем асинхронный сброс? Держите синхронный сброс какое-то количество тактов после стабилизации тактового сигнала, потом снимайте. Я триггеры сбрасываю асинхронно, в качестве сигнала сброса применяю LOCK с PLL, пропущенный через два, иногда три, (для подавления метастабильностей) триггера. Тем самым и обеспечивается синхронное снятие сброса. Если пропадет клок, то без асинхронного сброса нельзя никак. То есть пропал клок - сбросили, снова появился - сначала сняли асинхронный сброс, потом синхронный. И работаем дальше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 сентября, 2017 Опубликовано 13 сентября, 2017 · Жалоба Вообще есть стандарт reg [2:0] synced_reset_n; wire s_reset_n; assign s_reset_n = synced_reset_n[2]; always @(posedge clk or negedge reset_n) begin if(reset_n == 1'b0) synced_reset_n <= 3'b000; else synced_reset_n <= {synced_reset_n[1:0], 1'b1}; end s_reset_n - синхронное снятие, асинхронная установка, плюс гарантированная пауза состояния сброса. посмотрел описание библиотек ксалинкса, нашел все варианты и синхронного, и асинхронного, и снятия, и установки%) В спартане 6 IO триггера вообще одновременно со всеми видами сброса и установки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться