Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: xilinx
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
rv3dll(lex)
натолкнулся на проблему - невозможно сделать больше 200 мегагерц тактовую частоту, хотя говорят, что можно сделать 500.
посмотрел фпга едитором - чтото он тихий ужас как раскидывает рядом с dsp48 элементы. как вообще правильно эти фильтры описывать.?????
dmitry-tomsk
Цитата(rv3dll(lex) @ Dec 15 2009, 16:52) *
натолкнулся на проблему - невозможно сделать больше 200 мегагерц тактовую частоту, хотя говорят, что можно сделать 500.
посмотрел фпга едитором - чтото он тихий ужас как раскидывает рядом с dsp48 элементы. как вообще правильно эти фильтры описывать.?????

MAC фильтры работают на максимальной частоте без проблем, даже при очень плотном заполнении кристалла. Хорошо они описаны в userguide dsp48 virtex-4 с примерами кода. В V-5 мало что изменилось, разве что есть рекомендации на подключение bram к dsp48. Если каналов много, то хорошо бы задать констрейнты в planahead, тогда имплементация очень быстро проходит.
rv3dll(lex)
если речь идёт о ug073 и его примерами - пример 3 то он вообще косячный одни сплошные ошибки начиная с памяти и кончая количеством иттераций. или рачь про другие примеры?
dmitry-tomsk
Цитата(rv3dll(lex) @ Dec 16 2009, 09:16) *
если речь идёт о ug073 и его примерами - пример 3 то он вообще косячный одни сплошные ошибки начиная с памяти и кончая количеством иттераций. или рачь про другие примеры?

Возможно, в коде есть ошибки, не проверял. Но смысл там правильный, за основу брал указания для симметричного фильтра, добавлял логику децимации, работает на 450 МГц без проблем на v-4. Попробуйте coregen, если свой некогда писать.
DmitryR
Для того, чтобы заработало на 500 в DSP должны быть включены все конвейерные регистры.
rv3dll(lex)
я разобрался как писать самому и по этому ошибки и нашел.

взял кореген - сделал на 500 не работает всёравно на 200 работает. В чём может быть дело?

я правильно понимаю что указав входной сампл рейт 5 мег а клок 200 мег вместо 500 для 100 точек получу оптимизированный под 200 фильтр на 100 точек а не на 40?

Цитата(DmitryR @ Dec 16 2009, 15:19) *
Для того, чтобы заработало на 500 в DSP должны быть включены все конвейерные регистры.


250 не работает
dmitry-tomsk
Цитата(rv3dll(lex) @ Dec 16 2009, 15:23) *
я разобрался как писать самому и по этому ошибки и нашел.

взял кореген - сделал на 500 не работает всёравно на 200 работает. В чём может быть дело?

я правильно понимаю что указав входной сампл рейт 5 мег а клок 200 мег вместо 500 для 100 точек получу оптимизированный под 200 фильтр на 100 точек а не на 40?



250 не работает

Вот что смеяться то? Там только счётчики адресные и декодер операции слайса - вначале просто умножение, потом накопление, потом сумма с C входом, если округление нужно. Вообще для порядка фильтра нужно запас делать 10-20%, а то при уменьшении тактовой частоты из-за нестабильности (если ипользуется DCM) фильтр захлебнётся. Проверьте, что у Вас BRAM память, а не распределённая, а регистры конвейера RAMB включены (задержка чтения 2 такта).
rv3dll(lex)
так коре генератор наверняка всё включил. я наверное неправильно выразился - он не компилируется даёт ошибку на этот 500 мегагерцовый клок. Я в fpga editor смотрел используется bram и собственно я же сам его описывал. А и ещё я делаю всё это в EDK
DmitryR
Ну так вы попробуйте сначала без EDK. Может у вас просто в EDK клок неправильно сделан и дело вовсе не в FIR.
rv3dll(lex)
так ведь и ругается на клок а не на фильтр
rsv
ну, у нас шестиканальный фильтр-дециматор на 1612 точек работает на частоте клока 420 МГц при частоте поступления данных 60 МГц без проблем. Децимация в 62 раза. виртекс 5
rv3dll(lex)
Цитата(rsv @ Dec 24 2009, 19:31) *
ну, у нас шестиканальный фильтр-дециматор на 1612 точек работает на частоте клока 420 МГц при частоте поступления данных 60 МГц без проблем. Децимация в 62 раза. виртекс 5


откуда взят клок и какие дополнительные констрейны написаны

я взял сгенерировал коре генератором фильтр с параметрами клок фильтра 500 семпл рейт 5
поставил в систему.
взял клок генератор поставил на нем выходную частоту 500 мег соединил. при разводке даёт ошибку на этот 500 мег клок, пока его не снизишь до 200, а фильтр работает. пока сделал фильтр на 200 и так работает. В чём может быть дело.? Плисина пустая.
des00
Цитата(rv3dll(lex) @ Dec 24 2009, 23:28) *
взял клок генератор поставил на нем выходную частоту 500 мег соединил. при разводке даёт ошибку на этот 500 мег клок, пока его не снизишь до 200, а фильтр работает. пока сделал фильтр на 200 и так работает. В чём может быть дело.? Плисина пустая.


ошибка где возникает известно ? Может у вас времянка по входу/выходу не совпадает %)
dmitry-tomsk
Цитата(rv3dll(lex) @ Dec 25 2009, 09:28) *
откуда взят клок и какие дополнительные констрейны написаны

