Во многих случаях вы будете использовать DSP48, написав выражения Verilog / VHDL, содержащие сложение, вычитание и умножение.
x = a * b + c
AПроблема с вышеприведенным выражением состоит в том, что умножение и сложение происходят в одном цикле.Вы можете запустить выражение на более высокой частоте, если операция может быть конвейерной.Иногда Vivado может повторно использовать эти выражения в разных регистрах, чтобы использовать конвейерные регистры DSP48.
Однако я понимаю, что хочу использовать DSP48 напрямую.Вы создаете DSP48 точно так же, как и другие модули RTL.Порты, параметры и поведение описаны в руководстве пользователя DSP Slice для используемой вами логики FPGA.
wire [47:0] c;
wire [24:0] a;
wire [17:0] b;
DSP48E1#() dsp(
.a(a),
.b(b),
.c(c),
.p(x),
.opmode(5),
.alumode(0)
);
Этот экземпляр скопирован из одной из моих реализаций внутреннего продукта.Он полностью конвейерный, потому что я стремился к работе на частоте 500 МГц.Достигается только 400 МГц из-за других комбинационных путей.
Для серии Xilinx 7: DSP48E1 Slice Руководство пользователя
Для Xilinx Ultrascale: DSP48E2 Slice Руководство пользователя