zoukankan      html  css  js  c++  java
  • Chisel3

     
    介绍Module输入输出端口如何进行绑定。
     
     
     
    1. IO()
     
    在定义一个模块时,使用Bundle的匿名子类型来定义模块的输入输出端口,然后将其传递给IO()方法。
     
    IO()方法定义在BaseModule中,其记录自定义Bundle匿名子类型中各个数据成员的绑定信息。亦即把输入输出端口绑定到所在的模块上。
     
     
    a. 不能重复绑定:requireIsChiselType(iodef, "io type")
    b. 获取一个iodef的克隆:iodef.cloneTypeFull
    c. 调用_bindIoInPlace执行绑定动作
    d. 返回iodefClone
     
    PS. require(!_closed, "Can't add more ports after module close")中的closed是指模块是否已经完成定义,已经完成后则不可以再添加输入输出端口,这个后面再讲。
     
    2. _bindIoInPlace
     
    这个方法实际执行绑定动作:
    a. _bindIoInPlace为BaseModule类的方法,所以PortBinding(this)中的this是指当前模块;
    b. PortBinding(this)使用当前模块构造一个PortBinding:
    c. iodef的类型为Bundle的子类型,所以有bind方法,调用其bind方法进行绑定
     
    绑定的对象(target)为PortBinding,而这个PortBinding中含有对当前模块的引用。从而把iodef和当期模块绑定到一起。
     
    d. 把iodef加入到当前模块的IO端口中:_ports += iodef,这样实现了从模块到端口的引用。
     
    结合iodef到模块的binding,就成了双向引用,可以互相查找。
     
     
     
  • 相关阅读:
    appium工作原理
    Python文件读写模式
    Redis info 参数详解
    MySQL show status 参数详解
    Monit : 开源监控工具介绍
    Ansible(三)
    Ansible(二)
    Ansible(一)
    使用python实现后台系统的JWT认证(转)
    微信公众号-5秒内不回复测试并处理方案,顺便复习php 时间执行
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10204600.html
Copyright © 2011-2022 走看看