https://mp.weixin.qq.com/s/UHGq74sEd9mcG5Q3f-g3mA

 
介绍AddressDecoder的实现。
 
1. 基本定义
 
每个Port包含多个地址集合(Seq[AddressSet]),需要确定输入的地址是属于哪一个Port。
AddressDecoder的任务是在满足需求的情况下,找到需要比对的最少比特位。
 
其中,givenBits是确定要比对的比特位。如果givenBits已经可以满足需求,则不需要再找其他比特位。
 
2. 类型定义
 
 
3. partitionPort
 
根据AddressSet中bit对应位的值,把Port中的AddressSet分成两部分。
这里存在三种情况:
 
这样就把一个Port拆分为两部分分别称为一个Port。
 
4. partitionPorts
 
根据partitionPort的划分结果,把所有相似的Port搜集到一起。
 
case_a_ports中包含的port中的所有的AddressSet中,bit对应位的值为0;
case_b_ports中包含的port中的所有的AddressSet中,bit对应位的值为1;
 
5. partitionPartitions
 
根据partitionPorts的划分结果,把所有相似的Partition搜集到一起。
 
最初的Partitions中只包含一个partition,
根据第一个比特位的划分,把这一个partition分为两个partition;
根据第二个比特位的划分,把这两个partition分为四个partition;
。。。
 
每个partition中的port是bit对应位相同的port,亦即使用bit对应位无法区分的port。所以最终的目标是每个partition中只包含一个port,这样就可以把所有的port都能单独区分出来。
 
6. bitScore
 
对bit划分的结果进行评分,依据是均匀程度,越能把Ports进行均匀划分的bit位得分越高:
 
这里有一个疑似Bug:
根据命名规则,前两个度量使用max开头,使用max结尾;后两个度量应该是使用sum开头,使用sum结尾。但是第四个度量值使用sum开头,而使用max结尾。使用max结尾,使其意义与第二个度量值一样,显得冗余。所以应当是sum结尾。
 
7. recurse
 
从bits中,递归找到能对所有Port进行唯一区分的最有比特位集合。
 
8. AddressDecoder.apply
 
 
a. 确保任意两个Port中的地址集合不重叠,重叠的地址集合怎样都无法区分;
b. 找到所有要尝试的比特位;
c. givenBits包含了一定要比对的比特位,所以先使用其中的比特位进行划分;
d. 使用recurse找到bitsToTry中的最优比特位组合;
e. 与givenBits或在一起即为(为了确定address属于哪一个port,)所有要比对的比特位;
f. 验证结果:只考虑output中比特位的情况下,任意两个Port中的地址集合不重叠;
 
9. 使用实例
 
ahb/Xbar.scala(为提升可阅读性,已进行重构):
 
a. 找到所有的port:val port_addrs;
b. 找到区分port地址所需要的比特位:val routingMask;
c. 每个port中,只考虑routingMask中的位,所需要比对的地址:route_addrs;
d. 生成电路比对输入的地址(in.haddr)是否存在与每一个Port中,返回结果比特位(Bool);
 

Rocket - diplomacy - AddressDecoder的更多相关文章

  1. Rocket - diplomacy - LazyModule的组织方式

    https://mp.weixin.qq.com/s/vaDUekxkFkOJLmzg5jCngw 简单介绍LazyModule/LazyModuleImp的组织方式. 1. LazyModule L ...

  2. Rocket - diplomacy - LazyModule的实例化(补)

    https://mp.weixin.qq.com/s/rgCRorjPYyyD6i7moIzbZg   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  3. Rocket - diplomacy - LazyModule的实例化

    https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIn ...

  4. Rocket - diplomacy - LazyModule

    https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ   介绍LazyModule的实现.     ​​   1. children   LazyModu ...

  5. Rocket - diplomacy - ValName

    https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ   简单调试ValName实现:   1. 使用     ​​   Desugar之后如下: ​​ ...

  6. Rocket - diplomacy - NodeHandle相关类

    https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA   介绍NodeHandle相关的类.     ​​   1. NoHandle   顶层类(tra ...

  7. Rocket - diplomacy - DUEB参数模型的设计

    https://mp.weixin.qq.com/s/9PEEpe1pkQDN9RWpOGSUCQ   介绍DUEB参数模型的设计,不包含实现(实现对设计做了简化).     1. DUEB   di ...

  8. Rocket - diplomacy - 模块结构信息

    https://mp.weixin.qq.com/s/cTRxXwWNEeb4-XX_t4bRcg   讨论模块结构信息的来源及使用方式.     ​​   1. diplomacy   diplom ...

  9. Rocket - diplomacy - misaligned

    https://mp.weixin.qq.com/s/poCJBcx45clXHm6Uuv8M6w 介绍AddressSet.misaligned的实现.之前介绍的比较概括,也有偏差.这里根据实际执行 ...

随机推荐

  1. SpringCloudStream学习(一)RabbitMQ基础

    应公司大佬要求,学习一下SpringCloudStream,作为技术储备.这几天也看了这方面的资料,现在写一篇笔记,以做总结.文章会从RabbitMQ基础讲起,到SpringCloudStream结束 ...

  2. 【Kafka】自定义分区策略

    自定义分区策略 思路 Command+Option+shift+N 调出查询页面,找到producer包的Partitioner接口 Partitioner下有一个DefaultPartitioner ...

  3. 标准IDOC同步采购订单

    目录 1功能说明    4 2功能实现    4 2.1创建逻辑系统并分配集团(SALE)    4 2.2维护RFC目标(SM59)    5 2.3在发送端创建模型视图(BD64)    5 2. ...

  4. SVN 报错问题

    svn: error: The subversion command line tools are no longer provided by Xcode ```. ## 问题分析 由于Mac绝大部分 ...

  5. 手机app传统邀请码安装与免邀请码安装区别,如何选择呢?

    App 邀请机制是每个产品几乎必做的功能点,它一般以两种形式存在:一是作为常置功能用于推荐,二是作为裂变活动用于邀请. 无论以哪种形式出现,都可以归为社交分享的一种表现方式.相较于营销推广,邀请好友机 ...

  6. 【疑问】SQLServer_DNS注入数据库因为点号不能显示数据库的库名的方法[语音和音乐]

    你好,欢迎关注我的网站: www.leosec.net

  7. vue $refs的静态绑定使用与动态绑定使用

    以下实例实现的同一个操作 静态使用 this.$refs.tbhead.clearSelection(); 动态使用 area="tbhead" //可以是函数传入的参数 this ...

  8. 当Tomcat遇上Netty

    故事背景 嘀嘀嘀~,生产事故,内存泄漏! 昨天下午,突然收到运维的消息,分部某系统生产环境内存泄漏了,帮忙排查一下. 排查过程 第一步,要日志 分部给到的异常日志大概是这样(鉴于公司规定禁止截图禁止拍 ...

  9. POJ3275 Ranking the Cows floyd的bitset优化

    POJ3275 Ranking the Cows #include <iostream> #include <cstdio> #include <bitset> u ...

  10. C# DataTable转为TXT文档

    public static void SaveCSV(DataTable dt, string fullPath) { var fi = new FileInfo(fullPath); if (!fi ...