Rocket - tilelink - Atomics】的更多相关文章

https://mp.weixin.qq.com/s/TSwKL_qm-b-0e8x7r--hhg   简单介绍Atomics中数学运算.逻辑运算的实现.   ​​   1. io   Atomics是一个硬件模块,他继承自Modules: ​​   IO端口定义如下: ​​ 其中: a. write: 是否写操作: b. a:输入操作类型及一个操作数: c. data_in:输入另一个操作数: d. data_out:输出计算结果:   2. Arithmetic params   处理cha…
https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA   简单介绍RegisterRouter的实现.   ​​   1. 基本介绍   实现挂在TileLink总线上的寄存器节点.   2. TLRegisterNode   实现diplomacy概念下的寄存器节点,是一个下游节点,即末端节点: ​​   1) 参数   ​​ a. address:支持的地址集合: b. device:寄存器所属设备: c. deviceKey:设备键值:控制寄存…
https://mp.weixin.qq.com/s/9ccDTm6HytvfGN5R2CPoAQ   简单介绍RAMModel的实现.   ​​   1. 基本介绍   RAMModel用于定义内存访问模型,即统计内存访问信息,并进行验证,以确定是否存在非法访问.   2. MonitorParameters   封装监控参数,包括访问地址和访问大小: ​​   3. ByteMonitor   一个字节的监控信息,包括是否有值.值: ​​   4. FlightMonitor   封装正在等…
https://mp.weixin.qq.com/s/O7VTHqpCFNJQi3EpucXkIw   简单介绍AtomicAutomata的实现.(细节问题太多,恕不完全表述.)   ​​   1. 基本功能   AtomicAutomata是一个适配模块,为下游节点添加Atomic操作的支持.Atomic操作包括数学运算和逻辑运算两大类.   类参数如下: a. logical:是否为下游节点添加logical操作支持,也就是AtomicAutomata这个节点是否实现logical原子操作…
https://mp.weixin.qq.com/s/KJ8pVH76rdxPOZ1vE3QlKA   简单介绍tilelink对Diplomacy Nodes的实现.   ​​   1. TLImp   TLImp继承自NodeImp: ​​ 其中: a. D: TLClientPortParameters b. U: TLManagerPortParameters c. EO: TLEdgeOut d. EI: TLEdgeIn e. B: TLBundle f. mixI/mixO把当前节…
https://mp.weixin.qq.com/s/v8plWCBD8vZkxykjJe4TCg   介绍AsyncCrossing的实现,主要介绍如何实现diplomacy Node和LazyModule相关内容.   ​​   1. TLAsyncCrossingSource   异步上游节点(源节点): ​​   1) node:LazyModule的节点成员   node用于与其他diplomacy节点协商参数,在这里是一个异步上游节点: ​​   TLAsyncSourceNode是…
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的定义,如果整理出来,应该如下表: ​​  …
https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ   简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析).   ​​   1. TLManagerParameters   ​​ 定义TileLink Manager节点的参数,Manager节点为Sink节点.   1) 参数列表   a. address:支持的地址集合: b. resources:包含的资源: c. regionType:区域类型: d. exec…
https://mp.weixin.qq.com/s/jrqBg2AIpQogBrpwNXjmwg   简单介绍Bundles文件中对TileLink规范(1.7.1)的定义. 参考链接:https://docs.qq.com/sheet/DUVRzVGVqemZvVGFQ   1. TLMessages   1) 定义TileLink支持的各种消息:   ​​ 两点区别: a. Acquire分成了两个AcquireBlock和AcquirePerm: b. 使用Hint/HintAck消息实…
https://mp.weixin.qq.com/s/jSnhBzU5_ayQCg5fWAcx-g 简单介绍TLBusWrapper.to()的实现.主要介绍确定this{...}对应代码的过程. 1. CanHavePeripheryPLIC 在CanHavePeripheryPLIC中,调用了cubs.coupleTo方法,把plic.node作为下游节点连接到cbus上: 这里cbus.coupleTo()()的两个参数列表: a. 第一个为名称:name: b. 第二个是代码块gen:…
https://mp.weixin.qq.com/s/03BvgTNQtD75Guco6gUGQg   简单介绍BusWrapper的实现.   1. HasTLBusParams   定义SoC的挂载点相关的宽度信息: ​​ a. beatBytes:一个时钟周期最大能请求的字节数: b. blockBytes:(推测)一次请求(可以包含多个beat)最大能请求的字节数:   其他的通过这两个参数生成: a. beatBits:把beatBytes换算成位数: b. blockBits:把bl…
https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内部的连接逻辑.   2. object TLXbar   定义了一些辅助方法.   1) assignRanges   ​​   把size放大到与之临近的2的幂,然后进行排序累加,确定新的范围. ​​   运行结果如下: ​​   2) mapInputIds   重新划定sourceId的范围:…
https://mp.weixin.qq.com/s/pmJcsRMviJZjMwlwYw6OgA   简单介绍WidthWidget的实现.   ​​   1. 基本介绍   用于设定与上游节点连接的数据总线的宽度.根据上下游数据总线宽度的大小关系,在转发消息时进行组合和拆分处理.   类参数innerBeatBytes是指与上游节点连接的数据总线所占的字节数: ​​   2. diplomacy node   diplomacy node用于与上下游节点连接,并协商参数.   TLWidth…
https://mp.weixin.qq.com/s/-z9n6SHyAiK2OE7mOSvC2Q   简单介绍SRAM的实现.   ​​   1. 基本介绍   实现一个支持读写的静态存储器.存取的内容可以使用ECC进行编解码和验证.   2. TLRAM   TLRAM是DiplomaticSRAM的子类: ​​   1) 类参数   a. address:支持的地址集合: b. cacheable:是否可被缓存: c. executable:是否可执行: d. beatBytes:数据总线…
https://mp.weixin.qq.com/s/1vyfhZuF4RyRE5Qjj6AGWA   简单介绍SourceShrinker的实现.   ​​   1. 基本介绍   用于把上游节点的source数量压缩到指定的值(maxInFlight). ​​   2. diplomacy node   diplomacy node用于与上下游节点相连接,并分别向上下游传递参数信息.   1) client   压缩之后的client参数,即要展示给下游节点看的client参数: ​​ 其中…
https://mp.weixin.qq.com/s/XZVCdt50tM6lavchGm9GRg   简单介绍RegionReplicator的实现.   ​​   1. 基本介绍   根据mask把某一个区域复制成多个区域.复制的数目是mask中比特1的数目的2次幂.   2. RegionReplicator   1) 类参数   ​​ mask是掩码,其中的比特1对应的位: a. 在待复制的区域地址的基址中应当为0: b. 在待复制的区域地址的掩码中应当为0: 如此,根据这些位值的变化,…
  简单介绍ProbePicker的实现.   ​​   1. 基本介绍   用于把多个Cache client合并成一个: ​​   2. diplomacy node   ProbePicker的diplomacy node是一个适配器节点,用于与上下游节点连接,并进行参数传递. ​​   这里下游节点的参数向上游节点传递时不做改变:上游节点的参数向下游节点传递时进行了适配,把可以合并处理的cache client的参数进行了合并,这样下游节点看到的ProbePicker的client参数中…
