https://mp.weixin.qq.com/s/ZsEVt1GslL7ufJdJlgpfNQ

 
介绍AddressSet的实现。
 
 
1. 基本定义
 
使用base/mask定义的一个地址集合,之所以用集合(Set)而不是范围(Range),因为范围一般情况下是指一个连续的范围,而base/mask定义的可以是多个连续的范围,比如上面例子中的e.g: base=0x1000, mask=0xf0f decribes a device managing 0x1000-0x100f, 0x1100-0x110f, ...。地址集合,更具有一般意义,是指地址的集合,可以是多个孤立的地址、多个不连续的地址的范围组成的地址集合。
 
mask的意义:
a. mask中为1的位对应的address中的位值可以变化;
b. mask中为0的位对应的address中的位值不可以变化;
 
限制条件为:
a. 对齐:mask中为1的位,在base中的值必须为0;
b. base需要大于0;
 
2. contains
 
this contains x,this包含x。
 
3. legalize
 
让x中的值落在this的集合中。
 
4. overlaps
 
判断是否重叠:mask之外的位都相同。
a. mask之外的位的值不可变,如果有一位不同,则地址不会相同;
b. 如果mask之外的位都相同,mask之中的位的值是可以变化的,变化之后会存在相同的情况;
 
5. alignment
 
对齐字节数。
 
6. contiguous
 
地址集合中的地址是否是连续的。比如:
 
7. finite
 
mask的类型为BigInt。相较于int类型使用32位表示,long类型使用64位表示,BigInt类型的数字位数是不确定的,根据需要而拓展位宽。
 
负数的高位全都是1,并且可以无限的填充1而不改变其值,如:
a. 8位的-2为0b1111_1110;
b. 16位的-2为0b1111_1111_1111_1110;
 
所以如果mask是负数,那么他包含多少个为1的位实际上是不确定的,或者说可以是无限的。
 
8. max
 
最大地址。
 
9. widen
 
把imask加入到当前地址的mask中。
 
10. intersect
 
求交集。
 
11. subtract
 
从this中排除也包含在x中的地址。
 
12. compare
 
排序时使用。
 
13. 伴生对象
 
1) everything
 
全部地址,mask中包含所有位:val everything = AddressSet(0, -1)
 
2) misaligned
 
一般情况下,是base每次增加alignment数量的地址,直到地址的数量达到size个位置。
 
3) unify
 
把seq中的AddressSet合并到尽量少的AddressSet中。
 
4) enumerateMask
 
 
5) enumerateBits
 

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

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

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

  2. Rocket - diplomacy - misaligned

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

  3. Rocket - diplomacy - AddressAdjuster

    https://mp.weixin.qq.com/s/X0s5CWN84GEiwpNR7tiRgA 基于AddressAdjuster介绍LazyModule的实现.   参考链接:https://g ...

  4. Rocket - diplomacy - AddressDecoder

    https://mp.weixin.qq.com/s/UHGq74sEd9mcG5Q3f-g3mA   介绍AddressDecoder的实现.   ​​ 1. 基本定义   ​​ 每个Port包含多 ...

  5. Rocket - diplomacy - enumerateBits

    https://mp.weixin.qq.com/s/KsZqe9W_DM6W6JecK_irvA   介绍AddressSet.enumerateBits方法的实现,主要是x & (-x)的 ...

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

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

  7. Rocket - diplomacy - LazyModule的实例化

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

  8. Rocket - diplomacy - LazyModule

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

  9. Rocket - diplomacy - ValName

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

随机推荐

  1. 环境篇:Atlas2.0.0兼容CDH6.2.0部署

    环境篇:Atlas2.0.0兼容CDH6.2.0部署 Atlas 是什么? Atlas是一组可扩展和可扩展的核心基础治理服务,使企业能够有效地满足Hadoop中的合规性要求,并允许与整个企业数据生态系 ...

  2. 视频文件自动转rtsp流

    最近碰到一个项目需要用到 rtsp 视频流做测试, 由于真实环境的 摄像头 并不能满足需求,故尝试了一下用本地视频文件转换成rtsp视频流做测试,记录一下~ 采用方案: Docker + EasyDa ...

  3. 你应该知道的Python3.6、3.7、3.8新特性

    很多人在学习了基本的Python语言知识后,就转入应用阶段了,后期很少对语言本身的新变化.新内容进行跟踪学习和知识更新,甚至连已经发布了好几年的Python3.6的新特性都缺乏了解. 本文列举了Pyt ...

  4. 利用一个VI写入或读取另一个VI的控件值

    利用一个VI写入或读取另一个VI的控件值(转载自浅浅的小草) 有一个VI,叫未命名1.vi.   还有一个vi,叫未命名2.vi     现在,我在 1.vi里要对2.vi的字符串控件进行写入.  可 ...

  5. [hdu4436 str2int]后缀自动机SAM(或后缀数组SA)

    题意:给n个数字串,求它们的所有不包含前导0的不同子串的值之和 思路:把数字串拼接在一起,构造SAM,然后以每个状态的长度len作为特征值从小到大排序,从前往后处理每个状态,相当于按拓扑序在图上合并计 ...

  6. 【Net】CEF浏览IISExpress运行Web项目

    前言 本文介绍在Winform桌面应用中,使用IISExpress做Host主机,启动.Net平台的Web项目. 浏览Web网页使用CEF开源组件. 准备 首先创建Winform项目WinFormII ...

  7. vue 事件修饰符(阻止默认行为和事件冒泡)

    1. 原生js中,阻止事件冒泡,获取点击对象, e.stopPropagation(); 2. vue阻止事件冒泡@click.stop="show" <body> & ...

  8. 关于RAID小结

    独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks ...

  9. 【Python Deap库】遗传算法/遗传编程 进化算法基于python DEAP库深度解析讲解

    目录 前言 概述 启发式的理解(重点) 优化问题的定义 个体编码 初始族群的创建 评价 配种选择 锦标赛 轮盘赌选择 随机普遍抽样选择 变异 单点交叉 两点交叉 均匀交叉 部分匹配交叉 突变 高斯突变 ...

  10. django安装及其他模块导入

    django安装 python项目第三方模块配置 pip3 list------查看当前pip安装的第三方模块