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

 
 
> Асинхронный сброс
gin
сообщение Oct 22 2013, 08:06
Сообщение #1


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

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



Всем привет! Возникли вопрсы по реализации асинхронного сброса в проекте. Посмотрел рекомендации Альтеры по этому поводу (http://quartushelp.altera.com/13.0/mergedProjects/verify/da/comp_file_rules_reset_external.htm) и реализовал вторую схему (два триггера на сброс которых приходит внешний асинхронный ресет, на входе D первого - лог. "1", выход первого идет на D вход второго, с выхода второго и берется сигнал для дальнейшего сброса схемы).
Запустил Таймквест - получил отрицательные слаки по recovery time. Насколько это опасно при для корректной работы ПЛИС, и как избавиться от этих слаков? Спасибо.

Сообщение отредактировал gin - Oct 22 2013, 08:07
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
Shivers
сообщение Oct 22 2013, 08:24
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



У вас один клок в дизайне?
Если несколько, то нужно сигнал сброса синхронизировать с каждым клоком отдельно по приведенной схеме, и в триггерах использовать сбросы синхронные используемому клоку, и чтобы домены не пересекались.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Oct 22 2013, 08:25
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(gin @ Oct 22 2013, 12:06) *
Всем привет! Возникли вопрсы по реализации асинхронного сброса в проекте. Посмотрел рекомендации Альтеры по этому поводу (http://quartushelp.altera.com/13.0/mergedProjects/verify/da/comp_file_rules_reset_external.htm) и реализовал вторую схему (два триггера на сброс которых приходит внешний асинхронный ресет, на входе D первого - лог. "1", выход первого идет на D вход второго, с выхода второго и берется сигнал для дальнейшего сброса схемы).
Запустил Таймквест - получил отрицательные слаки по recovery time. Насколько это опасно при для корректной работы ПЛИС, и как избавиться от этих слаков? Спасибо.

recovery time куда? Если на сброс самих триггеров-синхронизаторов сброса, то это в большинстве случаев нормально, и надо поставить false path на этот путь.
Go to the top of the page
 
+Quote Post
gin
сообщение Oct 22 2013, 08:31
Сообщение #4


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

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



Цитата(Shivers @ Oct 22 2013, 12:24) *
У вас один клок в дизайне?
Если несколько, то нужно сигнал сброса синхронизировать с каждым клоком отдельно по приведенной схеме, и в триггерах использовать сбросы синхронные используемому клоку, и чтобы домены не пересекались.


Клоков несколько, на каждый из них естественно своя схема сброса. Проблема только с одним клоком

Цитата(Timmy @ Oct 22 2013, 12:25) *
recovery time куда? Если на сброс самих триггеров-синхронизаторов сброса, то это в большинстве случаев нормально, и надо поставить false path на этот путь.


Не выполняется recovery time для всех триггеров в данном клоковом домене
Go to the top of the page
 
+Quote Post
Shivers
сообщение Oct 22 2013, 08:34
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Посмотрите внимательно, возможно вы сброс из одного клокового домена использовали в триггере из другого домена. Если вы что то еще хитрое творите со схемой сброса, проблема может и вообще в другом быть, в междоменных триггерах пересинхронизации, к примеру.
Если клоки между собой асинхронные, не забывайте между ними делать false_path, либо create_clock_groups -asynchronous.
Go to the top of the page
 
+Quote Post
gin
сообщение Oct 22 2013, 08:47
Сообщение #6


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

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



Цитата(Shivers @ Oct 22 2013, 12:34) *
Посмотрите внимательно, возможно вы сброс из одного клокового домена использовали в триггере из другого домена. Если вы что то еще хитрое творите со схемой сброса, проблема может и вообще в другом быть, в междоменных триггерах пересинхронизации, к примеру.
Если клоки между собой асинхронные, не забывайте между ними делать false_path, либо create_clock_groups -asynchronous.


Да, посмотрю повнимательней, мало ли что. Хотя в остальных местах, вроде проблем нет, false_path прописал, да и Таймквест подсвечиваем только пути от засинхронизированного на двух триггерах сброса, до всех регистров в одном клоковом домене. Я думаю, может быть Квартус физически не может обеспечить выполнение временных требований для этого сброса, хотя частота там не очень большая.
Go to the top of the page
 
+Quote Post
Shivers
сообщение Oct 22 2013, 08:54
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Очень может быть, ведь асинхронный ресет не резиновый - количество глобальных сбросов можно вычитать из даташита.

p.s. наврал с констрейном. set_clock_groups - так правильно
Go to the top of the page
 
+Quote Post
gin
сообщение Oct 22 2013, 10:15
Сообщение #8


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

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



Цитата(Shivers @ Oct 22 2013, 12:54) *
Очень может быть, ведь асинхронный ресет не резиновый - количество глобальных сбросов можно вычитать из даташита.

p.s. наврал с констрейном. set_clock_groups - так правильно


Квартус и клоки, и сбросы заводит на глобальные линии, так что их видимо пока хватает. Я попробовал уменьшить частоту со 155 до 145 МГц - при 145 recovery time удовлетворяет требованиям. Получается, что не хватает нескольких сотен пикосекунд. Мне кажется, что возможно задать ограничение на время между снятием сигнала сброса и фронтом клока для триггеров, только вопрос как?
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Oct 22 2013, 11:40
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(gin @ Oct 22 2013, 17:15) *
Квартус и клоки, и сбросы заводит на глобальные линии, так что их видимо пока хватает. Я попробовал уменьшить частоту со 155 до 145 МГц - при 145 recovery time удовлетворяет требованиям. Получается, что не хватает нескольких сотен пикосекунд. Мне кажется, что возможно задать ограничение на время между снятием сигнала сброса и фронтом клока для триггеров, только вопрос как?

Скорее всего у вас слишком большой fanout у цепи сброса, можно попытаться его уменьшить.В синплифае это делается директивой "syn_maxfan".
Go to the top of the page
 
+Quote Post
Shivers
сообщение Oct 22 2013, 11:44
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



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

p.s. Во! И как я забыл, ай яй: если вы не формируте сброс длительностью в один такт, то напишите на цепь сброса малтисайкл 2 или больше. Должно помочь.
Go to the top of the page
 
+Quote Post
gin
сообщение Oct 22 2013, 12:01
Сообщение #11


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

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



Цитата(Shivers @ Oct 22 2013, 15:44) *
Для борьбы с фанаутом можно попробовать включить дублирование регистров.
А лучше задублировать вручную. Завести второй, третий и т.д. сбросы в схему. Но тогда нужно наоборот -выключить автоудаление дублей.

p.s. Во! И как я забыл, ай яй: если вы не формируте сброс длительностью в один такт, то напишите на цепь сброса малтисайкл 2 или больше. Должно помочь.


Fan-out действительно большой - 1548, с другой стороны, Квартус завел сброс на глобальную линию, там не должно так сильно влиять. Дублировать не очень хочется - тогда ведь дубли займут другие глобальные линии, тем более в проекте еще будут другие клоки и сбросы.
Сброс у меня будет формироваться при отсутствии (пропадание) сигнала locked от PLL, не знаю сколько по времени, наверное гораздо дольше чем один такт)) Может мультицикл поможет, не приведете пример, как его описать?
Go to the top of the page
 
