我已经为一个量级比较器写了下面的简单代码。C的6位给出了A=B、A!=B等的值;然而,当我运行代码时,我得到了以下错误。我如何修复这个错误?
c2q39.v:7: error: C['sd5] is not a valid l-value in testbench.m.
c2q39.v:3: : C['sd5] is declared here as wire.我的代码是
module mag(A,B,C);
input [3:0] A,B;
output [5:0] C;
always @ (A or B)
assign C[5]=(A==B);
assign C[4]=(A!=B);
assign C[3]=(A>B);
assign C[2]=(A<B);
assign C[1]=(A>=B);
assign C[0]=(A<=B);
endmodule
module testbench;
reg [3:0] A,B;
wire [5:0] C;
mag m(A,B,C);
initial
begin
A=4'b0000;B=4'b0000;
#10 A=4'b1000;
#10 B=4'b1001;
#10 A=4'b1000;
end
initial
$monitor("%0d %b %b %b",$time,A,B,C);
endmodule发布于 2015-11-01 11:05:34
在always块中使用assign语句不是一个好主意(有关更多详细信息,请参阅here )。因此,您可以将输出C定义为reg,并实现以下方式:
module mag(A,B,C);
input [3:0] A,B;
output reg [5:0] C;
always @ (A or B)
begin
C[5]=(A==B);
C[4]=(A!=B);
C[3]=(A>B);
C[2]=(A<B);
C[1]=(A>=B);
C[0]=(A<=B);
end
endmodule另一种实现方式是使用assign语句。
module mag(A,B,C);
input [3:0] A,B;
output [5:0] C;
//always @ (A or B)
assign C[5]=(A==B);
assign C[4]=(A!=B);
assign C[3]=(A>B);
assign C[2]=(A<B);
assign C[1]=(A>=B);
assign C[0]=(A<=B);
endmodulehttps://stackoverflow.com/questions/33458335
复制相似问题