Сгенерируйте независимый от цели HDL-код с собственной плавающей точкой

HDL Coder™ собственная технология с плавающей точкой может сгенерировать независимый от цели HDL-код из вашего проекта с плавающей точкой. Синтезировать проект с плавающей точкой можно на любых типовых FPGA или ASIC. Проекты с плавающей точкой имеют лучшую точность, более высокую динамическую область значений и более короткий цикл разработки, чем проекты с фиксированной точкой. Если ваш проект имеет сложные математические и тригонометрические операции, используйте собственную технологию с плавающей точкой.

Как HDL Coder генерирует независимый от цели HDL код

Этот рисунок показывает, как HDL Coder генерирует код с собственной технологией с плавающей точкой.

The Unpack и Pack блоки преобразуют типы с плавающей точкой в знак, экспоненту и мантиссу. На рисунке S, E и M представляют знак, экспоненту и мантиссу соответственно. Эта интерпретация основана на IEEE-754 стандарте арифметики с плавающей точкой.

Блок Floating-Point Algorithm Implementation выполняет расчеты на S, E и M. При таком преобразовании сгенерированный HDL-код не зависит от цели. Можно развернуть проект на любом типовом FPGA или ASIC.

Включите нативную плавающую точку и сгенерируйте код

Сгенерировать код можно в диалоговом окне Параметров конфигурации или в командной строке.

Чтобы задать собственные настройки с плавающей точкой и сгенерировать HDL-код в диалоговом окне Параметров конфигурации:

  1. На вкладке Apps выберите HDL Coder. Появится вкладка HDL Code.

  2. Нажмите Settings. На панели HDL Code Generation > Floating Point для Library выберите Native Floating Point.

  3. Задайте Latency Strategy, чтобы сопоставить ваш проект с максимальной или минимальной задержкой или без задержки.

  4. Если у вас в проекте есть денормальные числа, выберите Handle Denormals. Денормальные числа являются числами, которые имеют поле экспоненты, равное нулю и ненулевое поле мантиссы. Смотри Handle Denormals.

  5. Если ваш проект имеет умножители, чтобы указать, как вы хотите, чтобы HDL Coder реализовал операцию умножения, используйте Mantissa Multiplier Strategy. См. «Стратегия умножения мантиссы».

  6. Чтобы совместно использовать ресурсы с плавающей точкой, на вкладке HDL Code Generation Optimizations > Resource Sharing > убедитесь, что вы выбрали Floating-point IPs. Количество блоков, которые получают общий доступ, зависит от SharingFactor, которую вы задаете для подсистемы.

  7. Нажмите Apply. На вкладке HDL Code нажмите Generate HDL Code.

Чтобы сгенерировать HDL-код в командной строке, используйте hdlcoder.createFloatingPointTargetConfig функция. Можно использовать эту функцию для создания hdlcoder.FloatingPointTargetConfig объект для собственной библиотеки с плавающей точкой.

nfpconfig = hdlcoder.createFloatingPointTargetConfig('NATIVEFLOATINGPOINT');
hdlset_param('sfir_single', 'FloatingPointTargetConfiguration', nfpconfig);

Опционально можно задать стратегию задержки и то, хотите ли вы, чтобы HDL Coder обрабатывал денормальные числа в вашем проекте:

nfpconfig.LibrarySettings.HandleDenormals = 'on';
nfpconfig.LibrarySettings.LatencyStrategy = 'MAX';

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

Просмотр отчета генерации кода

Чтобы просмотреть отчеты генерации кода отображения библиотеки с плавающей точкой, прежде чем вы начнете генерацию кода, включите генерацию Отчета об использовании ресурсов и Отчета об оптимизации. Чтобы включить отчеты, на вкладке HDL Code нажмите Settings > Report Options в диалоговом окне Параметры конфигурации, на панели HDL Code Generation, включите Generate resource utilization report и Generate optimization report. См. также Создание и использование отчетов генерации кода.

Чтобы увидеть список собственных операторов с плавающей точкой, которые поддерживает HDL Coder, и операторов с плавающей точкой, которым ваш Simulink® блоки, сопоставленные с, в отчете генерации кода выберите Native Floating-Point Resource Report.

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

Чтобы увидеть собственные настройки с плавающей точкой, которые вы применили к модели, и сгенерированный HDL-код ли HDL Coder успешен, в отчете генерации кода выберите Target Code Generation.

Анализ результатов

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

Блок MATLAB Function в модели Simulink содержит этот код.

function y = fcn(u, w)
%#codegen

y1 = (u+w) * 20;
y2 = w^16;
y3 = (u-w) / 10;
y = y1 + y2 - y3;

Когда вы генерируете HDL-код, генератор кода сопоставляет блоки в вашей модели Simulink с синтезируемыми собственными операторами с плавающей точкой. Чтобы увидеть, как генератор кода реализовал операции с плавающей точкой, откройте сгенерированную модель. Блоки NFP math, NFP Sqrt и NFP trig соответствуют реализации с плавающей точкой блоков Reciprocal Sqrt, Reciprocal, sin и cos соответственно в вашей исходной модели.

Каждый оператор с плавающей точкой имеет задержку. Генератор кода вставил дополнительную задержку соответствия, потому что задержка Reciprocal Sqrt 30 и задержка Reciprocal 31. Задержка оператора равна Delay length блока Delay внутри этого NFP блок. Для примера, если вы дважды кликните NFP sqrt блок, вы можете получить задержку, посмотрев на Delay length Delay блок. См. «Значения задержек операторов с плавающей точкой».

Когда вы используете блоки MATLAB Function с типами данных с плавающей точкой, HDL Coder использует MATLAB Datapath архитектура. Эта архитектура обрабатывает MATLAB Function блок как обычный Subsystem блок. Когда вы генерируете код, генератор кода сопоставляет основные операции, такие как сложение и умножение, с соответствующими собственными операторами с плавающей точкой. Откройте MATLAB Function подсистема, чтобы увидеть, как генератор кода реализовал блок MATLAB Function.

Чтобы узнать больше о сгенерированной модели, см. Сгенерированные Модель и Модель Валидации.

Ограничение

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

См. также

Руководства по моделированию

Функции

Похожие примеры

Подробнее о