加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Chisel3 - bind - PortBinding

发布时间:2020-12-14 05:17:22 所属栏目:大数据 来源:网络整理
导读:https://mp.weixin.qq.com/s/NaInHsJgOwG03BLNF-wlxQ ? 介绍Module输入输出端口如何进行绑定。 ? ? ? ? ? 1. IO() ? 在定义一个模块时,使用Bundle的匿名子类型来定义模块的输入输出端口,然后将其传递给IO()方法。 ? IO()方法定义在BaseModule中,其记录自

https://mp.weixin.qq.com/s/NaInHsJgOwG03BLNF-wlxQ
?
介绍Module输入输出端口如何进行绑定。
?
?

?
?
?
1. IO()
?
在定义一个模块时,使用Bundle的匿名子类型来定义模块的输入输出端口,然后将其传递给IO()方法。
?
IO()方法定义在BaseModule中,其记录自定义Bundle匿名子类型中各个数据成员的绑定信息。亦即把输入输出端口绑定到所在的模块上。
?
?

?
?
a. 不能重复绑定:requireIsChiselType(iodef,"io type")
b. 获取一个iodef的克隆:iodef.cloneTypeFull
c. 调用_bindIoInPlace执行绑定动作
d. 返回iodefClone
?
PS. require(!_closed,Songti SC font-size:7.2pt">"Can‘t add more ports after module close")中的closed是指模块是否已经完成定义,已经完成后则不可以再添加输入输出端口,这个后面再讲。
?
2. _bindIoInPlace
?
这个方法实际执行绑定动作:
?

?
a. _bindIoInPlace为BaseModule类的方法,所以PortBinding(this)中的this是指当前模块;
b. )使用当前模块构造一个PortBinding:
?

?
c. iodef的类型为Bundle的子类型,所以有bind方法,调用其bind方法进行绑定
?
绑定的对象(target)为PortBinding,而这个PortBinding中含有对当前模块的引用。从而把iodef和当期模块绑定到一起。
?
d. 把iodef加入到当前模块的IO端口中:_ports += iodef,这样实现了从模块到端口的引用。
?
结合iodef到模块的binding,就成了双向引用,可以互相查找。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读