马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
module add(a, b, ci, s, co); input a,b,ci; output s,co; reg s,co; always @(a or bor ci) begin s=a^b^ci; co=a&b+b&ci+a&ci; end endmodule
module adder16(a, b, cin, sum, cout); input[16:1] a; input[16:1] b; input cin; output [16:1]sum; reg [16:1] sum; output cout; reg cout; reg [16:0] vsum; reg [16:0] carry;
integer i; initial begin for(i=1;i<=16;i=i+1) begin addadder16(.a(a),.b(b),.ci(carry[i-1]),.s(sum),.co(carry)); end end always @(a orb or cin) begin if(i==1) vsum[1]=(a[1]^b[1])^cin; carry[1]=(a[1]&b[1])|(cin&(a[1]|b[1])); elseif (i>1) for(i=2;i<=16;i=i+1) begin vsum=(a^b)^carry[i-1]; carry=(a&b)|(carry[i-1]&(a|b)); end end assignsum=vsum[16]; assigncout=carry[16]; endmodule
写了一个16位全加器的verilog程序。但是编译一直出错。
Error (10663): Verilog HDL Port Connection error at adder16.v(29): output or inout port "s" must be connected to a structural net expression Error (10663): Verilog HDL Port Connection error at adder16.v(29): output or inout port "co" must be connected to a structural net expression Error: Can't elaborate top-level user hierarchy
我知道出错是说s 和co 所引用的必须是assign型,用wire。但是下面又有always。改过来这个又在always里报错,必须用reg型。真是不知道应该怎么改了。希望能帮我一下,提出宝贵意见。 |