Rocket - diplomacy - NodeHandle相关类
2024-10-09 05:06:31
https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA
介绍NodeHandle相关的类。
1. NoHandle
顶层类(trait),作为所有NodeHandle的父类型,没有定义特别操作。
2. InwardNodeHandle
主要用于实现节点绑定逻辑。
1) bind方法
委托给InwardNode.bind()实现;
2) 与NodeHandle连接
a. 连接
与Chisel3中相同,“:=”的意思为连接,左侧为下游,右侧为上游。上游流出为Outward,下游流入为Inward。
b. 多
按连接个数和方向,这四个方法分别代表了一对一、一对多、多对一、多对多这四种连接形式。
“*”代表连接个数不确定;
“*”与“=”的相对位置代表了哪一侧的个数不确定。个数不确定,需要根据实际情况确定(resolve)。
一对多是指一个上游节点发出多条连接,连接到下游节点,其形状为星型(star)。最终连接个数由多的一侧,也就是下游节点确定。
c. 实例
引自链接:https://www.lowrisc.org/docs/diplomacy/
The input crossbar crossbarI has three inwards connections with the three processors. However, there is only one connection with the cache that is set up by :=*. Similarly, the output crossbar has two outwards connections but only one inwards connection with cache set up by :*=. In other words, :=* means the number of connections is defined by the outwards side while :*= means the number of connections is defined by the inwards side.
d. 级联
连接的动作是可以级联的,如:
连接方法的返回值为InwardNodeHandle:
所以返回值可以作为连接符号的左侧,继续进行级联。
以“:=”为例,其方法签名和实现如下:
首先在参数中,把h看做是一个上游节点,要连接到this这一个下游节点;
然后在返回值,把h看做是一个下游节点,供级联时作为下游节点使用;
e. 类型
以“:=”为例,其方法签名如下:
InwardNodeHandle本身的参数类型为:
“:=”方法又声明了几个方法参数类型:
这些带X的参数类型是h引入的,作为h的DI/UI/EI/BI系列参数使用。
h的类型如下:
使用InwardNodeHandle类型的参数类型DI/UI/BI作为NodeHandle定义中的DO/UO/BO,这说明了这个定义使用的是简化模型,也就是上游节点的DO/UO/BO和下游节点的DI/UI/BI是同一个类型。
返回值的类型为:
这是h作为inner side的类型。
PS. EY为h的输出边,类型可以与this的输入边EI不同。这里不做讨论。
3) 与OutwardNodeHandle连接
上游节点h为OutwardNodeHandle类型,输出为NoHandle,不可级联。
3. OutwardNodeHandle
节点绑定有InwardNodeHandle实现,所以OutwardNodeHandle相对简单。
4. NodeHandle
NodeHandle既可以充当InwardNodeHandle也可以充当OutwardNodeHandle。
1) 与NodeHandle连接
连接后的两个节点组合成为一个整体,以上游节点h的输入为输入,以下游节点this的输出为输出:
2) 与OutwardNodeHandle连接
因为上游节点是一个OutwardNodeHandle,可以立即为一个只有输出没有输入的节点,所以返回的是一个OutwardNodeHandle,没有输入,以下游节点this的输出为输出:
5. NodeHandlePair
用于组合两个NodeHandle:
最新文章
- Webpack中hash与chunkhash的区别,以及js与css的hash指纹解耦方案
- Tab切换
- Android剪切板传递数据传递序列化对象数据
- ITaCS Change Password web part
- python 开发一个支持多用户在线的FTP
- win32 htmlayout点击按钮创建新窗口,以及按钮图片样式
- hammer.js初探
- CentOS 7 配置静态IP后不生效 &; Job for network.service failed
- Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Openssl 1.1.0e + Mariadb 10.1.22 + Nginx 1.12.0 + PHP 7.1.4 + Laravel 5.4 )
- css3用到知识点小结
- Atitit 翻页功能的解决方案与版本历史 v4 r49
- 关于SQL语句中的distinct和group by
- DS-博客作业03--栈和队列
- 【linux】dpkg info修复及dpkg: warning: files list file for package
- 报错---“node install.js”
- 移除DuiLib项目Linker中的riched20.lib
- 一种基于zookeeper的分布式队列的设计与实现
- boost.asio源码剖析(三) ---- 流程分析
- 李洪强和你一起学习前端之(6)css行高,盒模型,外边距
- 关于 webpack 跨域