Verilog 有符号乘法

Verilog signed multiplication

我有一个关于乘法的问题。就我而言,row 和 vec 是我的输入。每个包含 N 个带 DW 数据宽度的有符号数。 temp1 和 temp2 是用于存储乘法结果的数组。所有数字均已签名。问题是为什么temp1和temp2得到了不同的答案?为什么 temp1 错误但 temp2 正确?抱歉,我是 Verilog 的新手,不知道为什么。谢谢!

input signed [(DW * N) -1 : 0] row;
input signed [(DW * N) -1 : 0] vec;
always @(*) begin
  for (i=0;i<N;i=i+1) begin
    t1 = row[i*DW +: DW];
    t2 = vec[i*DW +: DW];
    temp1[i] = t1 * t2;
    temp2[i] = (row[i*DW +: DW] )* (vec[i*DW +: DW]);
  end
end

任何向量的一部分select都是无符号的,无论整体是否有符号。