Цитата(count_enable @ Feb 18 2016, 14:49)

Спасибо большое. Уже "увидел" как оно будет работать.
Это прекрасно! Тем более, что мне заставить
xbip_multadd работать в режиме аккумулятора и без warnings так и не удалось.

Для коротких векторов A и B синтезируется без ошибок
xbip_dsp48_macro для единственной операции: (A+D)*B+P.
Если вектора A и B длиннее 18 бит, то придется, вероятно, использовать
mult_gen_0 в режиме умножителя и суммировать результаты умножения во внешнем аккумуляторе.
Для
xbip_dsp48_macro код получился вот такой:
Код
module acc
(
clk,
nrst,
A0,A1,A2,B0,B1,B2,
T,valid,R
);
input clk;
input nrst;
input signed [16:0] A0,A1,A2;
input signed [16:0] B0,B1,B2;
input [1:0] T;
input valid;
output [36:0] R;
wire signed [16:0] SA = (T == 0) ? A0 : (T == 1) ? A1 : (T == 2) ? A2 : 0;
wire signed [16:0] SB = (T == 0) ? B0 : (T == 1) ? B1 : (T == 2) ? B2 : 0;
reg signed [17:0] D;
always @(posedge clk)
begin
D <= SA - SB;
end
wire [36:0] P;
dsp48mac dsp48mac_m(.clk(clk),.a(D),.b(D),.d(0),.p(P));
reg [36:0] R;
always @(posedge clk or negedge nrst)
begin
if (nrst == 0)
begin
R <= 0;
end
else
if (valid)
begin
R <= P;
end
end
endmodule