Собственный компонент HDL Coder™ технология с плавающей точкой может сгенерировать независимый от цели HDL-код из вашего проекта с плавающей точкой. Можно синтезировать проект с плавающей точкой на любом типовом FPGA или ASIC. Проекты с плавающей точкой имеют лучшую точность, более высокий динамический диапазон и более короткий цикл разработки, чем проекты фиксированной точки. Если ваш проект имеет комплексную математику и тригонометрические операции, используйте нативную технологию с плавающей точкой.
Этот рисунок показывает, как HDL Coder генерирует код с нативной технологией с плавающей точкой.
Unpack
и Pack
блоки преобразуют типы с плавающей точкой в знак, экспоненту и мантиссу. В фигуре S, E и M представляют знак, экспоненту и мантиссу соответственно. Эта интерпретация основана на стандарте IEEE 754 арифметики с плавающей точкой.
Блок Floating-Point Algorithm Implementation выполняет расчеты на S, E и M. С этим преобразованием сгенерированный HDL-код независим от цели. Можно развернуть проект на любом типовом FPGA или ASIC.
Можно сгенерировать код в диалоговом окне Configuration Parameters или в командной строке.
Задавать нативные настройки с плавающей точкой и генерировать HDL-код в диалоговом окне Configuration Parameters:
Во вкладке Apps выберите HDL Coder. Вкладка HDL Code появляется.
Нажмите Settings. В HDL Code Generation> панель Floating Point, для Library, выбирают Native Floating Point
.
Задайте Latency Strategy, чтобы сопоставить ваш проект с максимальной или минимальной задержкой или никакой задержкой.
Если у вас есть нестандартные числа в вашем проекте, выберите Handle Denormals. Нестандартные числа являются числами, которые имеют равное нулю поле экспоненты и ненулевое поле мантиссы. Смотрите Указатель Denormals.
Если ваш проект имеет множители, чтобы задать, как вы хотите, чтобы HDL Coder реализовал операцию умножения, используйте Mantissa Multiplier Strategy. См. Стратегию Множителя Мантиссы.
Чтобы совместно использовать ресурсы с плавающей точкой, на вкладке HDL Code Generation> Optimizations> Resource Sharing, убеждаются, что вы выбираете Floating-point IPs. Количество блоков, которые совместно используются, зависит от SharingFactor, который вы задаете для подсистемы.
Нажмите 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 в диалоговом окне Configuration Parameters, на панели HDL Code Generation, включают Generate resource utilization report и Generate optimization report. См. также Создают и Отчеты Генерации кода Использования.
Видеть список нативных операторов с плавающей точкой что поддержки HDL Coder и операторы с плавающей точкой, к которым ваши блоки Simulink®, сопоставленные с, в Отчете Генерации кода, выбирают Native Floating-Point Resource Report.
Подробный отчет показывает различные ресурсы, что блоки с плавающей точкой используют на целевом устройстве, которое вы задаете. См. также Создают и Отчеты Генерации кода Использования.
Видеть нативные настройки с плавающей точкой, что вы обратились к модели и выбирает ли HDL Coder успешно сгенерированный HDL-код, в Отчете Генерации кода, 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, NFP Sqrt и аккуратный NFP соответствуют реализации с плавающей точкой 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-код в нативном режиме с плавающей точкой, используйте дискретные шаги расчета. Блоки, действующие во время непрерывной выборки, не поддержаны.