В этом примере показано, как применять ограничения многоцикловой траектории в конструкции для соответствия требованиям синхронизации. Использование ограничений многоциклового пути позволяет сэкономить площадь и сократить время выполнения синтеза. Дополнительные сведения см. в документации по ограничениям многоцикловых путей на основе включения.
Алгоритмы, смоделированные в Simulink для генерации кода HDL, могут иметь несколько скоростей выборки. Эти множественные скорости могут быть частью модели Simulink или могут быть введены с вариантами кодера HDL, такими как избыточная выборка. При указанной избыточной выборке генерируемый код HDL будет выполняться в FPGA с более высокой тактовой частотой. Эта более высокая скорость позволяет начать дополнительную оптимизацию.
Когда кодер HDL сконфигурирован для использования одного тактового сигнала, он генерирует контроллер синхронизации для управления синхронизированными элементами, такими как задержки, при различных скоростях дискретизации с включением тактового сигнала. Эти включения синхросигнала синхронизируются с одним синхросигналом и переключаются на скорости, многократно более медленные, чем базовые синхросигналы. Пути передачи данных между парами медленных синхронизируемых элементов называются многоцикловыми путями, поскольку они позволяют данным проходить несколько тактов. Однако инструменты синтеза не могут вывести эту приемлемую задержку непосредственно из кода ЛПВП. Инструменты предполагают, что данные меняются каждый цикл и должны переходить из одного регистра в следующий в течение одного тактового цикла. Инструменты синтеза должны прилагать больше усилий для удовлетворения чрезмерного требования синхронизации и, следовательно, могут отказывать в синхронизации. Объявив набор путей данных многоцикловыми путями и предоставив фактическую синхронизацию этих путей инструменту синтеза нисходящего потока, кодер HDL может упростить и ускорить процесс выполнения требуемых временных ограничений для конструкции.
Этот пример демонстрирует, как генерировать ограничения многоциклового тракта в кодере HDL, чтобы можно было задать требования к синхронизации, что позволяет эффективно анализировать синхронизацию в инструменте синтеза.
В этом примере мы используем Xilinx Vivado 2016.4 post place and routing static timing analysis results for a Virtex7 device (xc7v2000t, fhg1761, -1), чтобы показать влияние включенных ограничений многоциклового пути. Подобное поведение имеют и другие средства и устройства синтеза. HDL Coder генерирует файлы ограничений формата XDC для Xilinx Vivado, формата UCF для Xilinx ISE и формата SDC для Altera Quartus II.
Рассмотрим пример, hdlcoder_multi_cycle_path_constraints.slx. Модель содержит фильтр прямой формы FIR с цепочкой сумматоров в критическом пути. В то время как скорость входных данных этого фильтра определена как 2MHz, мы хотим, чтобы эта конструкция работала как можно быстрее, чтобы она могла быть интегрирована с другими IP, требующими высокой частоты. Мы начинаем с выбора 130MHz тактовой частоты без какой-либо оптимизации синхронизации, устанавливая «Коэффициент избыточной дискретизации» на 65 и «TargetFrequency» на 130.
bdclose('all'); load_system('hdlcoder_multi_cycle_path_constraints'); open_system('hdlcoder_multi_cycle_path_constraints/Subsystem/Dot Product'); hdlset_param('hdlcoder_multi_cycle_path_constraints', 'Oversampling', 65); hdlset_param('hdlcoder_multi_cycle_path_constraints', 'TargetFrequency', 130); set_param('hdlcoder_multi_cycle_path_constraints', 'SimulationCommand', 'update');

Создайте ЛПВП с этими настройками и проверьте созданную модель. Обратите внимание, что созданная модель фактически идентична исходной модели.
makehdl('hdlcoder_multi_cycle_path_constraints/Subsystem'); load_system('gm_hdlcoder_multi_cycle_path_constraints'); set_param('gm_hdlcoder_multi_cycle_path_constraints', 'SimulationCommand', 'update'); open_system('gm_hdlcoder_multi_cycle_path_constraints/Subsystem/Dot Product');
### Generating HDL for 'hdlcoder_multi_cycle_path_constraints/Subsystem'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_multi_cycle_path_constraints', { 'HDL Code Generation' } )">hdlcoder_multi_cycle_path_constraints</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoder_multi_cycle_path_constraints'.
### Begin compilation of the model 'hdlcoder_multi_cycle_path_constraints'...
### Applying HDL optimizations on the model 'hdlcoder_multi_cycle_path_constraints'...
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_multi_cycle_path_constraints'.
### MESSAGE: The design requires 65 times faster clock with respect to the base rate = 2.
### Working on hdlcoder_multi_cycle_path_constraints/Subsystem/Dot Product as hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Dot_Product.vhd.
### Working on Subsystem_tc as hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_tc.vhd.
### Working on hdlcoder_multi_cycle_path_constraints/Subsystem as hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem.vhd.
### Generating package file hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_pkg.vhd.
### Code Generation for 'hdlcoder_multi_cycle_path_constraints' completed.
### Writing Vivado multicycle constraints XDC file <a href="matlab:edit('hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_constraints.xdc')">hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_constraints.xdc</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_report.html
### HDL check for 'hdlcoder_multi_cycle_path_constraints' complete with 0 errors, 0 warnings, and 1 messages.
### HDL code generation complete.

Сгенерированный HDL не удовлетворяет требованиям синхронизации для тактового сигнала на 130MHz. Как показано в фрагменте отчета о синхронизации ниже, требование синхронизации составляет 7,692 нс (1/130MHz), и отрицательный провал указывает на нарушение этого требования. Отчеты о времени других инструментов синтеза могут выглядеть иначе, хотя критический путь из этого примера конструкции останется прежним.

