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
感谢您的帮助!
- 模块名称在Verilog的BNF中属于
identifier
,应遵循以下规则:
The first character of a simple identifier shall not be a digit or $; it can be a letter or an underscore.
input [3;0]B;
在模块 bcdadder
中使用了错误的分隔符。
在模块 bcdadder
中,您有重复的 mid_sum
。
更改此 assign begin s[0]=0; s[1]=C; s[2]=C; s[3]=0; end
以分隔 assign
s。
您在模块 bcdadder
.
中有一个 multi-driven result
网络
最后一行,如果你不使用实例F1
的Cout
输出,就不要连接它。
你只需要一个更好的viewer/reader/linter/...
它给出了这些错误: 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
感谢您的帮助!
- 模块名称在Verilog的BNF中属于
identifier
,应遵循以下规则:
The first character of a simple identifier shall not be a digit or $; it can be a letter or an underscore.
input [3;0]B;
在模块bcdadder
中使用了错误的分隔符。在模块
bcdadder
中,您有重复的mid_sum
。更改此
assign begin s[0]=0; s[1]=C; s[2]=C; s[3]=0; end
以分隔assign
s。您在模块
中有一个 multi-drivenbcdadder
.result
网络最后一行,如果你不使用实例
F1
的Cout
输出,就不要连接它。
你只需要一个更好的viewer/reader/linter/...