HDL Coder™ собственная технология с плавающей точкой может сгенерировать HDL-код от вашего проекта с плавающей точкой. Собственные операторы с плавающей точкой имеют задержку. Когда вы генерируете HDL-код, генератор кода вычисляет эту задержку и добавляет соответствующие задержки, чтобы сбалансировать параллельные пути.
Откройте hdlcoder_nfp_delay_allocation
Simulink™ модель. Модель использует single
тип данных и вычисление квадратного корня. Модель имеет параллельный путь, чтобы проиллюстрировать, как генератор кода балансирует задержки.
load_system('hdlcoder_nfp_delay_allocation') open_system('hdlcoder_nfp_delay_allocation/DUT')
Чтобы сгенерировать HDL-код:
Щелкните правой кнопкой мыши по DUT
Подсистема и выберите HDL-код > Сгенерировать HDL для подсистемы.
Чтобы увидеть сгенерированную модель после генерации HDL-кода, в командной строке введите gm_hdlcoder_nfp_delay_allocation
.
The NFP Sqrt
блок является оператором с плавающей точкой, соответствующим блоку Sqrt в вашей модели, и имеет задержку 28
. Генератор кода определяет эту задержку и добавляет совпадающую задержку длины 28
в параллельном пути. Чтобы увидеть задержку операции квадратного корня, дважды кликните NFP Sqrt
блок. Длина задержки Sqrt_pd1
блок соответствует задержке оператора.
Вы можете настроить задержку вашего проекта. Используйте пользовательские параметры задержки для поиска компромиссов между задержкой и пропускной способностью. Затем можно оптимизировать реализацию проекта на целевом устройстве FPGA для площади и скорости. Настройте задержку при помощи:
Настройка стратегии задержки: Задайте, сопоставлять ли всю вашу модель Simulink™ или отдельные блоки в вашей модели с максимальной, минимальной или нулевой задержкой оператора с плавающей точкой.
Пользовательская задержка: Вы можете задать пользовательскую задержку для определенных блоков, которые вы используете в вашей модели Simulink™. Пользовательская настройка задержки может принимать значения от нуля до максимальной задержки оператора с плавающей точкой.
Коэффициент избыточной дискретизации: Увеличение коэффициента избыточной дискретизации работает с более высокой тактовой частотой и поглощает трубопроводы тактовой частоты с задержкой оператора с плавающей точкой.
Блоки задержки в модели: Если ваша модель Simulink имеет задержку, HDL Coder™ можете поглощать часть или все задержки с помощью собственной реализации с плавающей точкой.
Можно задать настройку стратегии задержки для всей модели или для отдельных блоков в модели.
Чтобы задать эту настройку для модели:
В hdlcoder_nfp_delay_allocation
модель, щелкните правой кнопкой мыши по DUT
Подсистема и выберите HDL-код > HDL Coder свойства.
На вкладке Генерация 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
модель:
Добавьте блок Delay с Длиной Задержки 1
на выходе блока Sqrt.
Щелкните правой кнопкой мыши DUT и выберите HDL-код > HDL Coder свойства.
На панели Генерации HDL-кода > Глобальные параметры введите значение 40
для коэффициента избыточной дискретизации.
После генерации HDL-кода сгенерированная модель показывает NFP Sqrt
блок, работающий с тактовой частотой, которая в 40 раз быстрее, чем блок Sqrt в вашей модели. The NFP Sqrt
блок поглотил блок Delay в вашей Simulink™ модели. Блок Delay теперь работает с тактовой частотой. Эта реализация экономит область, поглощая дополнительную задержку, и улучшает синхронизацию, работая с более высокой частотой синхроимпульса.
Если ваша модель Simulink™ имеет блок Delay с достаточной длиной Delay, соседствующей с оператором, HDL- Coder™ поглощает задержки как часть задержки оператора.
Примечание: Чтобы поглощать задержки, убедитесь, что вы сгруппировали задержки рядом с блоком.
Если длина задержки равна задержке оператора с плавающей точкой, HDL- Coder™ поглощает задержки и не вводит никакой дополнительной задержки.
В hdlcoder_nfp_delay_allocation
модель:
Дважды кликните блок Delay на выходе блока Sqrt и измените длину задержки на 28
.
Сгенерируйте HDL-код для DUT
Подсистема.
После генерации HDL-кода в командной строке введите gm_hdlcoder_nfp_delay_allocation
чтобы открыть сгенерированную модель.
В сгенерированной модели вы видите, что NFP Sqrt
блок поглощает блок Delay, соседствующий с блоком Sqrt в вашей исходной модели. Это поглощение задержки происходит, потому что задержка оператора равна длине задержки. Поэтому генератор кода избегает дополнительной задержки в вашей модели.
Если длина задержки меньше задержки оператора, HDL- Coder™ поглощает доступные задержки и балансирует параллельные пути путем добавления совпадающих задержек.
В hdlcoder_nfp_delay_allocation
модель:
Дважды кликните блок Delay на выходе блока Sqrt и измените длину задержки на 21
.
Сгенерируйте HDL-код для DUT
Подсистема.
После генерации HDL-кода в командной строке введите gm_hdlcoder_nfp_delay_allocation
чтобы открыть сгенерированную модель.
Вы видите, что NFP Sqrt
блок поглощает Задержку длины 21
и добавили соответствующую задержку длины 7
в параллельном пути, потому что операция квадратного корня требует 28
задержки.
Если длина задержки больше, чем задержка оператора, генератор кода поглощает некоторое количество задержек, равное задержке, и избыточные задержки появляются вне оператора.
В hdlcoder_nfp_delay_allocation
модель:
Дважды кликните блок Delay на выходе блока Sqrt и измените длину задержки на 34
.
Сгенерируйте HDL-код для DUT
Подсистема.
После генерации HDL-кода в командной строке введите gm_hdlcoder_nfp_delay_allocation
чтобы открыть сгенерированную модель.
The NFP Sqrt
блок поглощен 28 задержками, потому что операция квадратного корня имеет задержку 28
. Избыточная задержка 6
находится вне оператора.