Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с DCM в Virtex2
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
L_Konstantin
С кварцевого генератора подается тактовый сигнал на вход кристалла.
далее он проводится через DCM.

Проблема в том что на выходе DCM тактвый сигнал есть, но при этом loc стоит в нуле!

Кто сталкивался? Как бороться?
ilya79
Цитата(L_Konstantin @ Oct 13 2006, 14:35) *
С кварцевого генератора подается тактовый сигнал на вход кристалла.
далее он проводится через DCM.

Проблема в том что на выходе DCM тактвый сигнал есть, но при этом loc стоит в нуле!

Кто сталкивался? Как бороться?

1. Какие параметры тактового сигнала F, дрожание ?
2. В каком режиме работает DCM ?
3. Если пункт 1 удовлетворяет требованиям Xilinx, то попробуйте принудительно reset-ить DCM после загрузки.
Link
Заодно проверьте
- режим работы DCM : low или high frequency
- есть ли обратная связь - feedback
L_Konstantin
Входная частота: 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);
klop
Цитата(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.
Link
А зачем вам "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 стоит.
L_Konstantin
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, но смогу попробовать только завтра - выходной седеня smile.gif
BSV
Цитата(L_Konstantin @ Oct 15 2006, 10:08) *
Поставил я его специально. Дело в том, что если его не ставить, то после IBufG сигнал идет по обычным путям внутри кристалла. А если его провести через BUFGMUX, то он начинает распространяться через глобальные скоростные линии (узнал об это тогда, когда боролся с тем, что разные блоки срабатывал по фронту в разное время. Поразглядывал разводку во FPGA Editor и увидел такую штуку.


Если Вы от этого клока кроме DCM ничего не тактируете, то ставить туда BUFGMUX - только зряшняя трата ресурсов.

Атрибуты Xilinx гораздо удобнее задавать через GENERIC - последние версии софта это позволяют, попробуйте воспользоваться вариантом из LANGUAGE TEMPLATES ISE.
Link
Цитата(L_Konstantin @ Oct 15 2006, 10:08) *
Поставил я его специально. Дело в том, что если его не ставить, то после IBufG сигнал идет по обычным путям внутри кристалла. А если его провести через BUFGMUX, то он начинает распространяться через глобальные скоростные линии (узнал об это тогда, когда боролся с тем, что разные блоки срабатывал по фронту в разное время. Поразглядывал разводку во FPGA Editor и увидел такую штуку.



Вообще-то после IBUFG сигнал идет по высокоскоростным (клоковым) цепям, это после IBUF он идет по обычным...

Чтобы блоки срабатывали когда надо, обычно constrant вешаются...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.