Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: DCM в XC3S400
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
stalko
Проблема такая:
описываю на Verilog такой модуль
module my_dcm(CLKIN_IN,
CLKFX_OUT,
CLKIN_IBUFG_OUT,
CLK0_OUT);

input CLKIN_IN;
output CLKFX_OUT;
output CLKIN_IBUFG_OUT;
output CLK0_OUT;

wire CLKFB_IN;
wire CLKFX_BUF;
wire CLKIN_IBUFG;
wire CLK0_BUF;
wire GND;

assign GND = 0;
assign CLKIN_IBUFG_OUT = CLKIN_IBUFG;
assign CLK0_OUT = CLKFB_IN;
BUFG CLKFX_BUFG_INST (.I(CLKFX_BUF),
.O(CLKFX_OUT));
IBUFG CLKIN_IBUFG_INST (.I(CLKIN_IN),
.O(CLKIN_IBUFG));
BUFG CLK0_BUFG_INST (.I(CLK0_BUF),
.O(CLKFB_IN));
// Period Jitter (unit interval) for block DCM_INST = 0.04 UI
// Period Jitter (Peak-to-Peak) for block DCM_INST = 0.13 ns
DCM DCM_INST (.CLKFB(CLKFB_IN),
.CLKIN(CLKIN_IBUFG),
.DSSEN(GND),
.PSCLK(GND),
.PSEN(GND),
.PSINCDEC(GND),
.RST(GND),
.CLKDV(),
.CLKFX(CLKFX_BUF),
.CLKFX180(),
.CLK0(CLK0_BUF),
.CLK2X(),
.CLK2X180(),
.CLK90(),
.CLK180(),
.CLK270(),
.LOCKED(),
.PSDONE(),
.STATUS())/* synthesis xc_props="CLK_FEEDBACK=1X, \
CLKDV_DIVIDE=2.000000, \
CLKFX_DIVIDE=1, \
CLKFX_MULTIPLY=10, \
CLKIN_DIVIDE_BY_2=FALSE, \
CLKIN_PERIOD=100.000000, \
CLKOUT_PHASE_SHIFT=NONE, \
DESKEW_ADJUST=SYSTEM_SYNCHRONOUS, \
DFS_FREQUENCY_MODE=LOW, \
DLL_FREQUENCY_MODE=LOW, \
DUTY_CYCLE_CORRECTION=TRUE, \
FACTORY_JF=C080, \
PHASE_SHIFT=0, \
STARTUP_WAIT=TRUE" */;
// synopsys translate_off
defparam DCM_INST.CLK_FEEDBACK = "1X";
defparam DCM_INST.CLKDV_DIVIDE = 2.000000;
defparam DCM_INST.CLKFX_DIVIDE = 1;
defparam DCM_INST.CLKFX_MULTIPLY = 10;
defparam DCM_INST.CLKIN_DIVIDE_BY_2 = "FALSE";
defparam DCM_INST.CLKIN_PERIOD = 100.000000;
defparam DCM_INST.CLKOUT_PHASE_SHIFT = "NONE";
defparam DCM_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
// defparam DCM_INST.DFS_FREQUENCY_MODE = "HIGH";
defparam DCM_INST.DFS_FREQUENCY_MODE = "LOW";
defparam DCM_INST.DLL_FREQUENCY_MODE = "LOW";
defparam DCM_INST.DUTY_CYCLE_CORRECTION = "TRUE";
defparam DCM_INST.FACTORY_JF = 16'hC080;
defparam DCM_INST.PHASE_SHIFT = 0;
defparam DCM_INST.STARTUP_WAIT = "TRUE";
// synopsys translate_on
endmodule


На входе - 10МГц, на выходе, как видно, д.б. 100МГц.
Симулирую его - все великолепно...
Синтезирую (Sinplify Pro), заливаю в кристалл... на выходе... 10МГц!!!
Причем, как бы я ни менял коэффициенты деления/умножения все одно и то же: 10МГц...
Может кто сталкивался?
tegumay
Если в DCM задействован как DFS и DLL то мин вх частота 18 Мгц
лучше всего зайдите на сайт Xilinxa и скачайте доки по Spartan 3
DFS - когда задействованы выходы CLKFX и CLKFX180 (1-280 MHZ)
DLL - когда зайдействованы остальные выходы
если поставить обратную связь то будет уже не DFS а DLL и частота мин станет 18Мгц а не 1 МГц по ходу так
stalko
Цитата(tegumay @ Nov 22 2005, 21:23) *
Если в DCM задействован как DFS и DLL то мин вх частота 18 Мгц
лучше всего зайдите на сайт Xilinxa и скачайте доки по Spartan 3
DFS - когда задействованы выходы CLKFX и CLKFX180 (1-280 MHZ)
DLL - когда зайдействованы остальные выходы
если поставить обратную связь то будет уже не DFS а DLL и частота мин станет 18Мгц а не 1 МГц по ходу так

