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 для сложения с частичными продуктами вывода умножения)