我试图在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
有谁知道什么是错的?我非常感谢任何帮助!
由于
答案 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编码的博客文章。
答案 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