HDLbits刷题总结-modules:Hierarchy-adder1

错误代码:

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
        wire c ;
    
    add16 u1 ( .cin(1'b0) , 
              .a[15:0](a[15:0]) , 
              .b[15:0](b[15:0]) , 
              .sum[15:0](sum[15:0]) , 
              .cout(c) 
            );
    add16 u2 ( .cin(c) , 
              .a[15:0](a[31:16]) , 
              .b[15:0](b[31:16]) , 
              .sum[15:0](sum[31:16]) , 
              .cout()
            ) ;

endmodule

正确代码:

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
        wire c;
    
    add16 u1( .cin(0), 
              .a(a[15:0]), 
              .b(b[15:0]), 
              .sum(sum[15:0]), 
              .cout(c) 
            );
    add16 u2( .cin(c) , 
              .a(a[31:16]) , 
              .b(b[31:16]) , 
              .sum(sum[31:16]) , 
              .cout()
            );

endmodule

总结:

基于前几题和这题的经验,模块的例化类似于C语言等高级语言的函数的引用,但是又有不同。

在我的理解里,verilog中的例化是对电路的组合,例化实际上是在做接线的工作。为了实现要求的功能,例化一个个更小特定功能的模块。

例化时,括号外为例化模块端口名(不需要声明位宽),括号内为需要传递的参数,此时如果是向量形式的参数需要声明数据位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值