如何在Verilog中解决这些解析错误?

如何在Verilog中解决这些解析错误?,verilog,Verilog,出于学术目的,我试图用Verilog编写一个并行进位加法器,但由于几个我不理解的错误,代码无法编译。代码如下: 1 module full_adder(a,b,c_in,s,c); 2 input a,b,c_in; 3 output s,c; 4 assign s = a ^ (b ^ c_in); 5 assign c = (a & b) | (c_in & (a | b)); 6 endmodule 8 module rc_ad

出于学术目的,我试图用Verilog编写一个并行进位加法器,但由于几个我不理解的错误,代码无法编译。代码如下:

 1  module full_adder(a,b,c_in,s,c);
 2    input a,b,c_in;
 3    output s,c;
 4    assign s = a ^ (b ^ c_in);
 5    assign c = (a & b) | (c_in & (a | b));
 6  endmodule

 8  module rc_adder(a,b,cin,s,cout);
 9    input a,b,cin;
 10   output s,cout;
 11   parameter N = 32; // bits
 12   wire[N-1:0] a;
 13   wire[N-1:0] b;
 14   wire[N-1:0] s;
 15   wire cin;
 16   wire cout;
 17   wire[N-1:0] _c;
 18   assign cout = _c[N-1];

 20   full_adder add0(.a(a[0]),.b(b[0]),.c_in(cin),.s(s[0]),.c(_c[0]));
 21   genvar i;
 22   generate
 23     for (i = 1; i < N; i = i + 1) begin:gen_adder
 24       full_adder addN(.a(a[i]),.b(b[i]),.c_in(_c[i-1]),.s(s[i]),.c(_c[i]));
 25     end
 26   endgenerate
 26  endmodule
1模全加器(a、b、c、in、s、c);
2输入a、b、c_;
3输出s,c;
4分配s=a^(b^c_in);
5分配c=(a&b)|(c|u in&(a&b));
6端模块
8模块rc_加法器(a、b、cin、s、cout);
9输入a、b、cin;
10输出s,cout;
11参数N=32;//位
12线[N-1:0]a;
13导线[N-1:0]b;
14线[N-1:0]s;
15线cin;
16线槽;
17线[N-1:0]\u c;
18分配系数=_c[N-1];
20全加器add0(.a(a[0]),.b(b[0]),.c_in(cin),.s(s[0]),.c(_c[0]);
21 genvar i;
22生成
23对于(i=1;i
从21日到25日,我得到了thees的错误:

  • (21):分析错误,应为“(”
  • (23):分析错误,应为“error”或“(或“IDENTIFIER”)
  • (23):分析错误,应为“错误”或“)”
  • (23):分析错误,应为“错误”或“)”
  • (23):分析错误,应为“错误”或“)”
  • (23):分析错误,应为“错误”或“
  • (25):解析错误

请帮助…

最好的猜测是您的模拟器只支持或默认为IEEE1364-1995(又名Verilog-95)。IEEE1364-2001(又称Verilog-2001或v2k)中添加了
generate
功能

首先确保您的模拟器支持Verilog-2001。然后确保启用了2001功能。大多数现代模拟器默认为Verilog-2001或Verilog-2005,并具有回滚到Verilog-95的标志

当我强制模拟器在Verilog-95模式下运行时,我能够在上重新创建类似的错误消息


我看到了很多关于你的模块头代码和各种模拟器的警告。有些模拟器会抛出错误。当我把它改成bellow时,它更干净,运行正常

module rc_adder(a,b,cin,s,cout);
  parameter N = 32; // bits
  input  [N-1:0] a;
  input  [N-1:0] b;
  input          cin;
  output [N-1:0] s;
  output         cout;
  wire   [N-1:0] _c;
Verilog-2001及更高版本还支持ANSI样式的模块头,该模块头更简单、更干净。如果您将模块头更改为ANSI样式,并且出现更多错误,则意味着您的模拟器不支持Verilog-2001或未启用

module rc_adder #(parameter N = 32) (
  input  [N-1:0] a, b
  input          cin,
  output [N-1:0] s,
  output         cout );
  wire   [N-1:0] _c;

你有没有不给我们看的代码?代码里没有行号,是吗?不,这就是所有的代码。至于数字,我已经明确地编写了它们,以便更容易地找到给出问题的行