Приветствую всех. Начал заниматься ПЛИС. Работаю с MAX10. Сделал проектик чтения АЦП по SPI. Период чтения 2МГц, частота SPI - 50МГц. При компиляции варнинги от TimeQuest. Начал разбираться. В основном модуле вызывается модуль PLL, генерирующий из входных 50МГц выходные 100МГц. Также имеются модули конфигурирования АЦП и чтения АЦП. TimeQuest выдает следующие варнинги: Node: adc_config:adc_conf|sck was determined to be a clock but was found without an associated clock assignment. Node: adc_read_quadSPI:adc_meas|sck was determined to be a clock but was found without an associated clock assignment. Node: adc_config:adc_conf|cur.cs_set was determined to be a clock but was found without an associated clock assignment. Register cnvst_signal:cnvst_create|enable_reg is being clocked by adc_config:adc_conf|cur.cs_set Node: adc_read_quadSPI:adc_meas|cur.000 was determined to be a clock but was found without an associated clock assignment. Register counter_sum[0] is being clocked by adc_read_quadSPI:adc_meas|cur.000 Deriving Clock Uncertainty. Please refer to report_sdc in TimeQuest to see clock uncertainties. PLL cross checking found inconsistent PLL clock settings: Node: generator|altpll_component|auto_generated|pll1|clk[0] was found missing 1 generated clock that corresponds to a base clock with a period of: 20.000
1) Вообще, мне не понятно почему клоки (что генерируемые PLL, что логикой) нужно описывать, когда они все генерируются логикой ПЛИС, собственно для этого TimeQuest и создан, он сам должен их просчитывать. Ну да ладно, принимаю как должное. 2) Можно ли комментировать строки в файле SDC? Как это делается? 3) Решил начать с клока PLL. Выходным клоком PLL у меня является цепь clk_100MHz. TimeQuest же ругается на generator|altpll_component|auto_generated|pll1|clk[0], а вот самой цепи clk_100MHz в Name Finder нет. Правильно ли я понимаю, что TimeQuest не понимает цепи проекта, а только регистры, пины микросхемы и порты модулей? Для определения клока PLL 100МГц сделал так (покопавшись в интернете) derive_clock_uncertainty create_clock -period 50MHz -name {clk_50MHz_in} [get_ports {clk_50MHz_in}] derive_pll_clocks -create_base_clocks set clk_100MHz generator|altpll_component|auto_generated|pll1|clk[0] set_clock_groups -exclusive -group [list $clk_100MHz clk_50MHz_in] Причем clk_100MHz это не цепь из моего проекта, а имя, которое я могу теперь использовать в TimeQuest. И такая же ситуация с любыми имена, которые я буду создавать в TCL скрипте. Верно? Команда set_clock_groups -exclusive -group [list $clk_100MHz clk_50MHz_in] говорит, что тактовые частоты асинхронны друг другу. TimeQuest будет считать сдвиги между частотами? 4) Далее имеются клоки adc_config:adc_conf|sck и adc_read_quadSPI:adc_meas|sck, получаемые делением на 2 частоты 100МГц. Делаем для каждого create_generated_clock, set_clock_groups -exclusive и именуем клоки как хотим? Все остальное TimeQuest посчитает и покажет? 5) Остаются клоки adc_config:adc_conf|cur.cs_set и adc_read_quadSPI:adc_meas|cur.000. Начнем с того, что регистров и цепей с таким названием в проекте нет, однако, первый это похоже сигнал CS конфигурирования АЦП. Он вырабатывается лишь один раз, это не клок, однако задержки его посмотреть надо. Второй, судя по логу, тактирует регистр суммы, которая обновляется также с частотой чтения АЦП 2МГц. Название какое то странное adc_read_quadSPI:adc_meas|cur.000. Откуда TimeQuest его взял? Раз он на него ругается, то его нужно по любому описывать и опять же давать любое название?
Заранее спасибо за пояснения.
Сообщение отредактировал limbast - Sep 29 2017, 09:05
|