|
|
  |
Проблема с DCM в Virtex2 |
|
|
|
Oct 13 2006, 10:35
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 13-10-06
Из: Новосибирск
Пользователь №: 21 282

|
С кварцевого генератора подается тактовый сигнал на вход кристалла. далее он проводится через DCM.
Проблема в том что на выходе DCM тактвый сигнал есть, но при этом loc стоит в нуле!
Кто сталкивался? Как бороться?
|
|
|
|
|
Oct 13 2006, 11:02
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 26-08-04
Пользователь №: 549

|
Цитата(L_Konstantin @ Oct 13 2006, 14:35)  С кварцевого генератора подается тактовый сигнал на вход кристалла. далее он проводится через DCM.
Проблема в том что на выходе DCM тактвый сигнал есть, но при этом loc стоит в нуле!
Кто сталкивался? Как бороться? 1. Какие параметры тактового сигнала F, дрожание ? 2. В каком режиме работает DCM ? 3. Если пункт 1 удовлетворяет требованиям Xilinx, то попробуйте принудительно reset-ить DCM после загрузки.
|
|
|
|
|
Oct 13 2006, 18:45
|
Участник

Группа: Свой
Сообщений: 28
Регистрация: 1-12-05
Пользователь №: 11 671

|
Заодно проверьте - режим работы DCM : low или high frequency - есть ли обратная связь - feedback
|
|
|
|
|
Oct 14 2006, 07:58
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 13-10-06
Из: Новосибирск
Пользователь №: 21 282

|
Входная частота: 47 МГц.
Внутри DCM происходит умножение частоты на 2 и фазовый сдвиг.
Reset в DCM заведен, однако его активация ситуацию не изменяет. Помогает только выключение питания и повторение загрузки. Просто перезагрузка также не помогает. При этом loc не выставляется примерно в 30% случаев загрузки - то есть нестабильность присутствует.
Вот элемент кода (Kvartz_Clock - сигнал входящий в кристалл, Xilinx_DCM_Clock - тактовый сигнал для работы внутренней логики).
--******************************************************************************** *****
attribute CLK_FEEDBACK of Xilinx_DCM : label is "2X"; attribute DLL_FREQUENCY_MODE of Xilinx_DCM : label is "LOW";
attribute CLKOUT_PHASE_SHIFT of Xilinx_DCM : label is "FIXED"; attribute PHASE_SHIFT of Xilinx_DCM : label is 40.0;
--******************************************************************************** *****
Kvartz_CLK_IBUFG: IBUFG_LVCMOS33 port map( I => Kvartz_Clock, O => Kvartz_Clock_Int );
Kvartz_CLK_BUFGMUX: BUFGMUX port map ( I0 => Kvartz_Clock_Int, I1 => '0', S => '0', O => Kvartz_Clock_BufGMux );
Xilinx_DCM_ClockFB <= Xilinx_DCM_Clock;
Xilinx_DCM: DCM port map( CLKIN => Kvartz_Clock_BufGMux, RST => NOT PCIX_Bus_Reset_Int, CLKFB => Xilinx_DCM_ClockFB,
CLK0 => open,
CLK2X => Xilinx_DCM_Clock_FromDLL, LOCKED => Xilinx_DCM_Locked );
Xilinx_Clock_BUFG: BUFG port map(I => Xilinx_DCM_Clock_FromDLL, O => Xilinx_DCM_Clock);
Сообщение отредактировал L_Konstantin - Oct 14 2006, 08:00
|
|
|
|
|
Oct 14 2006, 08:20
|
Местный
  
Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788

|
Цитата(L_Konstantin @ Oct 14 2006, 11:58)  Входная частота: 47 МГц.
Внутри DCM происходит умножение частоты на 2 и фазовый сдвиг.
Reset в DCM заведен, однако его активация ситуацию не изменяет. Помогает только выключение питания и повторение загрузки. Просто перезагрузка также не помогает. При этом loc не выставляется примерно в 30% случаев загрузки - то есть нестабильность присутствует.
Вот элемент кода (Kvartz_Clock - сигнал входящий в кристалл, Xilinx_DCM_Clock - тактовый сигнал для работы внутренней логики).
--******************************************************************************** *****
attribute CLK_FEEDBACK of Xilinx_DCM : label is "2X"; attribute DLL_FREQUENCY_MODE of Xilinx_DCM : label is "LOW";
attribute CLKOUT_PHASE_SHIFT of Xilinx_DCM : label is "FIXED"; attribute PHASE_SHIFT of Xilinx_DCM : label is 40.0;
--******************************************************************************** *****
Kvartz_CLK_IBUFG: IBUFG_LVCMOS33 port map( I => Kvartz_Clock, O => Kvartz_Clock_Int );
Kvartz_CLK_BUFGMUX: BUFGMUX port map ( I0 => Kvartz_Clock_Int, I1 => '0', S => '0', O => Kvartz_Clock_BufGMux );
Xilinx_DCM_ClockFB <= Xilinx_DCM_Clock;
Xilinx_DCM: DCM port map( CLKIN => Kvartz_Clock_BufGMux, RST => NOT PCIX_Bus_Reset_Int, CLKFB => Xilinx_DCM_ClockFB,
CLK0 => open,
CLK2X => Xilinx_DCM_Clock_FromDLL, LOCKED => Xilinx_DCM_Locked );
Xilinx_Clock_BUFG: BUFG port map(I => Xilinx_DCM_Clock_FromDLL, O => Xilinx_DCM_Clock); По моему на CLKFB должен быть заведен (через BUFG) CLK0.
|
|
|
|
|
Oct 14 2006, 10:22
|
Участник

