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

Задался вопросом - правильно ли у меня заданы временные ограничения на подпроект с фильтром, созданным в FIR Compiler'е.

Дано: Cyclone 2. Фильтр реализован в структуре Multi-Cycle. Входные данные обрабатываются каждый третий клок фильтра. Выходные порождаются также на каждый третий клок. Данные поступают с частотой 40Mhz. Внутренняя частота фильтра, соответственно, 120 Мгц. Полностью проект занимает порядка 90% всех ресурсов ПЛИС. И если ранее временной анализатор не выдавал слаков по сетапу, то сейчас они начали появляться. Fmax упала до 118МГц. Слаки около 0,3 нс. И в реальной работе модуля визуально проявляются кратковременные выбросы на обрабатываемом сигнале.

Вот я и задумался, а правильно ли у меня заданы ограничения? В руководстве на FIR Compiler нет ничего про временные ограничения. Есть только требования, касающиеся редактора назначений. Попытки разобраться в структуре фильтра толком ничего не дают, так как глубже основных блоков RTL Viewer не пускает. Да и там все равно не разобраться. Но ведь если задать мультицикл в ограничениях, возможно фиттеру полегчает и он сможет все развести без слаков?

Ограничения сейчас следующие:

Код
set_multicycle_path 3 -from {ADCcontroller:ADCcnt|adc_*[*]~reg} -to {RadioFilter:RF*|filter:RadioFilter|filter_ast:filter_ast_inst|auk_dspip_avalon_streaming_sink_fir_91:sink|at_sink_data_int[*]} -setup
set_multicycle_path 2 -from {ADCcontroller:ADCcnt|adc_*[*]~reg} -to {RadioFilter:RF*|filter:RadioFilter|filter_ast:filter_ast_inst|auk_dspip_avalon_streaming_sink_fir_91:sink|at_sink_data_int[*]} -hold


Указывают на то, что данные из регистров, в которых хранятся данные с АЦП, до входных регистров Avalon интерфейса FIR Compiler'а - мультицикловые.

DENth
Очень жаль, что не смог найти здесь ответа...
Вопрос всё еще актуален.

Давайте попробую спросить по другому.
Многие из вас пользуются готовыми мегафункциями. Расскажите, если не сложно, ваши действия при наличии проблем с выполнением временных органичений с ними. Насколько я понимаю, вникать в устройство той или иной функции нет необходимости. В этом ее удобство применения. Но вот возникла ситуация - слаки именно в модуле, реализованном в мегафункции. И что делать?

Для своего случая - ответа найти не смог. Лишь файл tcl-скрипта с ограничениями на проект. Вот он:

Код
proc add_fir_constraints {args} {

    package require ::quartus::project
    package require ::quartus::flow


    # Compiler Assignments remove
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "tdl_da_lc"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "lc_tdl_strat"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "lc_tdl_strat_cen"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "sadd_lpm"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "tsadd_lpm"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "sadd_lpm_cen"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "tsadd_lpm_cen"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "sadd_cen"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "tsadd_cen"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "lc_tdl_mr"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "lc_tdl_en"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "sadd_reg_top"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "sadd_lpm_cen"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "tsadd_reg_top_cen"
    set_global_assignment -name "DSP_BLOCK_BALANCING" -remove -entity "lp_filter_st"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "mlu_nd_lc"
    ###########################################################################
#####################
    # uncomment the following lines if you want to disable shift register recognition              #
    ###########################################################################
#####################
    #set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "msft_data"
    #set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "msft_data" "OFF"
    #set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "msft_data_reseq"
    #set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "msft_data_reseq" "OFF"
    #set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "msft_data_reseq_mc"
    #set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "msft_data_reseq_mc" "OFF"
    #set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -remove -entity "msft_reseq_mc"
    #set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "msft_reseq_mc" "OFF"
    ###########################################################################
#####################
    
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "tdl_da_lc" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "sadd_lpm" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "tsadd_lpm" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "sadd_lpm_cen" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "tsadd_lpm_cen" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "sadd" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "tsadd" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "lc_tdl_strat" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "lc_tdl_mr" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "lc_tdl_en" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "lc_tdl_strat_cen" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "sadd_reg_top_cen" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "tsadd_reg_top_cen" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "sadd_cen" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "sadd_reg_top" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "tsadd_reg_top" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "tsadd_lpm_reg_top_cen" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "sadd_lpm_reg_top_cen" "OFF"
    set_global_assignment -name "AUTO_SHIFT_REGISTER_RECOGNITION" -entity "mlu_nd_lc" "OFF"
    set_global_assignment -name "DSP_BLOCK_BALANCING" -entity "lp_filter_st" "DSP BLOCKS"
}
add_fir_constraints
Timmy
Мультицикловых путей в Multi-cycle реализации фильтра нет. Странно, что фильтр не работает на максимальной для клокового дерева частоте, возможно, из-за слишком плотной упаковки. Я бы написал такой фильтр сам(для Латтиса он у меня есть, там родной вообще никуда не годится), это не сложно, и при необходимости увеличил латентность для критических путей. Плюс ручная расстановка блоков при необходимости.
DENth
Я конечно понимаю, что работаю с ПЛИСиной на грани ее возможностей. Но была необходимость использования корпуса с 208 выводами, а BGA технология для меня пока не совсем доступна. Выбор пал на Cyclone II. Самый большой по количеству вентелей в этом корпусе - EP2C8. С классом скорости "8". Его производительность из даташита:



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