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

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

Введение

Алгоритмы, моделированные в Simulink для генерации HDL-кода, могут иметь несколько частот дискретизации. Эти несколько уровней могут быть частью модели Simulink или могут быть начаты с опций HDL Coder, таких как сверхдискретизация. Со сверхдискретизацией заданного, сгенерированный HDL-код будет работать на FPGA на более быстрой тактовой частоте. Этот более быстрый уровень позволяет дополнительной оптимизации вступать в силу.

Когда HDL Coder сконфигурирован, чтобы использовать одни часы, он генерирует контроллер синхронизации, чтобы управлять синхронизированными элементами, такими как задержки, на уровне различных частот дискретизации с часами включает. Они синхронизируют, включает, синхронны к одним часам и переключателю на уровнях, которые многократно медленнее, чем основные часы. Информационные каналы между медленными синхронизированными парами элемента называются мультивелосипедными дорожками, потому что они позволяют данным брать несколько тактов, чтобы переместиться. Однако инструменты синтеза не могут вывести эту приемлемую задержку непосредственно из HDL-кода. Инструменты принимают, что данные изменяют каждый цикл и должны переместиться от одного регистра до следующего в одном такте. Инструменты синтеза должны приложить больше усилий, чтобы удовлетворить чрезмерное требование синхронизации и поэтому могут привести синхронизацию к сбою. Путем объявления набора информационных каналов как мультивелосипедные дорожки и обеспечения фактической синхронизации этих путей к нисходящему инструменту синтеза, HDL Coder может упростить и ускорить процесс встречи желаемых ограничений синхронизации для проекта.

Этот пример демонстрирует, как сгенерировать ограничения мультивелосипедной дорожки в HDL Coder так, чтобы синхронизация требований могла быть задана, позволив эффективный анализ синхронизации в инструменте синтеза.

Применение ограничений мультицикла с помощью HDL Coder

В этом примере мы используем место сообщения Xilinx Vivado 2016.4 и маршрутизацию статических результатов анализа синхронизации для устройства Virtex7 (xc7v2000t, fhg1761,-1), чтобы показать удар активированных основанных ограничений мультивелосипедной дорожки. Другие инструменты синтеза и устройства имеют подобное поведение. HDL Coder генерирует ограничительные файлы формата XDC для Xilinx Vivado, формата UCF для Xilinx ISE и формат SDC для Altera Куарт II.

Рассмотрите пример, hdlcoder_multi_cycle_path_constraints.slx. Модель содержит прямой КИХ-фильтр формы с цепью сумматора в критическом пути. В то время как уровень входных данных этого фильтра задан, чтобы быть 2 МГц, мы хотим, чтобы этот проект запустился максимально быстро так, чтобы это могло быть интегрировано с другой высокой частотой требования дюйм/с. Мы запускаем путем выбора тактовой частоты на 130 МГц без любой оптимизации синхронизации установкой 'Oversampling factor' к 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');

Сгенерируйте HDL с этими настройками и смотрите сгенерированную модель. Заметьте, что сгенерированная модель на самом деле идентична исходной модели.

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'...
### <a href="matlab:configset.internal.open('hdlcoder_multi_cycle_path_constraints','AdaptivePipelining')">'AdaptivePipelining'</a> is set to 'Off' for the model. 'AdaptivePipelining' can improve the achievable clock frequency and reduce the area usage on FPGA boards. To enable adaptive pipelining, set the option to 'On'. When adaptive pipelining is enabled, it inserts pipeline registers to create patterns that efficiently map blocks to DSP units on the target FPGA device.
### <a href="matlab:configset.internal.open('hdlcoder_multi_cycle_path_constraints','LUTMapToRAM')">'LUTMapToRAM'</a> is set to 'On' for the model. This option is used to map lookup tables to a block RAM in hardware.  To disable pipeline insertion for mapping lookup tables to RAM, set the option to 'Off'.
### 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/BR2021bd_1724986_151598/publish_examples3/tpc8c4f2ed/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 3 messages.
### HDL code generation complete.

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

Мы собираемся использовать ограничения мультивелосипедной дорожки, чтобы удовлетворить требования синхронизации. Проверяйте исходную модель.

open_system('hdlcoder_multi_cycle_path_constraints/Subsystem');

Заметьте, что подсистема Скалярного произведения окружается задержками, запускающимися на желаемой скорости передачи данных на 2 МГц. Из-за заданного 65x сверхдискретизация, проект может терпеть несколько тактов для данных, чтобы распространить через него. HDL Coder требует, чтобы области мультицикла были окружены медленными синхронизированными элементами, такими как эти задержки, так, чтобы ограничения могли задать пути среди них как мультивелосипедные дорожки. Включите MulticyclePathConstraints, и HDL Coder сгенерирует дополнительный файл.

hdlset_param('hdlcoder_multi_cycle_path_constraints', 'MulticyclePathConstraints', 'on');

Мы можем даже увеличить целевую частоту до 300 МГц.

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'...
### <a href="matlab:configset.internal.open('hdlcoder_multi_cycle_path_constraints','AdaptivePipelining')">'AdaptivePipelining'</a> is set to 'Off' for the model. 'AdaptivePipelining' can improve the achievable clock frequency and reduce the area usage on FPGA boards. To enable adaptive pipelining, set the option to 'On'. When adaptive pipelining is enabled, it inserts pipeline registers to create patterns that efficiently map blocks to DSP units on the target FPGA device.
### <a href="matlab:configset.internal.open('hdlcoder_multi_cycle_path_constraints','LUTMapToRAM')">'LUTMapToRAM'</a> is set to 'On' for the model. This option is used to map lookup tables to a block RAM in hardware.  To disable pipeline insertion for mapping lookup tables to RAM, set the option to 'Off'.
### 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/BR2021bd_1724986_151598/publish_examples3/tpc8c4f2ed/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 3 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     

Эти ограничения сначала находят вьетнамки, которые управляются часами на 2 МГц, включают сигнал. Затем они задают пути среди этих мультивелосипедных дорожек вьетнамки, чтобы позволить до 150 циклов для данных распространять.

Смотрите сгенерированную модель.

open_system('gm_hdlcoder_multi_cycle_path_constraints/Subsystem/Dot Product');
set_param('gm_hdlcoder_multi_cycle_path_constraints', 'SimulationCommand', 'update');

Сгенерированная модель и HDL-код идентичны предыдущим результатам, потому что генерация активированных основанных ограничений мультивелосипедной дорожки не изменяет архитектуру HDL. Проект ранее не мог соответствовать желаемой синхронизации на уровне 130 МГц. Однако, когда вы задаете ограничения мультивелосипедной дорожки, этот проект может достигнуть 300 МГц на FPGA.

Дополнительная информация об ограничениях мультивелосипедной дорожки:

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

Для просмотра документации необходимо авторизоваться на сайте