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

 
 
> Стартовая инициализация регистров., Есть ли необходимость задавать стартовое значение ?
Flip-fl0p
сообщение Sep 13 2017, 07:12
Сообщение #1


В поисках себя...
****

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



Приветствую Уважаемые посетители форума.
Возникло некоторое недопонимание процесса инициализации регистров.
Ни для кого не секрет, что по-умолчанию в ПЛИС от Intel(Altera) регистры инициализируются нулями.
Для примера возьмем простейший 8 разрядный регистр.
На технологической карте(то, как физически схема располагается в ПЛИС) этот регистр выглядит таким вот образом:


Тут все просто и понятно: входные буфера (ячейки ввода\вывода) и собственно сами регистры. Всё как и должно быть.
По желанию разработчик может задать регистрам стартовое значение.
Например на языке VHDL это можно сделать следующим образом:
Код
SIGNAL REG : STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0) := (OTHERS => '0');

В случае, если регистры инициализируются нулями, на технологической карте ничего не меняется.
Но вот если мы хотим инициализировать регистры единицами:
Код
SIGNAL REG : STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0) := (OTHERS => '1');

то технологическая карта выглядит совершенно по-другому:


Если копать ещё глубже и смотреть какие блоки физически задействованы(через Resource Property editor), то там ясно видно, что данные действительно проходят через дополнительный слой логики. Наиболее вероятно, что данный слой логики появился как раз для того, чтобы инициализировать регистры единицами.
Если честно, я бы и не обратил на это внимание если бы не отчет TimeQuest: регистр, который инициализируется единицами будет работать на меньшей частоте, чем регистр который инициализуиреся нулями.
В связи с этим возник закономерный вопрос, так ли необходима стартовая инициализация регистра ? Не правильнее ли разрабатывать проект таким образом, что после старта ПЛИС логика начального сброса (например сигнал locked от PLL) будет удерживать схему в сбросе, и как следствие система автоматически примет то начальное состояние, которая и должна.
Хотелось бы услышать мнение более опытных коллег.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gin
сообщение Sep 13 2017, 08:09
Сообщение #2


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

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



По поводу нужности или не нужности сброса:
Я придерживаюсь мнения, что он нужен всем без исключения триггерам в ПЛИС. Тогда можно говорить о том, что в каждый момент времени состояние и логика точно определены. Очень опасно сбрасывать только часть триггеров, а часть оставлять без сброса. Это может привести к непредсказуемой работе в дальнейшем.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Sep 13 2017, 08:12
Сообщение #3


В поисках себя...
****

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



Цитата(gin @ Sep 13 2017, 11:09) *
По поводу нужности или не нужности сброса:
Я придерживаюсь мнения, что он нужен всем без исключения триггерам в ПЛИС. Тогда можно говорить о том, что в каждый момент времени состояние и логика точно определены. Очень опасно сбрасывать только часть триггеров, а часть оставлять без сброса. Это может привести к непредсказуемой работе в дальнейшем.

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

Сообщение отредактировал Flip-fl0p - Sep 13 2017, 08:13
Go to the top of the page
 
+Quote Post
gin
сообщение Sep 13 2017, 08:29
Сообщение #4


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

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



Цитата(Flip-fl0p @ Sep 13 2017, 11:12) *
А если есть какой-то автомат, где, например, есть состояние IDLE, в котором значения всех регистров определены ? Тогда получается достаточно сбросить только автомат в начальное состояние, а он в свою очередь сбросит всю остальную схему.


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

Сообщение отредактировал gin - Sep 13 2017, 08:30
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Sep 13 2017, 08:55
Сообщение #5


Гуру
******

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



Цитата(gin @ Sep 13 2017, 11:29) *
Т.е. сбросом (и желательно асинхронным) вы гарантируете предсказуемость работы вашего устройства.

Не всегда и не везде. Замечу что асинхронный сброс все же требует синхронного снятия, о чем многие забывают. Опять же регистры пересинхронизаторы могут вызывать ошибки работы при заведении на них сброса.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Flip-fl0p   Стартовая инициализация регистров.   Sep 13 2017, 07:12
- - alexadmin   Цитата(Flip-fl0p @ Sep 13 2017, 10:1...   Sep 13 2017, 07:40
- - gin   Добрый день, где то в альтеровской документации чи...   Sep 13 2017, 07:45
- - andrew_b   del   Sep 13 2017, 07:53
|- - Flip-fl0p   ЦитатаНе первая тема, ЕМНИП, на эту тему. Кратко: ...   Sep 13 2017, 08:02
|- - andrew_b   Цитата(Flip-fl0p @ Sep 13 2017, 11:0...   Sep 13 2017, 08:18
||- - gin   Цитата(Golikov A. @ Sep 13 2017, 11:55) Н...   Sep 13 2017, 09:06
||- - Flip-fl0p   Цитата(Golikov A. @ Sep 13 2017, 11:55) Н...   Sep 13 2017, 09:07
|- - andrew_b   Цитата(gin @ Sep 13 2017, 11:09) По повод...   Sep 13 2017, 08:15
||- - Flip-fl0p   Цитата(andrew_b @ Sep 13 2017, 11:15) Есл...   Sep 13 2017, 08:18
|- - iosifk   Цитата(gin @ Sep 13 2017, 11:09) По повод...   Sep 13 2017, 09:17
- - Mad_max   У всех ПЛИСин есть скрытый сброс, все синхронные э...   Sep 13 2017, 09:05
- - gin   Вот как выглядит альтеровский триггер (в Arria 10)...   Sep 13 2017, 09:17
- - Golikov A.   ЦитатаКак появился locked - асинхронный сброс сним...   Sep 13 2017, 09:48
|- - gin   Цитата(Golikov A. @ Sep 13 2017, 12:48) Т...   Sep 13 2017, 10:37
|- - Flip-fl0p   ЦитатаТеперь еще можно добавить что в разных семей...   Sep 13 2017, 12:40
||- - Tausinov   Цитата(Flip-fl0p @ Sep 13 2017, 15:4...   Sep 13 2017, 12:54
|- - Jackov   Цитата(gin @ Sep 13 2017, 13:37) В момент...   Sep 13 2017, 12:41
|- - gin   Цитата(Jackov @ Sep 13 2017, 15:41) Тогда...   Sep 13 2017, 13:38
- - iosifk   Цитата(Flip-fl0p @ Sep 13 2017, 10:1...   Sep 13 2017, 09:58
|- - lembrix   Доводы против использования инициализации регистро...   Sep 13 2017, 10:19
- - Golikov A.   Вообще есть стандарт Кодreg [2:0] syn...   Sep 13 2017, 17:29


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 02:46
Рейтинг@Mail.ru


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