Если ваш Simulink® модель содержит несколько частот дискретизации или использует оптимизацию скорости и площади, которая вставляет регистры трубопровода, ваш проект может иметь многоядерные пути. Многоядерные пути являются путями данных между двумя регистрами, которые работают со скоростью дискретизации медленнее, чем тактовая частота FPGA, и, следовательно, берут несколько тактов, чтобы завершить их выполнение. Чтобы синхронизировать тактовую частоту с частотой дискретизации различных путей в вашем проекте, можно использовать один синхроимпульс или несколько синхроимпульсов. По умолчанию HDL- Coder™ использует один синхроимпульс, который генерирует один главный синхроимпульс с самой быстрой частотой дискретизации и создает сущность контроллера синхронизации, чтобы управлять тактовой частотой для многоканальных путей. Контроллер синхронизации генерирует набор синхроимпульсов с необходимой информацией о скорости и фазе, чтобы управлять последовательными элементами, такими как блоки Delay, которые работают с различными скоростями дискретизации.
Когда вы синтезируете сгенерированный HDL-код, инструменты синтеза могут не соответствовать требованиям к синхронизации многоколесных путей. Отказ синхронизации происходит, потому что инструменты синтеза не могут вывести различные частоты дискретизации в вашем проекте из сгенерированного HDL-кода. Инструменты синтеза предполагают, что регистры в вашем проекте выполняются с тактовой частотой и требуют, чтобы данные перемещались между регистрами в течение одного тактового цикла. Однако многоколесные пути не требуются для завершения их выполнения в течение одного такта и, следовательно, не могут удовлетворять требованиям синхронизации. Чтобы соответствовать требованиям к синхронизации, задайте генерацию основанных на активации ограничивающих многоколесных путей.
Инструменты синтеза требуют, чтобы данные распространялись из регистра источника в регистр назначения в течение одного такта. Многоядерные ограничения пути ослабляют это требование синхронизации, позволяя нескольким тактам для данных распространяться между регистрами. Генератор кода использует сигналы разрешения контроллера синхронизации, чтобы создать основанные на активации группы регистров с регистрами в каждой группе, управляемыми одним и тем же разрешением синхроимпульса. Когда вы применяете основанные на разрешении ограничения и генерируете HDL-код, генератор кода выводит файл ограничений с соглашением об именовании dutname_constraints
. Файл определяет требования к синхронизации многоядерных путей и содержит информацию об ограничениях настройки и удержания, которые необходимо выполнить.
Этот рисунок показывает многоколесный путь, который принимает определенное количество тактовых импульсов, скажем N
, для распространения данных из REGA
на REGB
. По умолчанию инструменты синтеза определяют ребро настройки на следующем активном ребре синхроимпульса и ребро удержания на том же активном ребре синхроимпульса относительно целевого синхроимпульса. Для многожильного пути, который принимает N
синхроимпульсы, ограничения переопределяют настройку и удерживают ребро, чтобы обеспечить более длительное время распространения данных.
Для примера рассмотрим многоцикл, путь принимает два такта для данных верхних частей распространения из источника в регистр назначения. Эта форма волны показов, как применение основанных на разрешении ограничений переопределяет ребра настройки и удержания. Этот фрагмент кода показывает это требование настройки и хранения в файле ограничений, который генерируется, когда вы включаете ограничения многоколесного пути.
Прежде чем вы сгенерируете основанные на enable ограничения, вы должны:
Сохраните многоколесные пути в проекте. Прежде чем вы включите генерацию ограничений многоколесного пути, убедитесь, что вы отключили оптимизацию, такие как конвейеризация по тактовой частоте и адаптивная конвейеризация в тех областях, где вы хотите применить ограничения многоколесного пути.
Убедитесь, что область, которая работает с более низкой частотой синхроимпульса, ограничена тактовыми сигналами, работающими в нулевой фазе, основанными на контроллере синхронизации.
Задайте Synthesis tool. Формат файла ограничений многожильного пути, который генерируется, зависит от заданного Synthesis tool. Если вы не задаете инструмент синтеза и установлен флажок Generate EDA Scripts, HDL Coder не генерирует ограничения многоколесного пути.
Используйте режим одиночного синхроимпульса. На панели HDL Code Generation > Global Settings задайте Clock Inputs Single
.
Можно задать генерацию многоколесных ограничений в диалоговом окне Параметров конфигурации, или в HDL Workflow Advisor UI, или в командной строке.
В диалоговом окне Параметры конфигурации на панели HDL Code Generation > Target and Optimizations установите флажок Enable based constraints.
В HDL Workflow Advisor, в задаче HDL Code Generation > Set Code Generation Options > Set Optimization Options установите флажок Enable based constraints.
В командной строке используйте MulticyclePathConstraints
свойство с hdlset_param
или makehdl
.
Если инструменты синтеза идентифицируют ограничения многоколесного пути, можно:
Реализуйте более высокие тактовые частоты и улучшите время вашего проекта.
Уменьшите размер площади на целевом устройстве FPGA, потому что ограничения многоколесного пути не вводят никакие регистры трубопровода.
Уменьшите время генерации HDL-кода, потому что генератор кода не должен запускать много настроек оптимизации.
Уменьшите время синтеза, так как ограничения многоколесного пути ослабляют требования к синхронизации на инструменте синтеза.
Пропустите верификацию своего проекта после генерации HDL-кода, поскольку сгенерированная модель с ограничениями идентична исходной модели.
Когда вы задаете информацию о многокилометровом пути для инструмента синтеза, не рекомендуется использовать настройку Register-to-register path info в панели Target and Optimizations. Если вы используете эту настройку, генератор кода выводит текстовый файл, который описывает информацию о многоканальном пути в формате, который не является собственным для конкретного инструмента синтеза. Вы должны преобразовать эту информацию в формат ограничивающих многожильных путей, требуемый вашим инструментом синтеза.
При использовании параметра enable-based constraints:
Сгенерированные ограничения более устойчивы, чтобы называть изменения в инструментах синтеза.
Генерация HDL-кода происходит быстрее, чем при использовании параметра Register-to-register path info.
Можно Target workflow Generic ASIC/FPGA
, FPGA Turnkey
, IP Core Generation
, и Simulink Real-Time FPGA I/O
.
Формат файла ограничений поддерживается Xilinx ISE
, Xilinx Vivado
, и Altera QUARTUS II
.
Когда вы задаете генерацию основанных на разрешении ограничений, используйте эти шаблоны моделирования в проекте. Если ваша модель содержит области с медленной скоростью, которые не ограничены регистрами, то добавьте задержки с той же медленной частотой к входу и выходу областей с медленной частотой. Для примера, если вы вводите hdlcoder_clockdemo
в командной строке в MATLAB®, вы видите многоуровневый фильтр CIC Interpolation, реализованный в режиме с одним синхроимпульсом. Этот рисунок показывает, как связать вход и выход области с медленной скоростью, аннотированной медленным шагом расчета D2
в модели с Unit Delay блоками так, что основанные на разрешении ограничения могут идентифицировать путь с медленной скоростью.
Примечание
Можно использовать Rate Transition блоки, чтобы ввести входной и выходной регистры, но убедитесь, что регистры являются медленными и имеют нулевую фазу.
Многоколесные пути на основе включения имеют различные форматы файлов, которые зависят от заданной Synthesis tool.
HDL Coder генерирует ограничения в виде SDC
файл. Этот фрагмент кода показывает SDC
файл, сгенерированный для Altera® Куарт® II.
# Multicycle constraints for clock enable: DUT_tc.u1_d4_o0 set enbreg [get_registers *u_DUT_tc|phase_0] set_multicycle_path 4 -to [get_fanouts $enbreg -through [get_pins -hier *|ena]] -end -setup set_multicycle_path 3 -to [get_fanouts $enbreg -through [get_pins -hier *|ena]] -end -hold
HDL Coder генерирует ограничения в виде XDC
файл. Этот фрагмент кода показывает XDC
файл, сгенерированный для Xilinx® Vivado®.
# Multicycle constraints for clock enable: DUT_tc.u1_d4_o0 set enbregcell [get_cells -hier -filter {mcp_info=="DUT_tc.u1_d4_o0"}] set enbregnet [get_nets -of_objects [get_pins -of_objects $enbregcell -filter {DIRECTION == OUT}]] set reglist [get_cells -of [filter [all_fanout -flat -endpoints_only $enbregnet] IS_ENABLE]] set_multicycle_path 4 -setup -from $reglist -to $reglist -quiet set_multicycle_path 3 -hold -from $reglist -to $reglist -quiet
Ограничения многоколесного пути формируют основанные на активации группы регистров, запрашивая список синтезирующих сетей для ATTRIBUTE
ключевое слово. Этот фрагмент кода показывает это ключевое слово в списке сетей синтеза, когда вы запускаете любой из поддерживаемых целевых рабочих процессов.
... ATTRIBUTE mcp_info: string ATTRIBUTE mcp_info OF phase_0 : SIGNAL IS "DUT_tc.u1_d4_o0"; ...
HDL Coder генерирует ограничения в виде UCF
файл. Этот фрагмент кода показывает UCF
файл, сгенерированный для модели, которая имеет одну медленную область, управляемую сигналом включения синхроимпульса, и имеет целевую частоту 300MHz
. Фрагмент показывает, что ограничения многоколесного пути зависят от заданного Target Frequency.
# Multicycle constraints for clock enable: DUT_tc.u1_d4_o0 NET "*u_DUT_tc/phase_0" TNM_NET = FFS "TN_u_DUT_tc_phase_0"; TIMESPEC "TS_u_DUT_tc_phase_0" = FROM "TN_u_DUT_tc_phase_0" TO "TN_u_DUT_tc_phase_0" TS_FPGA_CLK/4;
Этот фрагмент кода показывает ограничения, которые генерируются при запуске Generic ASIC/FPGA
, FPGA Turnkey
, или Simulink Real-Time FPGA I/O
рабочий процесс с Xilinx ISE.
# Timing Specification Constraints NET "clk" TNM_NET = "TN_clk"; TIMESPEC "TS_FPGA_CLK" = PERIOD "TN_clk" 300 MHz;
Чтобы использовать ограничения многоколесного пути, когда вы генерируете HDL-код при помощи makehdl
function, убедитесь, что вы добавили TS_FPGA_CLK
ограничение на UCF
файл.
Файл ограничений многожильного пути не поддерживается FPGA-in-the-Loop
рабочий процесс.
Если медленная область не ограничена регистрами, многоколесные ограничения пути требуют, чтобы вы добавили два блока Delay с медленной скоростью, что увеличивает задержку вашего проекта.
Генератор кода не добавляет ограничения на пути между регистрами, которые имеют ненулевое значение фазы для основанных на контроллере синхронизации сигналов включения. Чтобы генератор кода добавлял ограничения, используйте регистры, которые получают из 0 фазы
тактовые сигналы, такие как блоки Delay.
Сгенерированные многоколесные ограничения могут быть менее эффективными, если вы применяете ограничения в областях, которые имеют оптимизацию, такие как конвейеризация с тактовой частотой и активизированное адаптивное конвейерирование. При конвейеризации с тактовой частотой регистры работают с более высокой тактовой частотой и, следовательно, могут не сохранять регистры с медленной частотой в вашем проекте.
HDL Coder не генерирует ограничения многоколесного пути для односкоростных моделей.
Генератор кода не выводит файл ограничений многожильного пути, если вы используете режим нескольких синхроимпульсов.