变量' 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
答案 0 :(得分:1)
问题在于,在always块中,您正在进行过程(变量类型)赋值。但是,您还要在模块结束时做出连续的任务。
您可能会尝试将连续赋值重构为always块,以便只进行过程赋值。
答案 1 :(得分:0)
问题在于您正在使用连续分配(分配F = ...)和程序分配(在始终块中),这是语言中不允许的。
我猜测在这种情况下,您可能只重构代码以使用过程赋值。
这一点在IEEE1800-2012的10.3.2中规定。您将在10.6中看到对程序性连续分配的引用,但由于将来可能会弃用,因此最好避免这种情况。