码迷,mamicode.com
首页 > 其他好文 > 详细

Chisel3 - bind - PortBinding

时间:2019-01-01 14:06:30      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:link   auth   com   undle   rtb   个数   closed   不可   ada   

 
介绍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,就成了双向引用,可以互相查找。
 
 
 

Chisel3 - bind - PortBinding

标签:link   auth   com   undle   rtb   个数   closed   不可   ada   

原文地址:https://www.cnblogs.com/wjcdx/p/10204600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!