https://mp.weixin.qq.com/s/Gqv09RIgSSg5VKe-wb4aGg

 
讨论tilelink中使用MaskGen生成mask的用法。
 
1. tilelink中的mask
 
1) channel a/b包含一个mask信号:
 
Byte lane select for messages with data:
这里并没有显示mask信号。可以看到传输数据使用的byte lane与地址是对应的。按照mask的定义,如果整理出来,应该如下表:
 
 
a. The mask is also used for messages without a data payload. Get消息的data域是被忽略的,但是mask仍然要按照address/size去生成。
 
b. When the operation size is smaller than the data bus, the mask should be generated identically to an operation which does carry a data payload.
 
c. For operations which are larger than the data bus, all bits of the mask should be HIGH, although the message remains a single-beat.
 
d. PutPartialData比较特殊,mask中的HIGH比特不需要连续:0xa。
但是size=2^3=8字节,但是却只写了3个字节。a_size定义如下:
可以看到:
- a_size表示的是操作对象的范围(range),也就是说要写的数据从这个里面选;
- 这个写是不是一定写,而是有可能写(possibly write);
 
从以上两点可以看出,PutPartialData写的数据是在a_address/a_size范围内的mask任意为一的位对应的字节。
 
2) mask的实现
 
a. Get
 
使用MaskGen实现:
注意两点:
- address需要跟size对齐,也就是address%size=0;
- mask中为1的比特要连续;
 
实现mask的MaskGen()需要满足这两点。
 
b. PutFullData
 
同样包含Get中的两点:
- address需要跟size对齐,也就是address%size=0;
- mask中为1的比特要连续;
 
所以可以使用MaskGen()实现:
 
a_size表示要写的数据的总字节数;
 
c. PutPartialData
 
- address需要跟size对齐,也就是address%size=0;
- mask中为1的比特不需要连续;
 
其实现没有使用MaskGen(),需要外部实现后传入:
这里也可以看出MaskGen的特点。
 
a_size的意义在上面也分析过了:
- a_size表示的是操作对象的范围(range),也就是说要写的数据从这个里面选;
- 这个写是不是一定写,而是有可能写(possibly write);
 
2. MaskGen
 
从上面的分析可以看出,MaskGen()生成的mask的特点如下:
- address需要跟size对齐,也就是address%size=0;
- mask中为1的比特要连续;
 
在之前对MaskGen(链接:https://mp.weixin.qq.com/s/_aJqf1cFJDK5RVRBhxTWOw)的介绍中,与预期不一致的行,都是因为地址和size不对齐:
 
而注释中地址和大小并没有对齐:
 
这个例子似乎有点问题。
 
 

Rocket - tilelink - mask的更多相关文章

  1. Rocket - tilelink - RegisterRouter

    https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA   简单介绍RegisterRouter的实现.   ​​   1. 基本介绍   实现挂在Tile ...

  2. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

  3. Rocket - tilelink - WidthWidget

    https://mp.weixin.qq.com/s/pmJcsRMviJZjMwlwYw6OgA   简单介绍WidthWidget的实现.   ​​   1. 基本介绍   用于设定与上游节点连接 ...

  4. Rocket - tilelink - SRAM

    https://mp.weixin.qq.com/s/-z9n6SHyAiK2OE7mOSvC2Q   简单介绍SRAM的实现.   ​​   1. 基本介绍   实现一个支持读写的静态存储器.存取的 ...

  5. Rocket - tilelink - RegionReplicator

    https://mp.weixin.qq.com/s/XZVCdt50tM6lavchGm9GRg   简单介绍RegionReplicator的实现.   ​​   1. 基本介绍   根据mask ...

  6. Rocket - tilelink - RAMModel

    https://mp.weixin.qq.com/s/9ccDTm6HytvfGN5R2CPoAQ   简单介绍RAMModel的实现.   ​​   1. 基本介绍   RAMModel用于定义内存 ...

  7. Rocket - tilelink - HintHandler

    https://mp.weixin.qq.com/s/MHW_aBSL72YNee9bVWWeaw   简单介绍HintHandler的实现.   ​​   1. 基本功能   实现Hint请求的处理 ...

  8. Rocket - tilelink - Fragmenter

    https://mp.weixin.qq.com/s/kNQrhlf33AErK7IzalnUDw   简单介绍Fragmenter的实现.   ​​   1. 基本介绍   用于把上游节点地址空间范 ...

  9. Rocket - tilelink - BankBinder

    https://mp.weixin.qq.com/s/oZCYBdy5glxJQmYKVWvpvA   简单介绍BankBinder的实现.   ​​   1. 基本介绍   A BankBinder ...

随机推荐

  1. 你知道Spring是怎么解析配置类的吗?

    彻底读懂Spring(二)你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读系列 彻底读懂Spring(一)读源码,我们可以从第一行读起 Spring执行流程图如下: 如果图片 ...

  2. 10_CSS入门和高级技巧(8)

    图片透明 先来复习一下盒子的透明问题: opacity:0.6; 介于0~1之间,为了让IE兼容,我们要使用IE自己的滤镜: filter:alpha(opacity=60); 盒子的透明,会让里面的 ...

  3. Openwrt:基于MT7628/MT7688的PWM驱动

    前言 MT7628/MT7688的PWM驱动相关资料较少,官方的datasheet基本也是一堆寄存器,啃了许久,终于嚼出了味道.由于PWM存在IO口复用的问题,所以要提前配置好GPIO的工作方式,不然 ...

  4. (2)通信中为什么要进行AMC?

    AMC,Adaptive Modulation and Coding,自适应调制与编码. 通信信号的传输环境是变化不定的,信道环境时好时差.在这种情景下,我们不可能按照固定的MCS进行信号发送.假如信 ...

  5. Jmeter-Throughput Controller 吞吐量控制器

    比如在压测是时候,我设置了100个线程组,循环2次,那么我想根据吞吐量进行并发请求,这时候可以用到这个吞吐量控制器 PercentExecutions:按执行次数的百分比来计算执行次数,Through ...

  6. 移动端APP自动化测试超全基础汇总

    目录 一.面试过程 1.自动化岗位要求 2.面试流程,面试类型 3.沟通技巧,不同级别要求 二.真实面试案例 1.一个输入框的面试题(有人拿到高级岗位,有人连初级都没拿到,为什么) 三.自我分析 1. ...

  7. Oracle SQLPlus导出数据到csv文件

    时不时地我们需要导出一些数据用作备份.查看报表等,如果用Sql Developer导出会非常慢.而用SqlPlus,则速度非常快. 准备SQL执行文件export.sql: set colsep , ...

  8. Linux系统中如何升级pip

    问题提出:在Linux系统下安装python的logging库时提示以下信息 经过一番折腾,定位在pip版本过低和setuptools版本过低上 一.Linux下更新包 sudo python3 -m ...

  9. 【雕爷学编程】Arduino动手做(49)---有源蜂鸣器模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

  10. 【比较】遗传算法GA和遗传编程GP有什么不同?

    遗传算法GA 本质上有一个固定的长度,这意味着所产生的功能有限的复杂性 通常会产生无效状态,因此需要以非破坏性方式处理这些状态 通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可 ...