Факторы задержки с нативной плавающей точкой

Собственный компонент HDL Coder™ технология с плавающей точкой может сгенерировать HDL-код из вашего проекта с плавающей точкой. Нативные операторы с плавающей точкой имеют задержку. Когда вы генерируете HDL-код, генератор кода выясняет эту задержку и добавляет соответствие с задержками, чтобы сбалансировать параллельные пути.

Просмотрите задержку оператора с плавающей точкой

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

load_system('hdlcoder_nfp_delay_allocation')
open_system('hdlcoder_nfp_delay_allocation/DUT')

Сгенерировать HDL-код:

  1. Щелкните правой кнопкой по DUT Подсистема и выбирает HDL Code> Generate HDL for Subsystem.

  2. Чтобы видеть сгенерированную модель после генерации HDL-кода, в командной строке, вводят gm_hdlcoder_nfp_delay_allocation.

NFP Sqrt блок является оператором с плавающей точкой, соответствующим блоку Sqrt в вашей модели, и имеет задержку 28. Генератор кода определяет эту задержку и добавляет соответствующую задержку длины 28 в параллельном пути. Чтобы видеть задержку операции квадратного корня, дважды кликните NFP Sqrt блок. Длина Задержки Sqrt_pd1 блок соответствует задержке оператора.

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

  • Установка Latency Strategy: Задайте, сопоставить ли вашу целую модель Simulink™ или отдельные блоки в вашей модели к максимуму, минимуму или нулевой задержке оператора с плавающей точкой.

  • Пользовательская Задержка: можно задать пользовательскую задержку для определенных блоков, которые вы используете в своей модели Simulink™. Пользовательская установка задержки может принять значения от нуля до максимальной задержки оператора с плавающей точкой.

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

  • Задержите блоки в модели: Если ваша модель Simulink имеет задержку, HDL Coder™ может поглотить некоторых или всю задержку с нативной реализацией с плавающей точкой.

Установка стратегии задержки для модели

Можно задать установку стратегии задержки для целой модели или для отдельных блоков в модели.

Задавать эту установку для модели:

  1. В hdlcoder_nfp_delay_allocation модель, щелкните правой кнопкой по DUT Подсистема и выбирает HDL Code> HDL Coder Properties.

  2. На вкладке HDL Code Generation> Global Settings> Floating Point Target, для Библиотеки, выбирают Native Floating Point, и затем для Стратегии Задержки, выбирают MAX, MIN или ZERO.

Задавать это сходящее с командной строки:

  • Создайте hdlcoder.FloatingPointTargetConfig объект для нативной плавающей точки при помощи hdlcoder.createFloatingPointTargetConfig функция.

nfpconfig = hdlcoder.createFloatingPointTargetConfig('NATIVEFLOATINGPOINT');
hdlset_param('hdlcoder_nfp_delay_allocation', 'FloatingPointTargetConfiguration', nfpconfig);
  • Задайте стратегию задержки при помощи LatencyStrategy property из nfpconfig объект.

nfpconfig.LibrarySettings.LatencyStrategy = 'MAX'
nfpconfig = 

  FloatingPointTargetConfig with properties:

            Library: 'NativeFloatingPoint'
    LibrarySettings: [1x1 fpconfig.NFPLatencyDrivenMode]
           IPConfig: [1x1 hdlcoder.FloatingPointTargetConfig.IPConfig]

Чтобы видеть информацию о задержке, сгенерируйте HDL-код и затем откройте сгенерированную модель. Чтобы открыть сгенерированную модель, введите команду gm_hdlcoder_nfp_delay_allocation.

Пользовательская стратегия задержки блоков

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

Путем определения пользовательской задержки можно настроить проект для компромиссов между:

  • Тактовая частота и потребление энергии: более высокие повышения стоимости задержки максимальная тактовая частота (Fmax), которого можно достигнуть, который увеличивает динамическое потребление энергии.

  • Сверхдискретизация факторной и частоты дискретизации: комбинация более высокого значения задержки и более высокого фактора сверхдискретизации увеличивает Fmax, что вы можете достигнуть, но уменьшаете частоту дискретизации.

Чтобы узнать больше об этой установке и как задать стратегию задержки блока, смотрите LatencyStrategy.

Например, если у вас есть блок Add в параллельном пути в вашей модели, можно задать пользовательское значение задержки 2 для блока Add путем ввода этих команд.

load_system('hdlcoder_nfp_delay_allocation_custom')
open_system('hdlcoder_nfp_delay_allocation_custom')
hdlset_param('hdlcoder_nfp_delay_allocation_custom/DUT/Add','LatencyStrategy','Custom')
hdlset_param('hdlcoder_nfp_delay_allocation_custom/DUT/Add','NFPCustomLatency',2)

Чтобы видеть информацию о задержке, сгенерируйте HDL-код и затем откройте сгенерированную модель. Чтобы открыть сгенерированную модель, введите команду gm_hdlcoder_nfp_delay_allocation_custom. В сгенерированной модели вы видите что NFP Add блок имеет задержку 2.

Пользовательские настройки задержки для нативного дюйм/с с плавающей точкой

