Verilog hdl幅度比较器错误

时间:2015-11-01 01:26:08

标签: verilog hdl

我在下面写了一个简单的代码作为幅度比较器。 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

1 个答案:

答案 0 :(得分:3)

始终块中使用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);

endmodule