' ='上的语法错误

时间:2014-11-09 19:48:00

标签: syntax-error verilog

我有以下Verilog HDL代码。它基本上是一个两位加法器,添加ab,并且有一个PG单元,进位生成单元(cg_unit)和Sum单位(s_unit) 。 ci是两位加法器的进位。 sel是激活木马的原因,即否定s[1]的价值。 coutminus1cout分别只是结转时的结转和结转。

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];
           ^

1 个答案:

答案 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