я взял сгенерировал коре генератором фильтр с параметрами клок фильтра 500 семпл рейт 5
поставил в систему.
взял клок генератор поставил на нем выходную частоту 500 мег соединил. при разводке даёт ошибку на этот 500 мег клок, пока его не снизишь до 200, а фильтр работает. пока сделал фильтр на 200 и так работает. В чём может быть дело.? Плисина пустая.

А что такое клок генератор? PLL с умножением?
rv3dll(lex)
Цитата(des00 @ Dec 25 2009, 09:10) *
ошибка где возникает известно ? Может у вас времянка по входу/выходу не совпадает %)


ошибка при проверке времянок распространения сигнала

клок генератор, это стандартная библиотечная фича ЕДК, которая появилась с 10 ой версии и автоматом создаёт схему с нескольуими выходными частотами в которой использует DCM и PLL
DmitryR
Я же вам говорил - попробуйте пока без EDK, а то вы так можете долго искать. Сделайте отдельный проект, поставьте туда 1 PLL, 1 FIR, входы и выходы FIR через двуклоковые FIFO выведите на IO. FIFO со стороны IO запитайте низкой частотой. Кристалл возьмите самый маленький. И все видно станет, кто виноват и что делать.
rv3dll(lex)
Цитата(DmitryR @ Dec 25 2009, 11:31) *
Я же вам говорил - попробуйте пока без EDK, а то вы так можете долго искать. Сделайте отдельный проект, поставьте туда 1 PLL, 1 FIR, входы и выходы FIR через двуклоковые FIFO выведите на IO. FIFO со стороны IO запитайте низкой частотой. Кристалл возьмите самый маленький. И все видно станет, кто виноват и что делать.

FIFO то зачем?
DmitryR
На всякий случай. А то вам роутер закинет крайние триггеры FIR в IO - частота получится вообще удручающаяя.
rsv
у нас на плисину подаеттся 100 мгц, из них внутренним PLL делаем нужные 420 и берем их в качестве клока для фильтра. кстати, когда я брал клок для сигнальной обработки из микроблейзовской системы тоже наблюдались глюки. решал следующим образом: на вход сигнальной обработки подавал стандартный клок 125 мгц с шины PLB, а внутри сигнальной обработки ставил pll на нужную частоту. еще посмотрите на загруженность кристалла: ежели она процентов 80 и выше - тоже могут случиться разводочные глюки
Victor®
Цитата(rsv @ Dec 25 2009, 20:56) *
... могут случиться разводочные глюки


А это что за "звери"? rolleyes.gif
Если грамотно написано и проставлены констрейнты - никаких "разводочных глюков" не будут.
Если конечно не нарушать временные параметры из отчета.
rv3dll(lex)
в ise разводится и в симуляторе работает, но я работаю в едк. Пойду DCM впишу непосредственно в модуль обработки - можа получиться чё
rv3dll(lex)
исе например проглотил это, а едк сказал давай bufg - странно всё это......

DCM_BASE_inst : DCM_BASE
generic map (
CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
-- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
CLKFX_DIVIDE => 1, -- Can be any integer from 1 to 32
CLKFX_MULTIPLY => 5, -- Can be any integer from 2 to 32
CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
CLKIN_PERIOD => 10.0, -- Specify period of input clock in ns from 1.25 to 1000.00
CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift mode of NONE or FIXED
CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE or 1X
DCM_PERFORMANCE_MODE => "MAX_SPEED", -- Can be MAX_SPEED or MAX_RANGE
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
-- an integer from 0 to 15
DFS_FREQUENCY_MODE => "HIGH", -- LOW or HIGH frequency mode for frequency synthesis
DLL_FREQUENCY_MODE => "HIGH", -- LOW, HIGH, or HIGH_SER frequency mode for DLL
DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
FACTORY_JF => X"F0F0", -- FACTORY JF Values Suggested to be set to X"F0F0"
PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 1023
STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
port map (
CLK0 => CLK0, -- 0 degree DCM CLK ouptput
-- CLK180 => CLK180, -- 180 degree DCM CLK output
-- CLK270 => CLK270, -- 270 degree DCM CLK output
-- CLK2X => CLK2X, -- 2X DCM CLK output
-- CLK2X180 => CLK2X180, -- 2X, 180 degree DCM CLK out
-- CLK90 => CLK90, -- 90 degree DCM CLK output
-- CLKDV => diskr_clk_s, -- Divided DCM CLK out (CLKDV_DIVIDE)
CLKFX => clk_out, -- DCM CLK synthesis out (M/D)
-- CLKFX180 => CLKFX180, -- 180 degree CLK synthesis out
-- LOCKED => LOCKED, -- DCM LOCK status output
CLKFB => CLK0, -- DCM clock feedback
CLKIN => clk_in, -- Clock input (from IBUFG, BUFG or DCM)
RST => '0' -- DCM asynchronous reset input
);
DmitryR
Странного ничего, ISE его автоматически добавил скорее всего, а в полном проекте EDK их или не хватает, или опциями запрещено их ставить. Поставьте ручками, если их не хватает - сразу будет понятно.
rv3dll(lex)
в едк не разводиться - говорит констрейны не выполняются - начал изучать тайм-аналайзер.
какаято странност.
и ещё увидел, что как-то криво располагаются куски в fpga едитореь
DmitryR
Цитата(rv3dll(lex) @ Dec 28 2009, 16:09) *
и ещё увидел, что как-то криво располагаются куски в fpga едитореь

В более-менее больших проектах как располагать "куски" надо самому определять, иначе автоматом они расположатся именно что криво и никакая времянка не пройдет.
rv3dll(lex)
проект пустой почти.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.