Вопрос по блоку Slave_bidir_Tx и шине bidir1_data_bus[15..0] на отправку по схеме Source-Synchronous Output (выдает шину bidir1_data_bus и частоту CLK_TX1). Блок тактируется частотой 125МГц, получаемой на pll_c5gx. Эта же частота уходит вместе с шиной bidir1_data_bus наружу, чтобы приемник этой частотой защелкивал данные.

описал частоты в sdc-файле:
Код
create_clock -period 150MHz -name CLK_150M [get_ports CLK_150M]
create_clock -name CLK_RX1 -period 125MHz [get_ports CLK_RX1]
create_generated_clock -name clk_125M -source clk_150M -multiply_by 5 -divide_by 6 [get_pins {inst1|pll_c5gx_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}]
create_generated_clock -name CLK_TX1 -source [get_pins {inst1|pll_c5gx_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] [get_ports {CLK_TX1}]
create_clock -name virtual_source1 -period 125MHz
derive_pll_clocks
derive_clock_uncertainty
create_clock -name CLK_RX1 -period 125MHz [get_ports CLK_RX1]
create_generated_clock -name clk_125M -source clk_150M -multiply_by 5 -divide_by 6 [get_pins {inst1|pll_c5gx_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}]
create_generated_clock -name CLK_TX1 -source [get_pins {inst1|pll_c5gx_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}] [get_ports {CLK_TX1}]
create_clock -name virtual_source1 -period 125MHz
derive_pll_clocks
derive_clock_uncertainty
Дальше задал ограничение на выход шины bidir1_data_bus:
Код
set Tx_max 4.0
set Tx_min -1.0
set_output_delay -max $Tx_max -clock CLK_TX1 [get_ports bidir1_data_bus*]
set_output_delay -min $Tx_min -clock CLK_TX1 [get_ports bidir1_data_bus*]
set Tx_min -1.0
set_output_delay -max $Tx_max -clock CLK_TX1 [get_ports bidir1_data_bus*]
set_output_delay -min $Tx_min -clock CLK_TX1 [get_ports bidir1_data_bus*]
Здесь предполагается, что Tsu и Th приемника этих данных от ПЛИС будет 4.0нс и 1нс соответственно
Дальше в Assignment'ах добавил настройки для bidir1_data_bus и сигнала, управляющего переводом ее в третье состояние:
Код
bidir1_data_bus Fast Output Register
Slave_bidir_Tx:inst5|en_buf_rg_out1 Fast Output Enable Register
Slave_bidir_Tx:inst5|en_buf_rg_out1 Fast Output Enable Register
Компилирую, запускаю TimeQuest, делаю Report All I/O Timings
Смотрю отчет Register to Outputs(Setup) - вроде по Setup укладывается
Смотрю отчет Register to Outputs(Hold) - краснота, не укладывается.
.png)
Много читал AN433 и другие документы по заданию ограничений на вводы/выводы. Везде пишут
Output maximum delay value = maximum trace delay for data + Tsu of external register - minimum trace delay for clock
Output minimum delay = minimum trace delay for data -Th of external register - maximum trace delay for clock
Если пренебречь trace delay for data и trace delay for clock, то это вырождается в
Output maximum delay value = + Tsu of external register
Output minimum delay = -Th of external register
Это я и задаю в set_output_delay max/min
Если правильно задаю констрейны и правильно описаны клоки, то почему не укладывается по Hold'у ?
И как заставить уложиться по Hold'у ?
Не нашел кнопки прикрепления файла. Вот ссылка на архив проекта