Vivado IP core комплексное накопление с плавающей запятой

Комплексное накопление чисел с плавающей запятой Vivado IP core Функция с плавающей запятой быстро реализует добавление нескольких данных


предисловие

        В FPGA часто предусмотрено накопление чисел с плавающей запятой.Простое сложение двух или двух займет много тактов.Очень удобно обнаружить, что IP-ядро с плавающей запятой, предоставляемое xilinx, имеет функцию накопления ., может сэкономить много тактов. В прошлый раз долго искал в интернете, не нашел конфигурацию ядра аккумулирования IP, поэтому планирую записывать процесс работы ядра аккумулирования IP.


Совет:Далее текст этой статьи,все оригиналы самого автора.Написать статью не просто.Надеюсь вы прикрепите ссылку на эту статью при репосте.

1. Этапы настройки ядра IP с плавающей запятой

         Рисунок выше является объяснением конфигурации этих цифр Причина их настройки заключается в том, что это IP-ядро не накапливает числа с плавающей запятой напрямую, а преобразует их в числа с фиксированной запятой, а затем преобразует их обратно в числа с плавающей запятой. после завершения накопления. На картинке сказано, что вы можете настроить количество цифр, которые он рекомендует накапливать.Хотя есть процесс преобразования в числа с фиксированной запятой, он такой же, как и использование для накопления чисел с плавающей запятой одинарной точности. То есть, когда количество цифр достигает определенного требования, точность может быть полностью гарантирована. Здесь я не настроил количество бит так высоко, если конфигурация слишком высока, это потребует много ресурсов DSP.

2. Моделирование

1. Код верхнего уровня

код показывает, как показано ниже:

`timescale 1ns / 1ps
//
// Company: cq university
// Engineer: clg
// Create Date: 2022/09/15 19:55:41
// Design Name: 
// Module Name: complex_accumulator_ip
// Project Name: 
// Target Devices: 
// Tool Versions: 2017.4
// Description: 
// Dependencies: 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//

module complex_accumulator_ip(
    input                               clk                        ,
    input                               valid                      ,//执行加法有效信号
    input              [  31:0]         re_a                       ,//复数a的实部
    input              [  31:0]         im_a                       ,//复数a的虚部
    input                               last                       ,//累加最后一个数据标志信号
    output                              res_valid                  ,//结果有效信号
    output                              res_last                   ,//全部数据累加完标志信号
    output             [  31:0]         re_res                     ,//运算结果实部
    output             [  31:0]         im_res                      //运算结果虚部
    );
    
    
    
float_accumulator_ip u1_float_accumulator_ip(                       //实部累加
    .aclk                              (clk                       ),
    .s_axis_a_tvalid                   (valid                     ),
    .s_axis_a_tdata                    (re_a                      ),
    .s_axis_a_tlast                    (last                      ),
    .m_axis_result_tvalid              (res_valid                 ),
    .m_axis_result_tdata               (re_res                    ),
    .m_axis_result_tlast               (res_last                  ) 
);

float_accumulator_ip u2_float_accumulator_ip(                       //虚部累加
    .aclk                              (clk                       ),
    .s_axis_a_tvalid                   (valid                     ),
    .s_axis_a_tdata                    (im_a                      ),
    .s_axis_a_tlast                    (last                      ),
    .m_axis_result_tvalid              (                          ),
    .m_axis_result_tdata               (im_res                    ),
    .m_axis_result_tlast               (                          ) 
);

endmodule

2. Код моделирования

код показывает, как показано ниже:

`timescale 1ns / 1ps
//
// Company: cq university
// Engineer: clg
// Create Date: 2022/09/15 19:56:43
// Design Name: 
// Module Name: complex_accumulator_ip_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 2017.4
// Description: 
// Dependencies: 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//

module complex_accumulator_ip_tb();
reg                                     clk                        ;
reg                                     valid                      ;
reg                    [  31:0]         re_a                       ;
reg                    [  31:0]         im_a                       ;
reg                                     last                       ;
wire                   [  31:0]         re_res                     ;
wire                   [  31:0]         im_res                     ;
wire                                    res_valid                  ;
wire                                    res_last                   ;

always #1 clk=!clk;
initial begin clk=0;valid=0;last=0;re_a=0;im_a=0;
#1 last=0;
#2 re_a=32'b00111111100000000000000000000000;                       //1
     im_a=32'b00111111100000000000000000000000;                     //1
     valid=1;
#2 re_a=32'b01000000000000000000000000000000;                       //2
     im_a=32'b01000000000000000000000000000000;                     //2
#2 re_a=32'b01000000010000000000000000000000;                       //3
     im_a=32'b01000000010000000000000000000000;                     //3
     last=1;
#2 last=0;valid=0;
//#3 valid=0;
end

complex_accumulator_ip u1_complex_accumulator_ip(
    .clk                               (clk                       ),
    .last                              (last                      ),
    .valid                             (valid                     ),//执行加法有效信号
    .re_a                              (re_a                      ),//复数a的实部
    .im_a                              (im_a                      ),//复数a的虚部
    .re_res                            (re_res                    ),//运算结果实部
    .im_res                            (im_res                    ),//运算结果虚部
    .res_valid                         (res_valid                 ),
    .res_last                          (res_last                  ) 
);

endmodule

3. Анализ результатов моделирования

        Результаты моделирования представлены на рисунке.Видно , что модуль успешно реализует накопление 3-х комплексных чисел с плавающей запятой, а задержка вывода результата составляет 26 тактов, что согласуется с задержкой предыдущего ИП конфигурация ядра.


Подведем итог

        Это то, о чем я хочу поговорить сегодня. В этой статье только кратко рассказывается, как использовать IP-ядро для быстрой реализации базовой операции сложного накопления чисел с плавающей запятой. Если вы хотите использовать его для завершения большего накопления данных, у вас есть изменить код или разобраться в работе самостоятельно. Напишите код.

Supongo que te gusta

Origin blog.csdn.net/m0_66360845/article/details/127130024
Recomendado
Clasificación