我有以下Verilog HDL代码。它基本上是一个两位加法器,添加a
和b
,并且有一个PG单元,进位生成单元(cg_unit
)和Sum单位(s_unit
) 。 ci
是两位加法器的进位。 sel
是激活木马的原因,即否定s[1]
的价值。 coutminus1
和cout
分别只是结转时的结转和结转。
module trojan
(
input [1:0] a, b,
input ci, sel,
output [1:0] s,
output cout, coutminus1
);
wire [1:0] c, p, g;
cla_pg_unit_2bits pgu1(a, b, p, g);
cla_cg_unit_2bits cgu1(p, g, ci, c);
cla_s_unit_2bits su1(p, {c[0], ci}, s);
coutminus1 = c[0];
cout = c[1];
always@(sel)
begin
if (sel == 1)
assign s[1] = ~s[1];
else
assign s[1] = s[1];
end
endmodule
由于某种原因,我收到以下语法错误:
Following Verilog source has the following syntax error: token is '='
coutminus1 = c[0];
^
答案 0 :(得分:3)
在这一行:
coutminus1 = c[0];
cout = c[1];
缺少关键字assign
。您的代码还存在一些其他问题。我建议把它改成这样的东西:
module trojan
(
input [1:0] a, b,
input ci, sel,
output [1:0] s,
output cout, coutminus1
);
wire [1:0] c, p, g, tmp;
cla_pg_unit_2bits pgu1(a, b, p, g);
cla_cg_unit_2bits cgu1(p, g, ci, c);
cla_s_unit_2bits su1(p, {c[0], ci}, tmp);
assign coutminus1 = c[0];
assign cout = c[1];
assign s = {(sel) ? ~tmp[1] : tmp[1], tmp[0]};
endmodule