Полная версия этой страницы:
xilinx
rv3dll(lex)
Dec 15 2009, 13:52
натолкнулся на проблему - невозможно сделать больше 200 мегагерц тактовую частоту, хотя говорят, что можно сделать 500.
посмотрел фпга едитором - чтото он тихий ужас как раскидывает рядом с dsp48 элементы. как вообще правильно эти фильтры описывать.?????
dmitry-tomsk
Dec 15 2009, 18:23
Цитата(rv3dll(lex) @ Dec 15 2009, 16:52)

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

если речь идёт о ug073 и его примерами - пример 3 то он вообще косячный одни сплошные ошибки начиная с памяти и кончая количеством иттераций. или рачь про другие примеры?
Возможно, в коде есть ошибки, не проверял. Но смысл там правильный, за основу брал указания для симметричного фильтра, добавлял логику децимации, работает на 450 МГц без проблем на v-4. Попробуйте coregen, если свой некогда писать.
DmitryR
Dec 16 2009, 12:19
Для того, чтобы заработало на 500 в DSP должны быть включены все конвейерные регистры.
rv3dll(lex)
Dec 16 2009, 12:23
я разобрался как писать самому и по этому ошибки и нашел.
взял кореген - сделал на 500 не работает всёравно на 200 работает. В чём может быть дело?
я правильно понимаю что указав входной сампл рейт 5 мег а клок 200 мег вместо 500 для 100 точек получу оптимизированный под 200 фильтр на 100 точек а не на 40?
Цитата(DmitryR @ Dec 16 2009, 15:19)

Для того, чтобы заработало на 500 в DSP должны быть включены все конвейерные регистры.
250 не работает
dmitry-tomsk
Dec 16 2009, 13:58
Цитата(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)
Dec 17 2009, 05:12
так коре генератор наверняка всё включил. я наверное неправильно выразился - он не компилируется даёт ошибку на этот 500 мегагерцовый клок. Я в fpga editor смотрел используется bram и собственно я же сам его описывал. А и ещё я делаю всё это в EDK
DmitryR
Dec 17 2009, 10:27
Ну так вы попробуйте сначала без EDK. Может у вас просто в EDK клок неправильно сделан и дело вовсе не в FIR.
rv3dll(lex)
Dec 24 2009, 12:25
так ведь и ругается на клок а не на фильтр
ну, у нас шестиканальный фильтр-дециматор на 1612 точек работает на частоте клока 420 МГц при частоте поступления данных 60 МГц без проблем. Децимация в 62 раза. виртекс 5
rv3dll(lex)
Dec 25 2009, 05:28
Цитата(rsv @ Dec 24 2009, 19:31)

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

взял клок генератор поставил на нем выходную частоту 500 мег соединил. при разводке даёт ошибку на этот 500 мег клок, пока его не снизишь до 200, а фильтр работает. пока сделал фильтр на 200 и так работает. В чём может быть дело.? Плисина пустая.
ошибка где возникает известно ? Может у вас времянка по входу/выходу не совпадает %)
dmitry-tomsk
Dec 25 2009, 06:23
Цитата(rv3dll(lex) @ Dec 25 2009, 09:28)

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

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

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

... могут случиться разводочные глюки
А это что за "звери"?
Если грамотно написано и проставлены констрейнты - никаких "разводочных глюков" не будут.
Если конечно не нарушать временные параметры из отчета.
rv3dll(lex)
Dec 28 2009, 06:50
в ise разводится и в симуляторе работает, но я работаю в едк. Пойду DCM впишу непосредственно в модуль обработки - можа получиться чё
rv3dll(lex)
Dec 28 2009, 11:43
исе например проглотил это, а едк сказал давай 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
Dec 28 2009, 12:35
Странного ничего, ISE его автоматически добавил скорее всего, а в полном проекте EDK их или не хватает, или опциями запрещено их ставить. Поставьте ручками, если их не хватает - сразу будет понятно.
rv3dll(lex)
Dec 28 2009, 13:09
в едк не разводиться - говорит констрейны не выполняются - начал изучать тайм-аналайзер.
какаято странност.
и ещё увидел, что как-то криво располагаются куски в fpga едитореь
DmitryR
Dec 28 2009, 13:35
Цитата(rv3dll(lex) @ Dec 28 2009, 16:09)

и ещё увидел, что как-то криво располагаются куски в fpga едитореь
В более-менее больших проектах как располагать "куски" надо самому определять, иначе автоматом они расположатся именно что криво и никакая времянка не пройдет.
rv3dll(lex)
Dec 28 2009, 13:53
проект пустой почти.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.