Как указать многоцикловое ограничение для всех путей, используя определенные часы (в Vivado)?

Я разрабатываю огромную систему на ПЛИС, работающую на системной частоте 320 МГц. Некоторые операции должны выполняться на более медленных тактовых частотах — 160 МГц из-за длинных критических путей. Я могу ввести сигнал включения часов, назовем его CE2, используемый регистрами, связанными с такими длительными операциями.

Согласно старой документации Xilinx: http://www.xilinx.com/itp/xilinx10/books/docs/timing_constraints_ug/timing_constraints_ug.pdf (стр. 60), я могу добавить специальное ограничение:

NET CE2 TNM = slow_exception;
NET clk TNM = normal;
TIMESPEC TS01 = PERIOD normal 8 ns;
TIMESPEC TS02 = FROM slow_exception TO slow_exception TS01*2;

определение такого многоциклового временного ограничения. К сожалению, описанный выше случай не описан в более новых версиях документации, особенно в документации по инструментам Vivado.

Кто-нибудь знает, как решить указанную выше проблему в файле XDC для Vivado?


person wzab    schedule 15.12.2014    source источник
comment
Если это значительный объем логики, было бы лучше разделить ее на домен 160 МГц, предполагая, что пересечениями доменов можно управлять.   -  person Kevin Thibedeau    schedule 15.12.2014
comment
К сожалению, количество пересечений доменов будет слишком большим. Я очень полагаюсь на тот факт, что тактовые частоты 160 МГц и 320 МГц совпадают по фазе. Возможно, я мог бы использовать PLL, чтобы сохранить разумное соотношение фаз, но это кажется слишком рискованным. В любом случае, если это можно было сделать в ISE, я надеюсь, что это можно сделать и в Vivado...   -  person wzab    schedule 15.12.2014
comment
А UG903? В нем описывается, как настроить часы, связанные часы (гл. 4) и как указать ограничения на несколько циклов (гл. 6).   -  person Paebbels    schedule 16.12.2014
comment
Проблема заключается в том, как автоматически создавать многоцикловые ограничения для всех сигналов, соединяющих регистры, используя определенное разрешение часов. Я также задал этот вопрос на форуме Xilinx и получил очень хороший ответ: forums.xilinx.com/t5/Timing-Analysis/   -  person wzab    schedule 16.12.2014
comment
Что касается использования только фазозависимых тактовых импульсов половинной скорости (сгенерированных из внутренней PLL), я видел, как это делается, и это работает очень хорошо. Вы также можете просто применить общее ограничение пути данных только между двумя тактовыми доменами (используйте более короткий период), чтобы избежать многочисленных исключений времени. Не синхронизированный путь часов не так точен, но у нас никогда не было проблем с ним в температурной камере и долгосрочных тестах надежности, когда он работает немного быстрее, чем скорости, которые вы упомянули.   -  person QuantumRipple    schedule 18.12.2014


Ответы (1)


Новый способ выполнения многоцикловых ограничений в Vivado указывает количество циклов, а не прямой период.

Вы также можете использовать ограничения datapath_only для ложных путей и пересечений часов, которые больше похожи на то, что вы использовали в ISE. Это ограничение datapath_only:

create_clock -period 8.000 -name arbitraryClkName -waveform {0.000  4.000} [get_ports portName];
set_max_delay -from [get_pins {hierarchical_location_source/CLK}] -to [get_clocks arbitraryClkName] -datapath_only 16.000;

Вот реальная команда многоциклового удержания:

set_multicycle_path -hold 2 -from [get_pins {hierarchical_location_source/CLK}] -to [get_pins {hierarchical_location_sink/D}];

Вот документация по ограничениям для Vivado 2014.3; вы можете найти документацию по многоцикловому пути на странице 79: http://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_3/ug903-vivado-using-constraints.pdf

person QuantumRipple    schedule 17.12.2014