| 
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册  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型。真是不知道应该怎么改了。希望能帮我一下,提出宝贵意见。  |