Verilog代码中的BCD加法器,我不知道我的错误

BCD adder in Verilog code , I don't know my error

它给出了这些错误: 1bitFulladder.v:2: 语法错误

我准备把一个bcd加法器做成一个结构设计,有两个4位加法器。 错误不具体。无论我如何寻找错误,我都找不到它们。 我不明白这段代码有什么问题:

module 1bitFulladder(ai, bi, cin, sum, cout);
input   ai, bi, cin;
output  sum, cout;

wire    s0, c0, c1;

assign  s0=ai^bi;
assign  c0=ai&bi;
assign  c1=s0&cin;
assign  sum=s0^cin;
assign  cout=c0|c1; endmodule

module 4bitFulladder(a, b, Cin, Sum, Cout);

input   [3:0]a;
input   [3:0]b;
input   Cin;
output  [3:0]Sum;
output  Cout;

wire    c1, c2, c3;

1bitFulladder f0(.ai(a[0]), .bi(b[0]), .cin(Cin), .sum(Sum[0]), .cout(c1));
1bitFulladder f1(.ai(a[1]), .bi(b[1]), .cin(c1), .sum(Sum[1]), .cout(c2));
1bitFulladder f2(.ai(a[2]), .bi(b[2]), .cin(c2), .sum(Sum[2]), .cout(c3));
1bitFulladder f3(.ai(a[3]), .bi(b[3]), .cin(c3), .sum(Sum[3]), .cout(Cout));endmodule

module bcdadder(A, B, Carry_in, C, result);

input   [3:0]A;
input   [3;0]B;
input   Carry_in;
output  [3:0]result;
output  C;

integer mid_sum=0;
reg [4:0] mid_sum;
reg [3:0] result;
reg C;

wire    [3:0]z;
wire    [3:0]s;
wire    k, w1, w2, w3;

always@(A, B, Carry_in)
begin
    mid_sum=A+B+Carry_in;
    if(mid_sum>9) begin
        mid_sum=mid_sum+6;
        C=1;
        result=mid_sum[3:0]; 
    end
    else begin
        C=0;
        result=mid_sum[3:0];
    end
end

4bitFulladder F0(.a(A), .b(B), .Cin(Carry_in), .Sum(z), .Cout(k));
assign  w1= z[3]&z[2];
assign  w2 = z[3]&z[1];
assign  result = k|w1|w2;
assign  begin s[0]=0; s[1]=C; s[2]=C; s[3]=0; end
4bitFulladder F1(.a(z), .b(s), .Cin(0), .Sum(result), .Cout(0)); endmodule

感谢您的帮助!

  1. 模块名称在Verilog的BNF中属于identifier,应遵循以下规则:

The first character of a simple identifier shall not be a digit or $; it can be a letter or an underscore.

  1. input [3;0]B; 在模块 bcdadder 中使用了错误的分隔符。

  2. 在模块 bcdadder 中,您有重复的 mid_sum

  3. 更改此 assign begin s[0]=0; s[1]=C; s[2]=C; s[3]=0; end 以分隔 assigns。

  4. 您在模块 bcdadder.

    中有一个 multi-driven result 网络
  5. 最后一行,如果你不使用实例F1Cout输出,就不要连接它。


你只需要一个更好的viewer/reader/linter/...