Перейти к содержанию
    

Проблема с DCM в Virtex2

С кварцевого генератора подается тактовый сигнал на вход кристалла.

далее он проводится через DCM.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С кварцевого генератора подается тактовый сигнал на вход кристалла.

далее он проводится через DCM.

 

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

 

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

1. Какие параметры тактового сигнала F, дрожание ?

2. В каком режиме работает DCM ?

3. Если пункт 1 удовлетворяет требованиям Xilinx, то попробуйте принудительно reset-ить DCM после загрузки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Входная частота: 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Входная частота: 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем вам "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 стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставил я его специально. Дело в том, что если его не ставить, то после IBufG сигнал идет по обычным путям внутри кристалла. А если его провести через BUFGMUX, то он начинает распространяться через глобальные скоростные линии (узнал об это тогда, когда боролся с тем, что разные блоки срабатывал по фронту в разное время. Поразглядывал разводку во FPGA Editor и увидел такую штуку.

 

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

 

Атрибуты Xilinx гораздо удобнее задавать через GENERIC - последние версии софта это позволяют, попробуйте воспользоваться вариантом из LANGUAGE TEMPLATES ISE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставил я его специально. Дело в том, что если его не ставить, то после IBufG сигнал идет по обычным путям внутри кристалла. А если его провести через BUFGMUX, то он начинает распространяться через глобальные скоростные линии (узнал об это тогда, когда боролся с тем, что разные блоки срабатывал по фронту в разное время. Поразглядывал разводку во FPGA Editor и увидел такую штуку.

 

 

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

 

Чтобы блоки срабатывали когда надо, обычно constrant вешаются...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...