verilog代码求助,太菜鸟,自己搞很久不懂

如题所述

always块内赋值对象必须是reg类型,第一段可以改成
module compare1(a,b,a_gt_b,a_eq_b,a_ls_b);
input [1:0] a,b;
output a_gt_b,a_eq_b,a_ls_b;
assign a_gt_b=(a[1]&~b[1])|((a[1]^~b[1])&(a[0]&~b[0]));
assign a_eq_b=(a[1]^~b[1])&(a[0]^~b[0]);
assign a_ls_b=(~a[1]&b[1])|((a[1]^~b[1])&(~a[0]&b[0]));
endmodule

if语句必须用在always块中;此外赋值时最好注意左右位宽匹配,不指明位宽则会默认是32位的整数,会报出warning;对于对电平敏感的always块,会被综合成组合电路,因此建议使用阻塞赋值(使用=,而不是<=),第二段可以改成
module compare2(a,b,a_gt_b,a_eq_b,a_ls_b);

input [1:0] a,b;
output a_gt_b,a_eq_b,a_ls_b;

reg a_gt_b, a_eq_b, a_ls_b;

always @(a, b)
if(a>b)
begin
a_gt_b=1'd1;
a_eq_b=1'd0;
a_ls_b=1'd0;
end
else if(a==b)
begin
a_gt_b=1'd0;
a_eq_b=1'd1;
a_ls_b=1'd0;
end
else
begin
a_gt_b=1'd0;
a_eq_b=1'd0;
a_ls_b=1'd1;
end

endmodule
温馨提示:答案为网友推荐,仅供参考
相似回答