реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Стартовая инициализация регистров., Есть ли необходимость задавать стартовое значение ?
iosifk
сообщение Sep 13 2017, 09:17
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 3 603
Регистрация: 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
Go to the top of the page
 
+Quote Post
gin
сообщение Sep 13 2017, 09:17
Сообщение #17


Частый гость
**

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



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

Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 13 2017, 09:48
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 206
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

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

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

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

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



Цитата(gin @ Sep 13 2017, 12:17) *
Вот как выглядит альтеровский триггер (в Arria 10)
Собственно видно, что у него есть только асинхронный сброс - поэтому квартус при всем желании не сможет асинхронно установить его в 1, только сбросить в 0
А вот синхронно можно установить как в 0, так и 1. Причем дополнительных слоев логики использовано для этого не будет. Все уже реализовано в самом триггере.


Теперь еще можно добавить что в разных семействах по разному, кажется в циклоне 4 было иначе. Так что выше сказанное я бы теперь переформулировал что надо следовать рекомендации производителя под конкретный чип.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Sep 13 2017, 09:58
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 3 603
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Flip-fl0p @ Sep 13 2017, 10:12) *
Приветствую Уважаемые посетители форума.
Возникло некоторое недопонимание процесса инициализации регистров.
Хотелось бы услышать мнение более опытных коллег.


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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
lembrix
сообщение Sep 13 2017, 10:19
Сообщение #20


Участник
*

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



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

Сообщение отредактировал lembrix - Sep 13 2017, 10:21
Go to the top of the page
 
+Quote Post
gin
сообщение Sep 13 2017, 10:37
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 156
Регистрация: 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) *
Разработка - это риск. Задача инженера - свести риск к минимуму


Хорошая фраза, даже в подпись добавить можно
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Sep 13 2017, 12:40
Сообщение #22


Местный
***

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



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

А таковы вообще присутствуют ?
Мне, например, ни разу не попадались....
Go to the top of the page
 
+Quote Post
Jackov
сообщение Sep 13 2017, 12:41
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 273
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(gin @ Sep 13 2017, 13:37) *
В момент асинхронного сброса у меня всегда присутствует синхронный. После снятия асинхронного - какое то время синхронный продолжает быть активным. Потом и он снимается.

Тогда зачем асинхронный сброс? Держите синхронный сброс какое-то количество тактов после стабилизации тактового сигнала, потом снимайте.
Я триггеры сбрасываю асинхронно, в качестве сигнала сброса применяю LOCK с PLL, пропущенный через два, иногда три, (для подавления метастабильностей) триггера. Тем самым и обеспечивается синхронное снятие сброса.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Sep 13 2017, 12:54
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 112
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(Flip-fl0p @ Sep 13 2017, 15:40) *
А таковы вообще присутствуют ?
Мне, например, ни разу не попадались....


ug1026-ultrascale-migration-guide.pdf - вот, например. Там есть раздел Use of Control Signals.
Go to the top of the page
 
+Quote Post
gin
сообщение Sep 13 2017, 13:38
Сообщение #25


Частый гость
**

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



Цитата(Jackov @ Sep 13 2017, 15:41) *
Тогда зачем асинхронный сброс? Держите синхронный сброс какое-то количество тактов после стабилизации тактового сигнала, потом снимайте.
Я триггеры сбрасываю асинхронно, в качестве сигнала сброса применяю LOCK с PLL, пропущенный через два, иногда три, (для подавления метастабильностей) триггера. Тем самым и обеспечивается синхронное снятие сброса.


Если пропадет клок, то без асинхронного сброса нельзя никак. То есть пропал клок - сбросили, снова появился - сначала сняли асинхронный сброс, потом синхронный. И работаем дальше
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 13 2017, 17:29
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 4 206
Регистрация: 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 триггера вообще одновременно со всеми видами сброса и установки.
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st September 2017 - 21:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01466 секунд с 7
ELECTRONIX ©2004-2016