在Verilog中制作一个完整的加法器

时间:2016-10-03 16:23:17

标签: verilog

我试图在Verilog中做一个加法器,到目前为止我还没有设法这样做,我想知道是否有人可以提供帮助。 这是我的代码:

module fulladder.v(
input a,
input b,
input c,
output sum,
output carry
);
wire (w1, w2, w3, w4);
xor(sum, a, w2);
xor(w2, b, c);
and (w3, b, c);
and (w4, b, c);
and (w5, c, a);
or (carry, w3, w4, w5);
endmodule

当我在模块之后使用fulladder.v运行它时出现语法错误但是当我使用fulladder(没有.v)时我会遇到很多错误:

***** START RUN *****
ERROR:HDLCompiler:806 - "fulladder.v" Line 8: Syntax error near "w1".
ERROR:HDLCompiler:1059 - "fulladder.v" Line 8: w1 is an unknown type
WARNING:HDLCompiler:329 - "fulladder.v" Line 10: Target <w2> of concurrent assignment or output port connection should be a net type.
WARNING:HDLCompiler:329 - "fulladder.v" Line 11: Target <w3> of concurrent assignment or output port connection should be a net type.
WARNING:HDLCompiler:329 - "fulladder.v" Line 12: Target <w4> of concurrent assignment or output port connection should be a net type.
ERROR:HDLCompiler:598 - "fulladder.v" Line 1: Module <fulladder> ignored due to previous errors.
***** OUTPUT *****
***** RESULT *****
FAIL

有谁知道什么是错的?我非常感谢任何帮助!

由于

3 个答案:

答案 0 :(得分:1)

正确的语法是

wire w1, w2, w3, w4;

另外,您永远不会使用w1,而是使用w5但不要声明它。

答案 1 :(得分:0)

在Verilog中创建完整加法器并不是一项艰巨的任务。 绝对必须删除fulladder.v。尝试以下代码。

module fulladder(A,B,Cin,Sum,Cout);   
input A,B,Cin;
output Sum,Cout;
wire andout1, andout2, xorout;
xor(xorout,A,B);
xor(Sum,xorout,Cin);
and(andout1,Cin,xorout);
and(andout2,A,B);
or(Cout,andout1,andout2);
endmodule

获得更多详细信息,以及是否想知道如何为完整的加法器编写测试平台。请点击以下链接。那里有几篇有关Verilog编码的博客文章。

Design a Full Adder with Verilog

答案 2 :(得分:-1)

module FA(
A,
B,
CarryIn,
Sum,
CarryOut);
input A;
input B;
input CarryIn;
output Sum;
output CarryOut;

wire w_WRITE_1;
wire w_WRITE_2;
wire w_WRITE_3;

assign w_WRITE_1=A ^ B;
assign w_WRITE_2=w_WRITE_1 & CarryIn;
assign w_WRITE_3=A & B;
assign Sum=w_WRITE_1 ^ CarryIn;
assign CarryOut=w_WRITE_2 | w_WRITE_3;

endmodule