为什么在modelsim中出现这个错误?

时间:2016-12-29 20:38:32

标签: hardware system-verilog

变量' V'由连续和程序性作业编写 变量' F'通过连续和程序性作业编写。

我的代码是:

   module ALU(input signed [7:0] A,B ,input [2:0] sel ,input Si,input Ci ,output logic signed [15:0] F ,output logic N,Z,V,Eq);
always @(A,B,sel) begin
    F=15'b 0;
    N=1'b 0;
    Z=1'b 0;
    V=1'b 0;

    case(sel)
    3'b 000:begin F=A+B+Ci; end
    3'b 001:F=A+(~B+1);
      3'b 010:F=A<<1; 
      3'b 011:F=A>>>1;
      3'b 100:begin F=A>>1; F[7]=Si; end
      3'b 101:begin F=A<<1; F[0]=Si; end
      3'b 110:F=A*1.5;
      3'b 111:F=A*B;
    endcase
end
assign V=(A[7]==B[7]&&F[7]!=A[7])?1'b1:1'b0;
assign F[15:8]=(V)?((A[7]==1)?8'b11111111:8'b00000000):((F[7]==1)?8'b11111111:8'b00000000);

endmodule

2 个答案:

答案 0 :(得分:1)

问题在于,在always块中,您正在进行过程(变量类型)赋值。但是,您还要在模块结束时做出连续的任务。

您可能会尝试将连续赋值重构为always块,以便只进行过程赋值。

答案 1 :(得分:0)

问题在于您正在使用连续分配(分配F = ...)和程序分配(在始终块中),这是语言中不允许的。

我猜测在这种情况下,您可能只重构代码以使用过程赋值。

这一点在IEEE1800-2012的10.3.2中规定。您将在10.6中看到对程序性连续分配的引用,但由于将来可能会弃用,因此最好避免这种情况。