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

 
 
> Reset для Xilinx DCM и флаг LOCKED
makc
сообщение May 23 2006, 05:46
Сообщение #1


Гуру
******

Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904



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

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

Мне в голову пришла идея, что можно реализовать схему сброса DCM, которая будет тактироваться от внешнего тактового сигнала и будет производить сброс DCM в самом начале (после конфигурации) и при пропадании сигнала LOCKED. При этом для того, чтобы избежать неизвестного состояния выходных тактовых сигналов DCM можно с помощью LOCKED управлять буферами BUFGMUX (например BUFGCE). Это теоретически должно позволить остановить на требуемое время ту часть схемы, которая тактируется от DCM.

Но при этом возникает один маленький вопрос - для DCM нужен сигнал обратной связи. Брать его с выхода BUFGCE нельзя, т.к. этот сигнал нужен еще до того, как будет LOCKED, но в то же время нужно его брать с выхода BUFGCE, т.е. именно для этого сигнала нужно устранить clock skew.

В общем я в сомнениях... Может кто сталкивался с подобной проблемой? Какие варианты?


--------------------
BR, Makc
В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
leevv
сообщение May 24 2006, 18:32
Сообщение #2


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

Группа: Свой
Сообщений: 100
Регистрация: 4-01-05
Пользователь №: 1 799



Цитата(makc @ May 23 2006, 01:46) *
Раньше использовал DCM и не особо не задумывался, что LOCKED может пропасть и т.п. Но на всякий случай использовал его для выработки сигнала сброса той части схемы, которая тактировалась с выхода DCM.

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


Ja obychno delaju interface block otdel'no i pitaju ego kakim nibud' drugim stabil'nym clockom ili voobshe async signalami ot processora. Togda system clk mogno resetit' skol'ko ugodno i prietom sodergimoe registrov ostanetsja neizmennym. Krome togo sushestvuet reshenie kogda registrovyj massive realizuetsja na SRL (xilinx, smotri naprimer GSRD ref design). Togda po svoej suti reset ne smoget sbrosit' sodergimoe.
Ny eto esli eshe ne pozdno menjat' design.

Po povodu DCM ja v svoe vrema silno naelsja s nimi osobenno s VirtexE, u kotoryh sboj moget proizojty, no pri etom Lock stoit kak geroj. Chashe dage ne sboj, a ne pravilnyj setup (posle configuracii i nachal'nogo reset-a ). Prishlos' ispolzovat' druguju, kosvennuju informaciju v dopolnenii s LOCK o tom chto DCM pora resetit'.
V Virtex2 DCM chutochku podpravili. No vse ravno plohaja situacija moget proizojty.

V moem sluchae pomog imenno timeout (watchdog), kotoryj legko sdelat' s pomoshju pseudo schetchika.
Recomenduju. Ochen' kompactno poluchaetsja. Vyhod shetchika - pulse raz v skolko-to ms. Ego potom nugno ob'edinit' po AND s nLOCK signalom.




---------------------------------------------------------------------------
-- 22 bit LFSR counter. With XNOR feedback the lock-up state is "all-ones".
-- TC is based on a zero_cnt, which cnts consecutive zeros.
-- When it comes to zero, that means we have "all-zeros" state, which is the TC state.
PROCESS (clk10)
variable v: std_logic_vector(21 downto 0):=(others=> '0');
variable d: std_logic;
constant cLFSR_LENGTH :std_logic_vector(4 downto 0) := conv_std_logic_vector(21,5);
variable zero_cnt: std_logic_vector(4 downto 0):=cLFSR_LENGTH;
BEGIN
if rising_edge(clk10) then
if zero_cnt=conv_std_logic_vector(0,5) then -- check for TC pulse
iRstCntPulse <= '1'; -- set terminal count pulse for 1 clk
iRst_toggle <= not iRst_toggle;
else
iRstCntPulse <= '0';
end if;
---------
if v(v'high)='1' then -- count zeros
zero_cnt := cLFSR_LENGTH;
else
zero_cnt := zero_cnt - 1;
end if;
------------
d:= v(v'high) xnor v(v'high-1); -- feedback
v:= v(v'high -1 downto 0) & d; -- shift reg
end if;
end process ;
Go to the top of the page
 
+Quote Post



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

 


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


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