exponenta event banner

Балансировка задержки в многоскоростных конструкциях

Этот пример показывает, как неизбирательное использование скоростей Simulate в многоскоростной конструкции может генерировать нежелательный код HDL, и дает несколько рекомендаций по оптимальной генерации кода.

Введение

Эта примерная модель содержит 3 подсистемы, первая демонстрирует проблему, а другие предоставляют практические способы решения проблемы.

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

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

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

Большое количество регистров в области быстрой тактовой частоты имеет нежелательный эффект после генерации HDL-кода: # Сгенерированные HDL-файлы сами по себе очень велики. # Большое количество регистров трубопроводов сделает установку конструкции в FPGA невозможной.

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

open_system('hdlcoder_multirate_delaybalancing');

Руководящие принципы для пользователей

Пользовательские модели Simulink могут иметь разные пути тактовой частоты из-за различных причин моделирования. При наличии оптимизаций, таких как конвейеризация ввода-вывода, распределенная конвейеризация, потоковая передача и/или совместное использование или многоцикловые операции, такие как IP с плавающей запятой, математические функции с фиксированной запятой, такие как sqrt или деление, вводятся конвейеры, которые применяются с той же скоростью, с которой работает сигнальный тракт.

Введение любой дополнительной конвейерной обработки приводит к нежелательным задержкам, которые должны быть сбалансированы между несколькими выходными путями, работающими с различной скоростью. Если разница в соотношении между самой быстрой и самой медленной тактовой частотой в модели Simulink очень велика, это вызывает формирование большого количества регистров в конечном коде HDL. Файлы HDL становятся большими, и дизайн может даже не поместиться в FPGA.

Рекомендация № 1: Устранение непреднамеренных множественных тарифов

Пользователь может не знать о нежелательном влиянии дифференциала скорости его модели на код ЛПВП. Например, в вышеупомянутой модели частота дискретизации, определенная в блоке констант, не была должным образом учтена и задала ее значение, которое вызвало разность скоростей 10E06 с базовой скоростью модели. Такая высокая «разница в ставках» казалась непреднамеренной.

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

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

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

Нежелательного большого числа регистров не существует.

Рекомендация № 2: Сохранить разницу в ставках на практике

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

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

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

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

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

> > hdlset_param (gcs, 'MapPipelineToRAM', 'on');