Для модели, которая имеет большое количество операторов с плавающей точкой, можно настроить задержку для нативного дюйм/с с плавающей точкой путем установки глобальной пользовательской задержки для операторов NFP. Индивидуальная настройка применяется ко всем операторам в модели.

Например, если у вас есть модель, которая имеет, несколько добавляют и блоки продукта, по умолчанию, блок наследовал настройки стратегии задержки, заданные для модели. При помощи этих команд можно настроить задержку всего NFP add блоки к 4 и весь NFP mul блоки к 3.

load_system('hdlcoder_nfp_delay_allocation_global_custom')
open_system('hdlcoder_nfp_delay_allocation_global_custom/Sample_DUT');
hdlset_param('hdlcoder_nfp_delay_allocation_global_custom', 'FloatingPointTargetConfiguration', ...
hdlcoder.createFloatingPointTargetConfig('NativeFloatingPoint', 'IPConfig', ...
{{ 'ADDSUB',  'SINGLE', 'CustomLatency', 4} ...
, { 'ADDSUB',  'DOUBLE', 'CustomLatency', 4} ...
, { 'MUL',  'SINGLE', 'CustomLatency', 3} ...
, { 'MUL',  'DOUBLE', 'CustomLatency', 3}}))

Чтобы видеть информацию о задержке, сгенерируйте HDL-код и затем откройте сгенерированную модель. Чтобы открыть сгенерированную модель, введите команду gm_hdlcoder_nfp_delay_allocation_global_custom. В сгенерированной модели вы видите что весь NFP Add блок имеет задержку 4 и весь NFP mul блоки имеют задержку 3.

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

Сверхдискретизация фактора

Когда вы проектируете блоки в своей модели Simulink™ на скорости передачи данных, задаете фактор Сверхдискретизации, больше, чем один. Фактор Сверхдискретизации вставляет регистры трубопровода на более быстрой тактовой частоте, которая улучшает тактовую частоту и уменьшает использование области. Чтобы узнать больше о конвейеризации тактовой частоты, смотрите, что Тактовая частота Конвейерно обрабатывает.

Видеть эффект Сверхдискретизации фактора на модели, в hdlcoder_nfp_delay_allocation модель:

  1. Добавьте блок Delay с длиной Задержки 1 при выходе блока Sqrt.

  2. Щелкните правой кнопкой по DUT и выберите HDL Code> HDL Coder Properties.

  3. На генерации HDL-кода> Глобальная панель Настроек, введите значение 40 для Сверхдискретизации фактора.

После генерации HDL-кода сгенерированная модель показывает NFP Sqrt блок, действующий на тактовой частоте, которая в 40 раз быстрее, чем блок Sqrt в вашей модели. NFP Sqrt блок поглотил блок Delay в вашей модели Simulink™. Блок Delay теперь действует на тактовой частоте. Эта реализация сохраняет область путем поглощения дополнительной задержки и улучшает синхронизацию путем работы на более быстрой тактовой частоте.

Задержите поглощение в модели

Если ваша модель Simulink™ имеет блок Delay с достаточной длиной Задержки, смежной с оператором, HDL Coder™ поглощает задержки как часть задержки оператора.

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

Если длина Задержки равна задержке оператора с плавающей точкой, HDL Coder™ поглощает задержки и не вводит дополнительной задержки.

В hdlcoder_nfp_delay_allocation модель:

  1. Дважды кликните блок Delay при выходе блока Sqrt и измените длину Задержки в 28.

  2. Сгенерируйте HDL-код для DUT Подсистема.

  3. После генерации HDL-кода, в командной строке, вводят gm_hdlcoder_nfp_delay_allocation открыть сгенерированную модель.

В сгенерированной модели вы видите что NFP Sqrt блок поглощает блок Delay, смежный с блоком Sqrt в вашей исходной модели. Это поглощение задержки происходит, потому что задержка оператора равна длине Задержки. Генератор кода поэтому избегает дополнительной задержки в вашей модели.

Если длина Задержки меньше задержки оператора, HDL Coder™ поглощает доступные задержки, и балансы параллельны путям путем добавления соответствия с задержками.

В hdlcoder_nfp_delay_allocation модель:

  1. Дважды кликните блок Delay при выходе блока Sqrt и измените длину Задержки в 21.

  2. Сгенерируйте HDL-код для DUT Подсистема.

  3. После генерации HDL-кода, в командной строке, вводят gm_hdlcoder_nfp_delay_allocation открыть сгенерированную модель.

Вы видите что NFP Sqrt блок поглотил Задержку длины 21 и добавил соответствующую задержку длины 7 в параллельном пути, потому что операция квадратного корня требует 28 задержки.

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

В hdlcoder_nfp_delay_allocation модель:

  1. Дважды кликните блок Delay при выходе блока Sqrt и измените длину Задержки в 34.

  2. Сгенерируйте HDL-код для DUT Подсистема.

  3. После генерации HDL-кода, в командной строке, вводят gm_hdlcoder_nfp_delay_allocation открыть сгенерированную модель.

NFP Sqrt блокируйтесь поглощенный 28 задержек, потому что операция квадратного корня имеет задержку 28. Избыточная задержка 6 находится вне оператора.

Смотрите также

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

Функции

Связанные примеры

Больше о