首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Verilog hdl幅度比较器错误

Verilog hdl幅度比较器错误
EN

Stack Overflow用户
提问于 2015-11-01 09:26:08
回答 1查看 214关注 0票数 0

我已经为一个量级比较器写了下面的简单代码。C的6位给出了A=B、A!=B等的值;然而,当我运行代码时,我得到了以下错误。我如何修复这个错误?

代码语言:javascript
复制
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.

我的代码是

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-11-01 11:05:34

always块中使用assign语句不是一个好主意(有关更多详细信息,请参阅here )。因此,您可以将输出C定义为reg,并实现以下方式:

代码语言:javascript
复制
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语句。

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33458335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档