Дело в том, что я не сам создавал сей чудный код, а доверил его архитектурному визарду от Ксайлинкса...
И он сказал, что минимальная входная частота от 1 МГц для данной конфигурации... по крайней мере, как я его понял...
stalko
Сейчас вот попробовал сделать DCM-ку на ките. Входная частота 50МГц.
Заодно для очистки совести все синтезировал не в Sinplify, а в XST.
На выходе CLK2X вижу удвоенную частоту, фазы 90-180-270 нормально подвинутые.
Но это я все видел и на своей плате с 10МГц входа (разве что с CLK2X там полз сигнал 10МГц, но со скважностью 4).
Но с выхода CLKFX прет какой-то бред, постоянная со слабыми колыханиями, которые по сути своей вероятно наводки...
Напомню, что на своей плате с 10МГц-ами, я видел те же 10МГц сквозняком.
Какие будут идеи? А то у меня уже своих вариантов и не осталось...
Пробовал обойтись, как тут звучало, без связи CLK0-CLKFB. Эффект нулевой.
tegumay
На 50 Мгц коэффициенты MUL и DIV какие? не те же самые?
не 10 : 1? а на вход RST подано что? почему то когда он в воздухе DCM не работает


рекомендую загдянуть в доки, там объъяснены все параметры блока DCM и когда в каких режимах он работает иначе придеться долго танцевать из-за того что некоторые параметры не сходятся
- параметр CLKFEEDBACK стоит в 1X, а для режима DFS он должен быть в NONE и feedbacka е должно быть иначе он будет DLL. я режим DFS не использовал, в пятницу попробую... но не на Spartan'e
stalko
Цитата(tegumay @ Nov 23 2005, 23:28) *
На 50 Мгц коэффициенты MUL и DIV какие? не те же самые?
не 10 : 1?

Пытался 50МГц умножить на 2.
Цитата(tegumay @ Nov 23 2005, 23:28) *
а на вход RST подано что? почему то когда он в воздухе DCM не работает

Пробовал с "0" и заводил на кнопку: жму, вижу сигнал падает в ноль, отпускаю, проскакивает 50МГц, потом якобы входит в режим и опять муть...
Цитата(tegumay @ Nov 23 2005, 23:28) *
рекомендую загдянуть в доки, там объъяснены все параметры блока DCM и когда в каких режимах он работает иначе придеться долго танцевать из-за того что некоторые параметры не сходятся
- параметр CLKFEEDBACK стоит в 1X, а для режима DFS он должен быть в NONE и feedbacka е должно быть иначе он будет DLL. я режим DFS не использовал, в пятницу попробую... но не на Spartan'e

Проверял в DFS-режиме с feedback-ом = NONE, на входе только CLKIN, сигнал снимаю только с CLKFX, остальные входы в "0", выходы - в воздухе... То же самое...
Grumbler_2002
Посмотреть STATUS на предмет захвата или срыва частоты, проверить джиттер входного сигнала.
stalko
Цитата(Grumbler_2002 @ Nov 24 2005, 00:51) *
Посмотреть STATUS на предмет захвата или срыва частоты, проверить джиттер входного сигнала.

STATUS[2:0]=3'b111;
Входной сигнал устойчивый, явного джиттера не наблюдается...
Зато обнаружил, что нет захвата... sad.gif
tegumay
а как 2X он же работал? если он есть то и захват должен быть...
stalko
Цитата(tegumay @ Nov 24 2005, 12:51) *
а как 2X он же работал? если он есть то и захват должен быть...

Более того, он и сейчас работает!!
Может, у меня крыша уже едет? LOCKED встает в "0" (это на случай, если я активный уровень перепутал smile.gif )

Почитал xapp462, скачал пример с http://www.xilinx.com/bvdocs/appnotes/xapp462_verilog.zip
Попробовал BUFG_DFS_SUBM и BUFG_DFS_FB_SUBM. Результат в общем тот-же:
10,3мкс на CLKFX стоит 50МГц, а потом все рушится...

P.S.
Оппппа!!! Вот так накололся!!!! У кита светодиоды горят по "0".
Прошу прощения у всех, кого заблудил... Мне очень стыдно smile.gif

Получается все наоборот: LOCKED=1, а все статусы = 0...
stalko
Всё!! Всем спасибо!!!
Проблема найдена:
// synopsys translate_off и
// synopsys translate_on
тут явно лишние. Только вот интересно, а почему данные директивы присутствуют в коде Architecter Wizard-а? Кстати, в примере xapp264, тоже...

Правда, есть оговорка: у меня все это заработало только после того, как я поделил сигнал, входящий на DCM на 2... Возможно, проблема еще в джиттере...
stalko
Вдогонку подумалось...

Все хорошо, но это я все пробовал под XST, а как отреагирует Synplify на это?
И еще... непонятно, почему у меня тогда параметр DCM_INST.CLKIN_DIVIDE_BY_2 тогда работал?
stalko
Чего боялся, то и произошло...
Вернулся к основному проекту от тестового... и под Synplify DCM, прекрасно работавший под XST, перестал работать: на выходе CLKFX всегда то же самое, что на входе sad.gif
stalko
Все, закрываю тему. Synplify оказалась ни при чем, на ките все заработало. На моей плате не было захвата. Дело было в поганом сигнале CLKIN. Сделал так: на первом DCM сделал CLKIN xor CLK90 (CLK2X не работает), потом это сигнал подал на второй с предделителем. Стало умножать, достиг 100МГц, но сигнал с поганой скважностью и джиттером. Остановился на 60МГц-ах, все все удовлетворительно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.