https://mp.weixin.qq.com/s/Dyb1XipJtdhGa9mktXXjCg   简单介绍Metadata的实现.   ​​   1. 基本介绍   Metadata是一个Bundle,即数据结构或者说变量类型.其中存放着Cache的状态,并且跟踪命令执行后状态的变化情况.   2. ClientStates   定义Client状态相关的方法: ​​   1) Cache相关状态   Cache节点的状态,是Nothing/Branch/Trunk/Dirty: ​​  …
https://mp.weixin.qq.com/s/6e-G5RSQc7Xje7mQj8-Lag   简单介绍Monitor的实现.   ​​   1. 基本介绍   用于监控各个channel上的消息是否正确.   2. TLMonitorArgs   Monitor的参数,包装一个边(TLEdge): ​​   3. TLMonitorBase   Monitor的基类: ​​ a. io.in:用于接收输入数据,以待进行监控: b. legalize:用于对输入的数据进行监控,以判断是否…
https://mp.weixin.qq.com/s/MHW_aBSL72YNee9bVWWeaw   简单介绍HintHandler的实现.   ​​   1. 基本功能   实现Hint请求的处理逻辑.   类参数: passthrough:是否把Hint请求透传给下游节点处理:   2. diplomacy node   HintHandler是一个适配器节点: ​​   1) clientFn   把HintHandler看到的上游节点的参数,转换为下游节点看到的HintHandler节…
https://mp.weixin.qq.com/s/hAKpZHy0IU6_XEvctfkHOA   简单介绍Fuzzer的实现.   ​​   1. IDMapGenerator   功能类似于IDPool,用于记录id的信息,并对ID进行分配和回收: ​​   2. LFSR64   用于生成一个64位随机数的逻辑: ​​   3. LFSRNoiseMaker   使用LFSR64生成一个指定宽度(wide位)的随机数输出: ​​   ​​   4. TLFuzzer   1) 基本功能…
https://mp.weixin.qq.com/s/kNQrhlf33AErK7IzalnUDw   简单介绍Fragmenter的实现.   ​​   1. 基本介绍   用于把上游节点地址空间范围比较大的访问请求,拆分成下游支持的多个地址空间范围较小的访问请求.   ​​ 1) 类参数   a. minSize:向下游节点发起的最小的访问大小: b. maxSize:上游节点可以下发的最大的访问大小: c. alwaysMin:是否把所有上游节点的请求,都拆分成minSize大小的访问请求…
https://mp.weixin.qq.com/s/6XX0CZHoDotIgLbNDSIUog   简单介绍Filter的实现.   ​​   1. 基本介绍   使用过滤器过滤掉client和manager的一部分能力.   2. ManagerFilter/ClientFilter   用于对manager和client进行过滤: ​​ a. 若过滤掉则返回None: b. 若没过滤掉,也可能进行更改:   3. mIdentity/cIdentity   不产生任何变化的过滤器: ​​…
https://mp.weixin.qq.com/s/JS4Pguwa6LXjPsMq6nW8HA   简单介绍FIFOFixer的实现.   ​​   1. 基本介绍   按照一定的策略把某一部分manager的fifoId摊平转换为一个fifoId,并为这个fifoId实现同步功能.这样上游节点看到的fifoId就减少了,所需要实现的同步功能就少了,减轻了其负担.   2. TLFIFOFixer.Policy   用于筛选Manager的策略: ​​   定义了如下三种: ​​   3.…
https://mp.weixin.qq.com/s/NkbW465NAmhDsETksd2M0g   介绍ErrorEvaluator的实现.   ​​   1. 基本介绍   ErrorEvaluator用于判断请求(Request)是否符合某种模式(Pattern). 若符合,则下游节点针对这个请求的响应消息中应该报告错误.   2. RequestPattern   ​​   1) 测试方法:test: TLBundleA => Bool   a. 输入参数:TLBundleA,可以看出…
https://mp.weixin.qq.com/s/y432EkLcBvVn2u_U3tPWeA   简单介绍CrossingHelper的实现.   ​​   1. 基本介绍   为节点生成一个跨时钟结构.可以指定模块的名称/作用域/上下游位置以及跨时钟方式等信息.   2. TLInwardCrossingHelper   ​​   1) name   用于生成名称节点以标识跨时钟结构.   2) scope   跨时钟结构所处的作用域.   3) node   这里是Inward节点,即…
https://mp.weixin.qq.com/s/pc8f_DOJ7w8k8BeM9gPzVw   简单介绍Delayer的实现.   1. 基本介绍   以一定的概率延迟消息的传递.   类参数 q is the probability to delay a request: ​​   取值范围在[0, 1): ​​   2. diplomacy node   Delayer的diplomacy node就是一个简单的AdapterNode,没有对经过他的参数做修改: ​​   3. la…
https://mp.weixin.qq.com/s/QsL1Bfb0JsOaxWW_muhg_Q   简单介绍CacheCork的实现.   ​​   1. 基本介绍   Cache的塞子,下游没有Cache节点.把上游节点的Acquire/Release消息转换为Get/Put消息实现. ​​   各个消息处理方法整理如下表: ​​   2. 类参数   ​​ 包含如下参数: a. unsafe:是否安全:至多能安全的支持一个Cache Client: b. sinkIds:支持的下游ID数…
https://mp.weixin.qq.com/s/-pjCLzzincJz0Z66orx8kg   介绍Broadcast的实现.   ​​   1. 基本介绍   TLBroadcast实现的是TL-C等级,支持Transfer操作.主要功能是根据输入的请求类型,广播Probe请求进行权限调整,维持缓存一致性(cache coherency).   2. Tracker   跟踪为了实现缓存一致性而发出的Probe请求的过程.Tracker根据配置参数bufferless,决定是否保存上游…
https://mp.weixin.qq.com/s/oZCYBdy5glxJQmYKVWvpvA   简单介绍BankBinder的实现.   ​​   1. 基本介绍   A BankBinder is used to divide contiguous memory regions into banks, suitable for a cache: a. BankBinder把连续的内存区域分成多个bank: b. 每个Bank的大小与cache相匹配:   2. 使用   在Exampl…