+Quote Post
Shivers
сообщение Oct 22 2013, 12:19
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



По идее, это пишется как то так (проверить не на чем): set_multicycle_path 2 -from (путь иерархии до выхода триггера, формирующего сброс) -to (клок)
Раньше эту команду можно было прямо в квартусе выбирать из выпадающего списка. Путь иерархии можно было искать по именам регистров после синтеза. Значение малтисайкла и клок тоже из выпадающего меню можно было выбрать. Я с квартусом года два уже не работал, забывать стал
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Oct 22 2013, 12:20
Сообщение #13


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

Группа: Свой
Сообщений: 180
Регистрация: 17-02-09
Из: Санкт-Петербург
Пользователь №: 45 001



Цитата(Shivers @ Oct 22 2013, 15:44) *
-выключить автоудаление дублей.

А где эта галочка?
Go to the top of the page
 
+Quote Post
Shivers
сообщение Oct 22 2013, 12:28
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Раньше за это специальная галочка отвечала, где то в настройках квартуса. Сейчас - не знаю. Гуглите. Вот, например >link<
Go to the top of the page
 
+Quote Post
gin
сообщение Oct 22 2013, 13:29
Сообщение #15


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

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



Цитата(Shivers @ Oct 22 2013, 16:19) *
По идее, это пишется как то так (проверить не на чем): set_multicycle_path 2 -from (путь иерархии до выхода триггера, формирующего сброс) -to (клок)
Раньше эту команду можно было прямо в квартусе выбирать из выпадающего списка. Путь иерархии можно было искать по именам регистров после синтеза. Значение малтисайкла и клок тоже из выпадающего меню можно было выбрать. Я с квартусом года два уже не работал, забывать стал


Прописал в констрейтах мультицикл, как вы и рекомендовали - помогло, спасибо!
Собственно вот что написал:
Код
set_multicycle_path -from [get_registers {arst_logic:arst_logic_inst|d2_a}] -to [get_clocks {clk_a}] -setup -end 2
set_multicycle_path -from [get_registers {arst_logic:arst_logic_inst|d2_a}] -to [get_clocks {clk_a}] -hold -end 2


Только теперь вопрос возник, насколько квартус всё это понял. Гарантирует ли он, что асинхронный сброс снимется со всех регистров одновременно? Не будет ли такой ситуации, что ресет с одной части регистров снимется перед фронтом клока, а с другой части - после фронта?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 11:45
Рейтинг@Mail.ru


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