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

Стартовая инициализация регистров.

По поводу нужности или не нужности сброса:

 

"Краткий курс" Часть 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

 

 

 

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


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

Вот как выглядит альтеровский триггер (в Arria 10)

Собственно видно, что у него есть только асинхронный сброс - поэтому квартус при всем желании не сможет асинхронно установить его в 1, только сбросить в 0

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

post-61682-1505294120_thumb.jpg

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


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

Как появился locked - асинхронный сброс снимается.

Тут я еще раз обращаю внимание что снимать его надо синхронно.

 

Просто неожиданно было натолкнуться на то, что инициализация регистров единицами добавляет лишний слой логики

В общем случае это не верно. Это происходит в альтере так как все элементы по старту в 0. А в ксалинксе есть возможность задать как 0, так и 1 по старту, поэтому там такого не происходит.

 

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

 

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

 

 

 

Вот как выглядит альтеровский триггер (в Arria 10)

Собственно видно, что у него есть только асинхронный сброс - поэтому квартус при всем желании не сможет асинхронно установить его в 1, только сбросить в 0

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

 

Теперь еще можно добавить что в разных семействах по разному, кажется в циклоне 4 было иначе. Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип.

 

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


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

Приветствую Уважаемые посетители форума.

Возникло некоторое недопонимание процесса инициализации регистров.

Хотелось бы услышать мнение более опытных коллег.

 

На самом деле вопрос сформулирован не правильно.

Разработка - это риск. Задача инженера - свести риск к минимуму. А значит по моему опыту необходимо строить проект следующим образом.

Все сигналы внутри проекта должны быть активны логической 1. И в том числе - сброс. Все регистры по исходному и по сбросу должны быть 0. Если нужна инверсия, то она делается на входе буфером или на выходе буфером. А все другие подходы увеличивают вероятность ошибки.

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


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

Доводы против использования инициализации регистров вместо сброса:

1. Только для реконфигурируемых схем, ASIC не поддерживается.

2. Нет гарантии поддержки инициализации всеми синтезаторами.

3. Нет возможности сброса схемы в процессе работы.

4. Нет задержки на время стабилизации клока от PLL.

5. Нет возможности задержки выхода схемы из сброса.

6. Не поддерживается ALTERA Partial Reconfiguration.

7. Некоторые стандарты требуют сброса в явном виде.

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

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


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

Тут я еще раз обращаю внимание что снимать его надо синхронно.

 

Да именно так. В момент асинхронного сброса у меня всегда присутствует синхронный. После снятия асинхронного - какое то время синхронный продолжает быть активным. Потом и он снимается.

В итоге получается - установка сброса асинхронная, а его снятие - синхронное.

 

Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип.

 

Вот тут 100 процентов согласен с вами.

 

 

Разработка - это риск. Задача инженера - свести риск к минимуму

 

Хорошая фраза, даже в подпись добавить можно

 

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


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

Теперь еще можно добавить что в разных семействах по разному, кажется в циклоне 4 было иначе. Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип.

А таковы вообще присутствуют ?

Мне, например, ни разу не попадались....

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


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

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

Тогда зачем асинхронный сброс? Держите синхронный сброс какое-то количество тактов после стабилизации тактового сигнала, потом снимайте.

Я триггеры сбрасываю асинхронно, в качестве сигнала сброса применяю LOCK с PLL, пропущенный через два, иногда три, (для подавления метастабильностей) триггера. Тем самым и обеспечивается синхронное снятие сброса.

 

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


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

А таковы вообще присутствуют ?

Мне, например, ни разу не попадались....

 

ug1026-ultrascale-migration-guide.pdf - вот, например. Там есть раздел Use of Control Signals.

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


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

Тогда зачем асинхронный сброс? Держите синхронный сброс какое-то количество тактов после стабилизации тактового сигнала, потом снимайте.

Я триггеры сбрасываю асинхронно, в качестве сигнала сброса применяю LOCK с PLL, пропущенный через два, иногда три, (для подавления метастабильностей) триггера. Тем самым и обеспечивается синхронное снятие сброса.

 

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

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


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

Вообще есть стандарт

 

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 триггера вообще одновременно со всеми видами сброса и установки.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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