Задержка балансировки на многоскоростных проектах

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

Введение

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

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

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

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

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

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

open_system('hdlcoder_multirate_delaybalancing');

Инструкции для пользователей

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

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

Рекомендация № 1: Удаление непреднамеренных мультирейсов

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

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

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

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

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

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

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

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

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

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

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

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