Этот пример показывает, как неизбирательное использование скоростей Simulate в многоскоростной конструкции может генерировать нежелательный код HDL, и дает несколько рекомендаций по оптимальной генерации кода.
Эта примерная модель содержит 3 подсистемы, первая демонстрирует проблему, а другие предоставляют практические способы решения проблемы.
Пожалуйста, обратите внимание, что в приведенном ниже проекте есть два острова логики, оба работают по разным тарифам. Разница в скорости между двумя скоростями является 10E-06, что является очень большим числом и, возможно, нереалистичным для практической конструкции FPGA. Эта модель имеет блок усиления с плавающей запятой, многоцикловой оператор, в области быстрых часов.

Выполняя генерацию кода на этой модели, мы получаем:

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

Большое количество регистров в области быстрой тактовой частоты имеет нежелательный эффект после генерации HDL-кода: # Сгенерированные HDL-файлы сами по себе очень велики. # Большое количество регистров трубопроводов сделает установку конструкции в FPGA невозможной.
В следующих разделах этого документа содержится общее представление об ограничениях ресурсов, которые могут создаваться многоскоростными моделями при использовании в присутствии многоцикловых операций, а также несколько рекомендаций по оптимальному использованию ресурсов.
open_system('hdlcoder_multirate_delaybalancing');

Пользовательские модели Simulink могут иметь разные пути тактовой частоты из-за различных причин моделирования. При наличии оптимизаций, таких как конвейеризация ввода-вывода, распределенная конвейеризация, потоковая передача и/или совместное использование или многоцикловые операции, такие как IP с плавающей запятой, математические функции с фиксированной запятой, такие как sqrt или деление, вводятся конвейеры, которые применяются с той же скоростью, с которой работает сигнальный тракт.
Введение любой дополнительной конвейерной обработки приводит к нежелательным задержкам, которые должны быть сбалансированы между несколькими выходными путями, работающими с различной скоростью. Если разница в соотношении между самой быстрой и самой медленной тактовой частотой в модели Simulink очень велика, это вызывает формирование большого количества регистров в конечном коде HDL. Файлы HDL становятся большими, и дизайн может даже не поместиться в FPGA.
Пользователь может не знать о нежелательном влиянии дифференциала скорости его модели на код ЛПВП. Например, в вышеупомянутой модели частота дискретизации, определенная в блоке констант, не была должным образом учтена и задала ее значение, которое вызвало разность скоростей 10E06 с базовой скоростью модели. Такая высокая «разница в ставках» казалась непреднамеренной.
Наше предложение состояло бы в том, чтобы изменить частоту выборки постоянного блока для выполнения с той же скоростью, что и базовая модель, для такой ситуации.

Выполняя генерацию кода на этой модели, мы получаем:

Обратите внимание, что количество задержек на выходе значительно уменьшилось. Скомпилированная сгенерированная модель выглядит следующим образом.

Нежелательного большого числа регистров не существует.
Если многоскоростность является желательным свойством, которое необходимо пользователю, пользователь должен рассмотреть возможность сделать дифференциал скорости максимально практичным.
Например, если один путь конструкции, выполняющийся в «ns», и другой путь его конструкции находится в «us», является желательной особенностью конструкции, пользователь все же может выбрать многоскоростные пути в своей модели с осознанием того, что балансировка задержки может вызвать большое количество регистров.

Выполняя генерацию кода на этой модели, мы получаем:

Скомпилированная сгенерированная модель выглядит так, как показано на рисунке ниже. В генерируемой модели и коде HDL мы будем иметь около 1000 регистров в выходном тракте быстрой тактовой частоты. Дополнительная стоимость регистров не является необычной для логики управления, которая работает в 1000 раз быстрее, чем система. Пользователь должен знать об ограничениях аппаратных ресурсов для такой модели.

Для оптимизации общего количества регистров в FPGA пользователь может также использовать функцию HDLCoder «Mapping pipeline delays to RAM». Это позволит сэкономить ресурсы ОЗУ на логической области.
> > hdlset_param (gcs, 'MapPipelineToRAM', 'on');
