博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Chisel3 - bind - Wire, Reg, MemPort
阅读量:6698 次
发布时间:2019-06-25

本文共 1141 字,大约阅读时间需要 3 分钟。

 
模块(Module)从输入端口(input ports)接收输入,经过内部实现的转换逻辑,从输出端口(output ports)输出。
 
在Chisel3中,模块的输入输出端口,通过IO(new Bundle{...})的形式定义,其中定义了各种类型的数据变量。在实现模块内部转换逻辑的时候,也需要使用到各种类型的数据变量。这些变量如何加入到hardware graph中呢?就是通过WireBinding和RegBinding等。
 
 
1. WireBinding
 
定义如下:
case class WireBinding(enclosure: UserModule) extends ConstrainedBinding
 
a. Wire()
 
通过Wire()对一个变量进行Wire绑定,实例如下:
 
 
Wire继承自WireFactory:
object Wire extends WireFactory
 
b. WireFactory
 
 
a. 生成一个t的克隆x;
b. 对x进行绑定:x.bind(WireBinding(Builder.forcedUserModule))
c. 绑定的对象为WireBinding:WireBinding(Builder.forcedUserModule)
d. Builder.forcedUserModule可以理解为当前模块;
 
2. RegBinding
 
定义如下:
case class RegBinding(enclosure: UserModule) extends ConstrainedBinding
 
a. Reg()
 
通过Reg()对变量进行寄存器绑定,实例如下:
 
 
a. 生成一个t的可能reg;
b. 对reg进行绑定:reg.bind(RegBinding(Builder.forcedUserModule))
c. 绑定的对象为RegBinding: RegBinding(Builder.forcedUserModule)
d. Builder.forcedUserModule可以理解为当前模块;
 
3. MemPortBinding
 
Mem中的每一个元素,在使用时都会使用MemPortBinding进行绑定。
 
a. 使用实例如下:
b. 创建Mem()时并不会绑定
 
 
Mem()调用实现如下:
 
Mem类继承自MemBase:
 
MemBase在创建时并不会进行绑定;
 
c. 使用时进行绑定
 
如:stack_mem(sp) := io.dataIn 中,stack_mem(sp)会调用方法:
 
进而调用makePort进行绑定:
 
 
 
 

转载于:https://www.cnblogs.com/wjcdx/p/10204603.html

你可能感兴趣的文章
总结面试时没有回答上的内存对齐问题
查看>>
U(优)盘安装FreeBSD-9.0+GNOME_lite桌面
查看>>
模拟产品展示 Flash无法展示的追踪过程
查看>>
Understand Lambda Expressions in 3 minutes(翻译)
查看>>
dom4j的读写xml文件,读写xml字符串
查看>>
Node.js 使用jQuery取得Nodejs http服务端返回的JSON对象示例
查看>>
ArcGIS AO开发高亮显示某些要素
查看>>
Python 错误和异常小结[转]
查看>>
Qt Style Sheets Reference
查看>>
C语言:几种字符输入函数的区别
查看>>
百度地图 Android SDK - 个性化地图
查看>>
面 试 细 节 一 点 通
查看>>
SharePoint 2013 Nintex Workflow 工作流帮助(六)
查看>>
Linux中断(interrupt)子系统之五:软件中断(softIRQ)
查看>>
【原】iOS:手把手教你发布代码到CocoaPods(Trunk方式)
查看>>
基于linux 的2048
查看>>
使用Cross-Page Postback(跨页面提交)在页面间传递数据
查看>>
To install 64-bit ODBC drivers
查看>>
MediaWiki安装配置(Linux)【转】
查看>>
网站的SEO以及它和站长工具的之间秘密
查看>>