Группа: Свой
Сообщений: 28
Регистрация: 1-12-05
Пользователь №: 11 671

|
А зачем вам "Kvartz_CLK_BUFGMUX" когда уже есть "Kvartz_CLK_IBUFG". "Kvartz_CLK_BUFGMUX" просто не нужен.
какие стоят значения аттрибутов - DESKEW_ADJUST - CLKIN_DIVIDE_BY_2 ?
Вообще эти аттрибуты внедряются у вас при разводке Xilinx ?
klop подавать на feedback CLK2x вроде можно, ведь стоит attribute CLK_FEEDBACK of Xilinx_DCM : label is "2X". Попробовать вместо CLK2x подавать CLK0 стоит.
|
|
|
|
|
Oct 15 2006, 06:08
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 13-10-06
Из: Новосибирск
Пользователь №: 21 282

|
1. А зачем вам "Kvartz_CLK_BUFGMUX" когда уже есть "Kvartz_CLK_IBUFG". "Kvartz_CLK_BUFGMUX" просто не нужен. Поставил я его специально. Дело в том, что если его не ставить, то после IBufG сигнал идет по обычным путям внутри кристалла. А если его провести через BUFGMUX, то он начинает распространяться через глобальные скоростные линии (узнал об это тогда, когда боролся с тем, что разные блоки срабатывал по фронту в разное время. Поразглядывал разводку во FPGA Editor и увидел такую штуку. 2. какие стоят значения аттрибутов - DESKEW_ADJUST - CLKIN_DIVIDE_BY_2 Значения этих аттритов я сам не определяю - то есть они умолчательные. Задал специльно только CLK_FEEDBACK, DLL_FREQUENCY_MODE, CLKOUT_PHASE_SHIFT и PHASE_SHIFT - исходя из их необходимости. 3. CLK0 конечно надо попробовать подать на FB, но смогу попробовать только завтра - выходной седеня
Сообщение отредактировал L_Konstantin - Oct 15 2006, 06:14
|
|
|
|
|
Oct 15 2006, 07:09
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
Цитата(L_Konstantin @ Oct 15 2006, 10:08)  Поставил я его специально. Дело в том, что если его не ставить, то после IBufG сигнал идет по обычным путям внутри кристалла. А если его провести через BUFGMUX, то он начинает распространяться через глобальные скоростные линии (узнал об это тогда, когда боролся с тем, что разные блоки срабатывал по фронту в разное время. Поразглядывал разводку во FPGA Editor и увидел такую штуку. Если Вы от этого клока кроме DCM ничего не тактируете, то ставить туда BUFGMUX - только зряшняя трата ресурсов. Атрибуты Xilinx гораздо удобнее задавать через GENERIC - последние версии софта это позволяют, попробуйте воспользоваться вариантом из LANGUAGE TEMPLATES ISE.
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
|
Oct 15 2006, 21:12
|
Участник

Группа: Свой
Сообщений: 28
Регистрация: 1-12-05
Пользователь №: 11 671

|
Цитата(L_Konstantin @ Oct 15 2006, 10:08)  Поставил я его специально. Дело в том, что если его не ставить, то после IBufG сигнал идет по обычным путям внутри кристалла. А если его провести через BUFGMUX, то он начинает распространяться через глобальные скоростные линии (узнал об это тогда, когда боролся с тем, что разные блоки срабатывал по фронту в разное время. Поразглядывал разводку во FPGA Editor и увидел такую штуку. Вообще-то после IBUFG сигнал идет по высокоскоростным (клоковым) цепям, это после IBUF он идет по обычным... Чтобы блоки срабатывали когда надо, обычно constrant вешаются...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|