DSP48E2乘法实例化

问题描述

我正在尝试实例化zynq ultRascale的DSP48E2以进行乘法运算,但是即使正确提供了控制信号,它也始终返回P输出零。 (如下例所示)

module top(CLK,A,B,C,ACOUT,BCOUT,P);
    input wire CLK;
    input wire signed [29:0] A;
    input wire signed [17:0] B;
    input wire signed [47:0] C;
    output wire signed [29:0] ACOUT;
    output wire signed [17:0] BCOUT;
    output wire signed [47:0] P;
    DSP48E2#(
    .AMULTSEL("A"),.A_INPUT("DIRECT"),.BMULTSEL("B"),.USE_MULT("MULTIPLY")
    ) 
    DSP48E2_inst (
    .ACOUT(ACOUT),.BCOUT(BCOUT),.P(P),.ALUMODE(4'd0),.CARRYINSEL(3'd0),.CLK(CLK),.INMODE(5'd0),.OPMODE(9'd5),.A(A),.B(B),.C(C),.CARRYIN(1'd0),.CEA2(1),.CEALUMODE(1),.CEB2(1),.CEC(1),.CEINMODE(1),.CEM(1),.CEP(1),.RSTA(0),.RSTALUMODE(0),.RSTB(0),.RSTC(0),.RSTCTRL(0),.RSTM(0),.RSTP(0) 
    );
endmodule

在此模块中,ACOUT和BCOUT已连接以验证其功能,并且这两个模块均正常工作,如以下仿真波形中所示。谁能告诉我P输出出了什么问题。 (需要返回A和B的乘法输出

enter image description here

可以为此进行推理和使用DSP48宏。为了利用DSP48E2的全部灵活性,我想进行实例化。因此,这个问题仅与实例化有关。

解决方法

通过激活 CECTRL 时钟使能信号到 OPMODEREG CARRYINSEL ,可以通过X和Y多路复用器获得乘法输出的部分乘积,并且可以添加C输入(来自端口或CREG),如以下仿真波形所示。 (这里没有使用结构寄存器将C输入与流水线相乘的部分乘积相乘)

enter image description here