Этот пример показывает, как недискретное использование скоростей Simulate при многоскоростном проекте может сгенерировать нежелательный HDL-код, и предоставляет мало рекомендаций для оптимальной генерации кода.
Эта модель примера содержит 3 подсистемы, первая из которых демонстрирует проблему, а другие обеспечивают практические пути решения проблемы.
Обратите внимание на то, что в нижеследующем проекте есть два острова логики, которые работают по разным тарифам. Разница ставок между двумя ставками 10E-06, что является очень большим числом и, возможно, нереалистичным для практического проекта FPGA. Эта модель имеет блок Gain с плавающей точкой, мультициклический оператор, в области быстрых часов.
Запуская генерацию кода на этой модели, мы получаем:
Скомпилированная сгенерированная модель выглядит следующим образом. Обратите внимание, что высокая задержка на выходе в области быстрой тактовой частоты проекта добавлена для балансировки задержек на нескольких выходных путях системы.
Большое количество регистров в области быстрой тактовой частоты имеет нежелательный эффект после генерации HDL-кода: # Сгенерированные файлами HDL сами по себе очень большие. # Большое количество регистров трубопроводов сделает подбор кривой проекта в ПЛИС маловероятной.
Следующие разделы этого документа создают общую осведомленность об ограничении ресурсов, которое могут создавать многоскоростные модели при использовании в присутствии многоцикловых операций, и дают мало рекомендаций для оптимального использования ресурсов.
open_system('hdlcoder_multirate_delaybalancing');
Модели User Simulink могут иметь различные пути с тактовой частотой по разным причинам моделирования. В присутствии оптимизации, такой как конвейеризация ввода-вывода, распределенная конвейеризация, потоковая передача и/или совместное использование или многосекционные операции, такие как IP с плавающей точкой, математические функции с фиксированной точкой, такие как sqrt или delide, вводятся трубопроводы, которые применяются с той же скоростью, с которой работает путь сигнала.
Введение любой дополнительной конвейеризации вводит нежелательные накладные расходы на задержку, которые необходимо сбалансировать по нескольким выходным путям, работая с различными скоростями. Если различие отношений между самой быстрой и самой медленной тактовой частотой в модели Simulink очень велика, это заставляет сгенерировать большое количество регистров в конечном HDL-коде. HDL- файлов становятся большими, и конструкция может даже не вписываться в FPGA.
Пользователь может не знать о нежелательном эффекте, который дифференциал скорости его модели оказывает на HDL-код. Например, в вышеописанной модели частоте дискретизации, заданной в постоянном блоке, не уделяли должного фактора и устанавливали ее значение, которое вызывало дифференциал скорости 10E06 с базовой моделью скорости. Столь высокий «дифференциал скорости» казался непреднамеренным.
Нашим предложением было бы изменить частоту дискретизации постоянного блока, чтобы она выполнялась с той же скоростью, что и базовая модель, для такой ситуации.
Запуская генерацию кода на этой модели, мы получаем:
Обратите внимание, что число выхода задержек значительно уменьшилось. Скомпилированная сгенерированная модель выглядит следующим образом.
Нежелательного большого количества регистров не существует.
Если многоскоростное соединение является желательным свойством, которое необходимо пользователю, пользователь должен рассмотреть вопрос о том, чтобы сделать дифференциал скорости максимально практичным.
Например, если один путь проекта, работающего на 'ns', и другой путь его проекта на 'us' является желательной функцией проекта, пользователь все еще может принять решение иметь в своей модели многоскоростные пути с осознанием того, что балансировка задержки может вызвать большое количество регистров.
Запуская генерацию кода на этой модели, мы получаем:
Скомпилированная сгенерированная модель выглядит как рисунок ниже. В сгенерированной модели и HDL-коде у нас будет почти 1000 регистров в выходном пути быстрой тактовой частоты. Дополнительная стоимость регистров не является необычной для логики управления, которая работает в 1000 раз быстрее, чем система. Пользователю просто нужно быть в курсе аппаратных ресурсных ограничений для такой модели.
Чтобы оптимизировать общее количество регистров в FPGA, пользователь может также использовать функцию HDLCoder «Mapping pipelays to RAM». Это приведет к компромиссу ресурса ОЗУ для экономии на логической области.
> > hdlset_param (gcs, 'MapPipelineDelaysToRAM', ' on ');