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

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-код > Сгенерировать HDL для подсистемы.

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

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

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

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

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

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

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

Настройка стратегии задержки для модели

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

Чтобы задать эту настройку для модели:

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

  2. На вкладке Генерация HDL-кода > Global Settings > Floating Point Target для параметра Library выберите Native Floating Point, а затем для параметра Latency Strategy выберите 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.

Коэффициент избыточной дискретизации

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

Чтобы увидеть эффект коэффициента избыточной дискретизации на модели, в hdlcoder_nfp_delay_allocation модель:

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

  2. Щелкните правой кнопкой мыши DUT и выберите HDL-код > HDL Coder свойства.

  3. На панели Генерации HDL-кода > Глобальные параметры введите значение 40 для коэффициента избыточной дискретизации.

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

Поглощение задержки в модели

Если ваша модель Simulink™ имеет блок Delay с достаточной длиной 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 чтобы открыть сгенерированную модель.

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

См. также

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

Функции

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

Подробнее о