DSP48E2 Создание экземпляра для умножения

Я пытаюсь создать экземпляр DSP48E2 zynq ultrascale для операции умножения, но он всегда возвращает нулевой выход 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 подключены для проверки их функциональности, и эти 2 работают правильно, как показано в следующей форме сигнала моделирования. Может ли кто-нибудь сказать мне, что пошло не так с выводом P. (который должен вернуть результат умножения A и B)

Для этого можно сделать вывод и использование макроса DSP48. Чтобы использовать полную гибкость DSP48E2, я хочу создать экземпляр. Итак, этот вопрос касается только создания экземпляра.

1 ответ

При активации CECTRL генератора тактовых импульсов сигнал OPMODEREG и CARRYINSEL, частичные продукты выхода умножения могут быть получены с помощью X и Y мультиплексоров, и она может быть добавлена с вводом C (исходя из порта или CREG), как указано в следующей имитации сигнала. (Здесь регистры фабрики не использовались для конвейера ввода C для сложения с частичными продуктами вывода умножения)

Другие вопросы по тегам