Мы собираемся использовать ограничения многоциклового тракта для удовлетворения требований к синхронизации. Проверьте исходную модель.
open_system('hdlcoder_multi_cycle_path_constraints/Subsystem');

Обратите внимание, что подсистема скалярного изделия окружена задержками, выполняющимися с требуемой скоростью передачи данных 2MHz. Из-за указанной избыточной дискретизации 65x конструкция может допускать несколько тактовых циклов для распространения данных через нее. Кодер HDL требует, чтобы многоцикловые области были окружены медленными синхронизированными элементами, такими как эти задержки, чтобы ограничения могли определять пути между ними как многоцикловые пути. Включите функцию Multiconstraints, и кодер HDL создаст дополнительный файл.
hdlset_param('hdlcoder_multi_cycle_path_constraints', 'MulticyclePathConstraints', 'on');
Мы можем даже увеличить целевую частоту до 300MHz.
hdlset_param('hdlcoder_multi_cycle_path_constraints', 'Oversampling', 150); hdlset_param('hdlcoder_multi_cycle_path_constraints', 'TargetFrequency', 300);
Создание ограничений HDL и многоцикловых путей.
makehdl('hdlcoder_multi_cycle_path_constraints/Subsystem');
### Generating HDL for 'hdlcoder_multi_cycle_path_constraints/Subsystem'.
### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoder_multi_cycle_path_constraints', { 'HDL Code Generation' } )">hdlcoder_multi_cycle_path_constraints</a> for HDL code generation parameters.
### Running HDL checks on the model 'hdlcoder_multi_cycle_path_constraints'.
### Begin compilation of the model 'hdlcoder_multi_cycle_path_constraints'...
### Applying HDL optimizations on the model 'hdlcoder_multi_cycle_path_constraints'...
### Begin model generation.
### Model generation complete.
### Begin VHDL Code Generation for 'hdlcoder_multi_cycle_path_constraints'.
### MESSAGE: The design requires 150 times faster clock with respect to the base rate = 2.
### Working on hdlcoder_multi_cycle_path_constraints/Subsystem/Dot Product as hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Dot_Product.vhd.
### Working on Subsystem_tc as hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_tc.vhd.
### Working on hdlcoder_multi_cycle_path_constraints/Subsystem as hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem.vhd.
### Generating package file hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_pkg.vhd.
### Code Generation for 'hdlcoder_multi_cycle_path_constraints' completed.
### Writing Vivado multicycle constraints XDC file <a href="matlab:edit('hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_constraints.xdc')">hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_constraints.xdc</a>
### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples3/tpff0237be/hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_report.html
### HDL check for 'hdlcoder_multi_cycle_path_constraints' complete with 0 errors, 0 warnings, and 1 messages.
### HDL code generation complete.
Проверьте созданный XDC-файл ограничения.
dbtype('hdl_prj/hdlsrc/hdlcoder_multi_cycle_path_constraints/Subsystem_constraints.xdc');
1 # Multicycle constraints for clock enable: Subsystem_tc.u1_d150_o0
2 set enbregcell [get_cells -hier -filter {mcp_info=="Subsystem_tc.u1_d150_o0"}]
3 set enbregnet [get_nets -of_objects [get_pins -of_objects $enbregcell -filter {DIRECTION == OUT}]]
4 set reglist [get_cells -of [filter [all_fanout -flat -endpoints_only $enbregnet] IS_ENABLE]]
5 set_multicycle_path 150 -setup -from $reglist -to $reglist -quiet
6 set_multicycle_path 149 -hold -from $reglist -to $reglist -quiet
7
Эти ограничения сначала находят триггеры, которые возбуждаются сигналом разрешения тактового сигнала 2MHz. Затем они определяют пути между этими многоцикловыми путями триггеров, чтобы обеспечить распространение данных до 150 циклов.
Проверьте созданную модель.
open_system('gm_hdlcoder_multi_cycle_path_constraints/Subsystem/Dot Product'); set_param('gm_hdlcoder_multi_cycle_path_constraints', 'SimulationCommand', 'update');

Сгенерированная модель и код ЛПВП идентичны предыдущим результатам, так как генерация разрешенных ограничений многоцикловых путей не изменяет архитектуру ЛПВП. Ранее конструкция не могла соответствовать требуемому времени в 130MHz. Однако при указании ограничений многоцикловой траектории эта конструкция может выполняться в 300MHz на FPGA.

Для понимания требований к таймированию инструментальными средствами синтеза требуются ограничения многоциклового тракта. Эта информация извлекается из модели Simulink, поскольку ее нельзя вывести из сгенерированного кода HDL. Ограничения многоциклового пути определяют пути между синхронизированными элементами, управляемыми одним и тем же включением синхронизации. В некоторых случаях он может не соответствовать требованиям к времени. Например, путь данных не распознается как многоцикловый путь, если он не перекрыт задержками на входе и выходе или находится между двумя задержками различной скорости. Поэтому, если необходимо использовать ограничения многоцикловой траектории для определенных деталей в конструкции, важно сохранить многоцикловые пути в этой области от изменения путем оптимизации, вводя трубопроводы, такие как конвейер ввода и вывода, конвейер тактовой частоты, адаптивный конвейерный обмен ресурсами, потоковые, конвейерные математические операции, например, метод Ньютона-Рафсона для sqrt или recip, алгоритм Кордика для тригонометрических функций и отображение IP с плавающей запятой.