Эти инструкции иллюстрируют рекомендуемые настройки при использовании Divide и Product блоков в вашей модели для улучшения области и времени на целевом FPGA. Каждое руководство имеет уровень серьезности, который указывает на уровень податливостей. Для получения дополнительной информации см. HDL-руководства по моделированию уровней серьезности.
Идентификатор руководства
2.7.1
Серьезность
Очень рекомендуем
Описание
Алгоритмы цифровой обработки сигналов (DSP) используют несколько умножителей и аккумуляторов. Устройства FPGA, предоставляемые такими поставщиками, как Xilinx ® и Intel ®, содержат специальные срезы DSP. Эти небольшие срезы DSP размера, высокой скорости содержат несколько умножителей и аккумуляторов, которые делают устройства FPGA наиболее подходящими для приложений DSP.
Архитектура срезов DSP сильно варьируется у различных поставщиков FPGA и у различных семейств устройств, предоставляемых одним и тем же поставщиком. Чтобы сопоставить вашу модель Simulink ®, содержащую сумматоры, умножители и задержки с срезами DSP, адаптируйте вашу модель к архитектуре срезов DSP с учетом:
Расположение триггеров, сумматоров и умножителей в срезе DSP.
Настройки округления и насыщения.
Ширина битов сумматоров и умножителей. Для эффективного отображения используйте в модели битовые ширины, которые меньше или равны битовым ширинам модуля DSP.
Когда ширина битов в вашей модели становится больше, чем ширина битов DSP, ваш проект не помещается на один DSP. В этом случае требуется несколько DSP или дополнительная логика.
Можно сопоставить эти блоки в модели с блоками DSP на FPGA:
Сложение и суммирование
Задержка
Продукт
Умножение-Добавление
Умножение-Накопление
Этот рисунок иллюстрирует архитектуру Xilinx DSP. FPGA серии Xilinx 7 имеют специальные срезы DSP, которые используют эту архитектуру. Архитектура DSP состоит из входа регистров, предаддера, 25x18 умножителя, промежуточных регистров, постаддера и выхода регистра.
Для получения дополнительной информации см. DSP48E1 «Обзор срезов» в документации Xilinx.
Этот рисунок иллюстрирует архитектуру Intel DSP. Эта архитектура DSP для устройств Stratix ® V является архитектурой DSP переменной точности. Блоки DSP могут иметь ширины битов 9, 18, 27 и 36 бит и комплексное умножение 18x25 для БПФ.
Для получения дополнительной информации см. раздел «Архитектура блоков DSP» в документации Intel.
Чтобы узнать, как вы можете спроектировать свой алгоритм, чтобы сопоставить этот модуль DSP, откройте модель hdlcoder_multiplier_adder_dsp.slx
open_system('hdlcoder_multiplier_adder_dsp') set_param('hdlcoder_multiplier_adder_dsp', 'SimulationCommand', 'Update')
Модель состоит из двух подсистем dsp_subsys1 и dsp_subsys2, которые реализуют операцию C + ((A + D) * B. Можно также реализовать эту операцию с помощью блоков Multiply-Add или Multiply-Accumulate, как показано подсистемами DSP_MultAdd и DSP_MultAcc.
dsp_subsys1
реализует операцию C + ((A + D) * B с помощью битовых ширин, которые равны DSP на FPGA серии Xilinx 7. Если вы открываете HDL Workflow Advisor и развертываете эту подсистему на Xilinx Virtex ® 7 FPGA, весь проект помещается в точности на одном срезе DSP.
dsp_subsys2
реализует ту же операцию с помощью битовых ширин, которые больше, чем DSP на Xilinx FPGA. Если вы развертываете эту подсистему на FPGA Xilinx Virtex 7, то видите, что весь проект помещается на один срез DSP и использует дополнительную логику срезов.
для Gain блока2.7.2
Очень рекомендуем
Когда вы используете блок Gain в своем проекте, чтобы достичь наиболее эффективной по площади реализации, задайте свойство блока ConstMultiplierOptimization HDL равным auto
. Генератор кода выбирает между CSD
и FCSD
реализации, которые дают наименьший размер схемы и генерируют HDL-код, не используя оператор умножения (*).
Вы можете использовать эту настройку, чтобы избежать целевого использования ресурсов DSP и уменьшить количество логических схем в Intel® Куарт® Прайм при синтезе вашего проекта на целевой FPGA. Для примера в этой таблице показан сгенерированный HDL-код для блока Gain в зависимости от настроек свойства HDL-блока для блока ConstMultiplierOptimization.
Настройки ConstMultiplierOptimization и влияние на сгенерированный HDL-код
ConstMultiplierOptimization Настройка | Операции | Сгенерированный HDL-код |
---|---|---|
CSD | Приводит входные данные параллельно и добавляет или вычитает результаты. | Этот код показывает сгенерированный VHDL код. -- CSD Encoding(231): 1001'01001'; Cost (Adders) = 3 DOUT_mul_temp <= ((resize(DIN & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 21) - resize(DIN & '0' & '0' & '0' & '0' & '0', 21)) + resize(DIN & '0' & '0' & '0', 21)) - resize(DIN, 21); DOUT <= DOUT_mul_temp(19 DOWNTO 0); Этот код показывает сгенерированный код Verilog. // CSD Encoding (231) : 1001'01001'; Cost (Adders) = 3 assign Gain_1 = {DIN[11], {DIN, 8'b00000000}}; assign Gain_2 = {{4{DIN[11]}}, {DIN, 5'b00000}}; assign Gain_3 = {{6{DIN[11]}}, {DIN, 3'b000}}; assign Gain_4 = {{9{DIN[11]}}, DIN}; assign DOUT_mul_temp = ((Gain_1 - Gain_2) + Gain_3) - Gain_4; assign DOUT = DOUT_mul_temp[19:0]; |
FCSD | Добавляет входные данные и их приведенные данные в каждом каскаде. | Этот код показывает сгенерированный VHDL код. -- FCSD for 231 = 33 X 7; Total Cost = 2 -- CSD Encoding (33) : 0100001; Cost (Adders) = 1 Gain_factor <= resize(DIN & '0' & '0' & '0' & '0' & '0', 21) + resize(DIN, 21); -- CSD Encoding (7) : 1001'; Cost (Adders) = 1 DOUT_mul_temp <= resize(Gain_factor & '0' & '0' & '0', 21) - Gain_factor; DOUT <= DOUT_mul_temp(19 DOWNTO 0); Этот код показывает сгенерированный код Verilog. // FCSD for 231 = 33 X 7; Total Cost = 2 // CSD Encoding (33) : 0100001; Cost (Adders) = 1 assign Gain_3 = {{4{DIN[11]}}, {DIN, 5'b00000}}; assign Gain_4 = {{9{DIN[11]}}, DIN}; assign Gain_factor = Gain_3 + Gain_4; // CSD Encoding (7) : 1001'; Cost (Adders) = 1 assign Gain_1 = {Gain_factor, 3'b000}; assign Gain_2 = Gain_1[20:0]; assign DOUT_mul_temp = Gain_2 - Gain_factor; assign DOUT = DOUT_mul_temp[19:0]; |
auto | Выбирает CSD или реализацию FCSD, которая использует меньше аддеров. | Сгенерированный HDL-код аналогичен реализации CSD или FCSD. |
none | Использует оператор умножения (*). | Этот код показывает сгенерированный VHDL код. DOUT_mul_temp <= to_signed(2#011100111#, 9) * DIN; DOUT <= DOUT_mul_temp(19 DOWNTO 0); Этот код показывает сгенерированный код Verilog. assign DOUT_mul_temp = 231 * DIN; assign DOUT = DOUT_mul_temp[19:0]; |
ShiftAdd
Архитектура Divide блока для фиксированных точек2.7.3
Рекомендуется
Когда вы используете типы данных с фиксированной точкой как входами к блоку Divide, задайте HDL- Архитектуры блока следующим ShiftAdd
а затем установите для свойства Блоков UsePipelines значение on
. В этой архитектуре блок вычисляет результат с помощью нескольких операций shift и add. Операции конвейеризованы, чтобы достичь более высоких тактовых частот на целевом устройстве FPGA.
Когда вы используете типы данных с плавающей точкой как входы для блока Divide, оставьте Архитектуру HDL до значения по умолчанию Linear
и установите IP-библиотеку с плавающей точкой на Native Floating Point
.