|
Стартовая инициализация регистров., Есть ли необходимость задавать стартовое значение ? |
|
|
|
Sep 13 2017, 09:17
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(gin @ Sep 13 2017, 11:09)  По поводу нужности или не нужности сброса: "Краткий курс" Часть 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
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Sep 13 2017, 09:17
|

Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 17-12-10
Пользователь №: 61 682

|
Вот как выглядит альтеровский триггер (в Arria 10) Собственно видно, что у него есть только асинхронный сброс - поэтому квартус при всем желании не сможет асинхронно установить его в 1, только сбросить в 0 А вот синхронно можно установить как в 0, так и 1. Причем дополнительных слоев логики использовано для этого не будет. Все уже реализовано в самом триггере.
Эскизы прикрепленных изображений
|
|
|
|
|
Sep 13 2017, 09:48
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата Как появился locked - асинхронный сброс снимается. Тут я еще раз обращаю внимание что снимать его надо синхронно. Цитата Просто неожиданно было натолкнуться на то, что инициализация регистров единицами добавляет лишний слой логики В общем случае это не верно. Это происходит в альтере так как все элементы по старту в 0. А в ксалинксе есть возможность задать как 0, так и 1 по старту, поэтому там такого не происходит. Так же от архитектуры зависит и предпочитаемый сброс. В ксалинксе изначально элементы настроены на синхронный сброс и установку, при этом асинхронный держат только сброс. У альтеры ситуация обратная, синхронно они вроде только сбрасываются, зато имеют асинхронный сет и ресет. И как следствие альтера тянет специальную сеть асинхронного сброса, которую не тянет ксалинкс (вроде бы). Так что я бы все же рекомендовал следовать наставлениям венедра. Альтера предлагает сбрасывать все и асинхронно, ксалинкс рекомендует сбрасывать только что надо и синхронно, если я правильно помню. Цитата(gin @ Sep 13 2017, 12:17)  Вот как выглядит альтеровский триггер (в Arria 10) Собственно видно, что у него есть только асинхронный сброс - поэтому квартус при всем желании не сможет асинхронно установить его в 1, только сбросить в 0 А вот синхронно можно установить как в 0, так и 1. Причем дополнительных слоев логики использовано для этого не будет. Все уже реализовано в самом триггере. Теперь еще можно добавить что в разных семействах по разному, кажется в циклоне 4 было иначе. Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип.
|
|
|
|
|
Sep 13 2017, 09:58
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Flip-fl0p @ Sep 13 2017, 10:12)  Приветствую Уважаемые посетители форума. Возникло некоторое недопонимание процесса инициализации регистров. Хотелось бы услышать мнение более опытных коллег. На самом деле вопрос сформулирован не правильно. Разработка - это риск. Задача инженера - свести риск к минимуму. А значит по моему опыту необходимо строить проект следующим образом. Все сигналы внутри проекта должны быть активны логической 1. И в том числе - сброс. Все регистры по исходному и по сбросу должны быть 0. Если нужна инверсия, то она делается на входе буфером или на выходе буфером. А все другие подходы увеличивают вероятность ошибки.
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Sep 13 2017, 10:19
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 13-04-17
Из: Зеленоград
Пользователь №: 96 508

|
Доводы против использования инициализации регистров вместо сброса: 1. Только для реконфигурируемых схем, ASIC не поддерживается. 2. Нет гарантии поддержки инициализации всеми синтезаторами. 3. Нет возможности сброса схемы в процессе работы. 4. Нет задержки на время стабилизации клока от PLL. 5. Нет возможности задержки выхода схемы из сброса. 6. Не поддерживается ALTERA Partial Reconfiguration. 7. Некоторые стандарты требуют сброса в явном виде.
Сообщение отредактировал lembrix - Sep 13 2017, 10:21
|
|
|
|
|
Sep 13 2017, 10:37
|

Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 17-12-10
Пользователь №: 61 682

|
Цитата(Golikov A. @ Sep 13 2017, 12:48)  Тут я еще раз обращаю внимание что снимать его надо синхронно. Да именно так. В момент асинхронного сброса у меня всегда присутствует синхронный. После снятия асинхронного - какое то время синхронный продолжает быть активным. Потом и он снимается. В итоге получается - установка сброса асинхронная, а его снятие - синхронное. Цитата(Golikov A. @ Sep 13 2017, 12:48)  Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип. Вот тут 100 процентов согласен с вами. Цитата(iosifk @ Sep 13 2017, 12:58)  Разработка - это риск. Задача инженера - свести риск к минимуму Хорошая фраза, даже в подпись добавить можно
|
|
|
|
|
Sep 13 2017, 12:40
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата Теперь еще можно добавить что в разных семействах по разному, кажется в циклоне 4 было иначе. Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип. А таковы вообще присутствуют ? Мне, например, ни разу не попадались....
|
|
|
|
|
Sep 13 2017, 12:41
|
Местный
  
Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485

|
Цитата(gin @ Sep 13 2017, 13:37)  В момент асинхронного сброса у меня всегда присутствует синхронный. После снятия асинхронного - какое то время синхронный продолжает быть активным. Потом и он снимается. Тогда зачем асинхронный сброс? Держите синхронный сброс какое-то количество тактов после стабилизации тактового сигнала, потом снимайте. Я триггеры сбрасываю асинхронно, в качестве сигнала сброса применяю LOCK с PLL, пропущенный через два, иногда три, (для подавления метастабильностей) триггера. Тем самым и обеспечивается синхронное снятие сброса.
|
|
|
|
|
Sep 13 2017, 12:54
|
Частый гость
 
Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795

|
Цитата(Flip-fl0p @ Sep 13 2017, 15:40)  А таковы вообще присутствуют ? Мне, например, ни разу не попадались.... ug1026-ultrascale-migration-guide.pdf - вот, например. Там есть раздел Use of Control Signals.
|
|
|
|
|
Sep 13 2017, 13:38
|

Частый гость
 
Группа: Участник
Сообщений: 183
Регистрация: 17-12-10
Пользователь №: 61 682

|
Цитата(Jackov @ Sep 13 2017, 15:41)  Тогда зачем асинхронный сброс? Держите синхронный сброс какое-то количество тактов после стабилизации тактового сигнала, потом снимайте. Я триггеры сбрасываю асинхронно, в качестве сигнала сброса применяю LOCK с PLL, пропущенный через два, иногда три, (для подавления метастабильностей) триггера. Тем самым и обеспечивается синхронное снятие сброса. Если пропадет клок, то без асинхронного сброса нельзя никак. То есть пропал клок - сбросили, снова появился - сначала сняли асинхронный сброс, потом синхронный. И работаем дальше
|
|
|
|
|
Sep 13 2017, 17:29
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Вообще есть стандарт Код 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 триггера вообще одновременно со всеми видами сброса и установки.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|