https://mp.weixin.qq.com/s/9PEEpe1pkQDN9RWpOGSUCQ   介绍DUEB参数模型的设计,不包含实现(实现对设计做了简化).     1. DUEB   diplomacy的DUEB参数模型包含了4组参数,分别是: a. DI/DO b. UI/UO c. EI/EO d. BI/BO   每一个参数类型的定义如下: ​​   参数模型图如下: ​​     下面主要以DI/DO为例,来做解释.   2. the node   DI = Downward…
https://mp.weixin.qq.com/s/533bJxcPRgO4W2gf_OEhEw   分析DUEB参数模型中各种参数类型的可能性.     1. 节点类型   根据参数的传播方向,可以把节点分为三类: a. 只输出参数的节点,参考OutwardNodeImp: b. 只接收参数的节点,参考InwardNodeImp: c. 既接收参数.又输出参数的节点,参考MixNode:   也就是说Outward和Inward节点是起始和终止节点,而Mixed节点是中继节点. ​​ ​​…
https://mp.weixin.qq.com/s/vaDUekxkFkOJLmzg5jCngw 简单介绍LazyModule/LazyModuleImp的组织方式. 1. LazyModule LazyModule是一个泛化的模块概念,其中包含了代表模块与其他模块相连的节点(diplomacy node),也包含了模块的内部逻辑实现(lazy val module). 其定义为: --------------------------------------------------------…
https://mp.weixin.qq.com/s/UYVSO3XFJmhe5bUD_XbMLg   先介绍如何使用AddressAdjuster,然后分析UI参数的生成及使用.   ​​   1. AddressAdjuster的使用   a. 创建AddressAdjuster实例   ​​ 注意usage()方法有一个implicit Parameters参数,在方法范围内引入了一个隐式参数对象,在new AddressAdjuster的时候会使用.   b. 关联node的上下游节点…
https://mp.weixin.qq.com/s/rgCRorjPYyyD6i7moIzbZg   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIntSource   以NullIntSource为例,将其作为顶层的LazyModule考虑: ​​     2. LazyModule实例化过程   1) 执行NullIntSource的构造方法,首先要逐层向上找到各个父类,然后逐层向下执行各个父类的构造方法:   a. 最开始执行LazyMod…
https://mp.weixin.qq.com/s/9PsBt4_4qHx4i6C5XtuiUw   介绍LazyModule和Node构造方法的执行过程,即实例化过程.     1. NullIntSource   以NullIntSource为例,将其作为顶层的LazyModule考虑: ​​     2. 实例化过程   1) 执行NullIntSource的构造方法,首先要逐层向上执行各个父类的构造方法:   a. 最开始执行LazyModule类的构造方法:用于构造LazyModul…
https://mp.weixin.qq.com/s/FBU8fE4u9-UK6mRGQOlvbQ   介绍LazyModule的实现.     ​​   1. children   LazyModule内部的LazyModule,说明LazyModule是可以嵌套的.   在如下位置添加: ​​     2. nodes   LazyModule内部的Node.   相较之下,Node不能嵌套,内部没有其他Node.   在BaseNode中添加: ​​     3. parent   记录父…
https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ   简单调试ValName实现:   1. 使用     ​​   Desugar之后如下: ​​   这里补上了省略掉的implicit parameter,如下: ​​     2. 实现   ValName的实现如下: ​​   ValNameImpl的实现如下: ​​     3. 提取   ValName和ValNameImpl实现相对独立,可以提取出来单独调试.   新建一个项目.因为…
https://mp.weixin.qq.com/s/BvK3He3GWon8ywG8Jdmcsg   介绍Node相关的类.   ​​   1. BaseNode   BaseNode是所有节点类的基类.   2. InwardNode   内向节点(下游节点),其定义如下: ​​   a. iBindings: 记录内向连接的信息.每一条内向连接的信息包括:对端节点(OutwardNode),绑定类型. b. iStar:内向连接中星号的个数: c. diParams:所有内向连接的DI参数…
https://mp.weixin.qq.com/s/GWL41P1G1BXm2sTeLmckdA   介绍NodeHandle相关的类.     ​​   1. NoHandle   顶层类(trait),作为所有NodeHandle的父类型,没有定义特别操作.     2. InwardNodeHandle   ​​   主要用于实现节点绑定逻辑.   1) bind方法   委托给InwardNode.bind()实现:   2) 与NodeHandle连接   ​​   a. 连接  …
https://mp.weixin.qq.com/s/cTRxXwWNEeb4-XX_t4bRcg   讨论模块结构信息的来源及使用方式.     ​​   1. diplomacy   diplomacy:外交,谈判的意思.主要用于模块之间的协商参数.   基本思想是首先把模块结构(module hierarchy)抽象为DAG: a. 把模块抽象为点(Node),把模块之间的连接抽象为边(Edge); b. 边是有方向的,上游节点为SourceNode,下游节点为SinkNode: c. N…
https://mp.weixin.qq.com/s/poCJBcx45clXHm6Uuv8M6w 介绍AddressSet.misaligned的实现.之前介绍的比较概括,也有偏差.这里根据实际执行结果,分析总结其功能. 1. 提取执行 misaligned功能比较独立,可以单独提取出来.执行观察运行结果,或者调试跟踪来观察其功能. 其中,需要解决的依赖是log2Floor. 执行结果如下: 2. 基本功能 misaligned的基本功能是把从base开始的size个地址,按照对齐原则,使用最…
https://mp.weixin.qq.com/s/X0s5CWN84GEiwpNR7tiRgA 基于AddressAdjuster介绍LazyModule的实现.   参考链接:https://github.com/freechipsproject/rocket-chip/blob/master/src/main/scala/tilelink/AddressAdjuster.scala   1. AddressAdjuster   ​​   地址适配器,根据chip_id & mask对地址…
https://mp.weixin.qq.com/s/UHGq74sEd9mcG5Q3f-g3mA   介绍AddressDecoder的实现.   ​​ 1. 基本定义   ​​ 每个Port包含多个地址集合(Seq[AddressSet]),需要确定输入的地址是属于哪一个Port. AddressDecoder的任务是在满足需求的情况下,找到需要比对的最少比特位.   其中,givenBits是确定要比对的比特位.如果givenBits已经可以满足需求,则不需要再找其他比特位.   2. 类…
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-0x…
https://mp.weixin.qq.com/s/s3hr5JJX2_pwNgdu8WqV0Q   介绍enumerateMask的实现.(仅供理解,非严谨证明)   ​​   1. 基本定义   enumerateMask的意思是枚举掩码.其功能是把mask中为1的位的所有组合枚举出来.   enumerateMask方法的功能比较简单独立,可以直接执行进行验证: ​​   执行结果如下: ​​   2. helper(id, tail)   helper方法有两个参数: a. id:指当…
https://mp.weixin.qq.com/s/Sf0owQxWzxacVvykJZ5oTQ   介绍TransferSizes的实现.   ​​   1. 基本定义   从min到max的闭合区间:[min, max]   判断条件: a. min和max为2的幂: b. min <= max; c. min和max为非负整数: d. min和max必须同时为0:   ​​   2. none   因为min和max必须同时为0,所以只需要判断min是否为0即可: ​​   3. con…
https://mp.weixin.qq.com/s/KsZqe9W_DM6W6JecK_irvA   介绍AddressSet.enumerateBits方法的实现,主要是x & (-x)的意义.   ​​   1. 基本定义   enumerateBits的意思就是用于枚举比特,或者说罗列比特,即把mask中为1的比特罗列出来.   2. 验证   enumerateBits方法功能比较简单独立,可以直接拿出来执行进行验证.   ​​   执行结果如下: ​​   3. x == 0   没…
https://mp.weixin.qq.com/s/qqL2XWqAhVcnGSxs6kxhLg   介绍IdRange的实现.   ​​   1. 基本定义   A non-empty half-open range; [start, end)   非空,半闭合区间.   限定条件如下: a. start >= 0; b. start <= end;   2. compare   比较方法.用于排序.   3. overlaps   判断是否重叠. ​​   4. contains   t…
https://mp.weixin.qq.com/s/j1M9ZOTtqvc1Fv9T6dy9kg   以tilelink下的Buffer为例,介绍LazyModule如何组织内部的节点和模块.   1. TileLink Channels   ​​ 参考TileLink总线的规范文档.   2. BufferParams   ​​   BufferParams包含了定义一个Buffer需要用到的3个参数: a. depth; b. flow; c. pipe;     3. TLBufferN…
https://mp.weixin.qq.com/s/gDbUto1qd7uWbpnxovr5pg   介绍LazyModuleImpLike类的实现.     1. wrapper   LazyModuleImpLike是LazyModule的内部实现,LazyModule则是LazyModuleImpLike的外部包裹(wrapper).   ​​   2. 悬边   既未与上游节点.亦未与下游节点相连的边: ​​   边包含Bundle的信息,实际相连时,是使用Bundle相连接.    …
https://mp.weixin.qq.com/s/W1cS9sgwLFjOOm86d05NIA   介绍各类型节点如何确定星型绑定所包含的连接数.     1. 定义   ​​ resoveStar方法以抽象方法的形式定义于抽象类MixedNode中,用于确定星型绑定所包含的连接数.   其参数说明如下: a. iKnow:输入侧已知边的个数: b. oKnow:输出侧已知边的个数: c. iStar:输入侧星号的个数: d. oStar:输出侧星号的个数:     2. SourceNod…
https://mp.weixin.qq.com/s/zgeAI2n-2cHJi7-Ra5rYZA   介绍MixedNode的实现.     1. 类定义   ​​ ​​   2. inner/outer   inner side/outer side of the node. ​​   3. inward/outward   Inward/Outward node: ​​   4. resolveStar   抽象方法,实现如下逻辑:确定绑定中的星号(*)所代表的连接的个数. 根据Star所…
https://mp.weixin.qq.com/s/DVcA2UixnB_6vgI3SjZGyQ   调试wirePrefix方法.   1. 实现   wirePrefix用于调整名称格式,其实现如下: ​​   使用正则表达式,把名称从驼峰格式如“CamelCaseNameStyle”变为Linux格式如“camel_case_name_style”.     2. 提取   这个方法的实现比较独立,可以单独提取出来调试执行,以了解其执行过程.   ​​   执行结果如下: ​​   3.…
https://mp.weixin.qq.com/s/eOgNLi_MJ8HJOpepGaaW8Q   简单介绍BaseNode的实现.   ​​   1. You cannot create a node outside a LazyModule   ​​   LazyModule.scope在LazyModule对象中定义: ​​   在LazyModule类中赋值: ​​   那么这里的“outside a LazyModule”中的LazyModule指的应该是LazyModule类,而…
https://mp.weixin.qq.com/s/HgUpTCh0D94Uymj5qQk-ag   介绍NodeImp相关基础类的实现.     1. 类图   ​​   节点实现(NodeImp)的基础类主要有: a. InwardNodeImp:内向节点实现: b. OutwardNodeImp: 外向节点实现: c. NodeImp:节点实现,同时混入了InwardNodeImp和OutwardNodeImp: d. SimpleNodeImp:简单节点实现:     2. Inwar…
https://mp.weixin.qq.com/s/BlW4y0Ez1kppxvSHAla31A 简单介绍interrupts相关的diplomacy节点. 1. IntImp 中断节点实现: 1) DUEB参数 a. D:IntSourcePortParameters: b. U:IntSinkPortParameters: c. E:IntEdge: d. B:Vec[Bool]: 2) 方法 a. edge:根据参数生成一个IntEdge: b. bundle:根据IntEdge,生成一…
https://mp.weixin.qq.com/s/rfgptF9YxDpzDoespYtQvA   整理Diplomacy and TileLink from the Rocket Chip这篇文章.     0. 原文链接   https://www.lowrisc.org/docs/diplomacy/ https://docs.qq.com/doc/DUUZsQlJIdmFqdHpQ     1. Introduction   a SoC [1]developed maintained…
作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试翻译这些优秀的教程.因为翻译能力有限,翻译的细节上还有待推敲,希望广大网友不吝赐教. 约定: 1.本文的软件是Photoshop CS5版本 2.原教程的截图是英文的,本人在重新制作的基础上,重新截了中文版的图 3.原文中有些操作没有给出参数.本人在反复测试的情况下测定了一些参数,以红色的文字显示.…
最近正在研究rocketmq,简单记录下设计的不同 互联网系统中Rpc.服务治理.消息中间件基本都是标配,消息中间件能解耦,削峰,高可用并能间接提供达到最终一致性 消息中间件中,消息消费分为最多一次,至少一次和刚好一次,如果需要实现刚好一次,则系统设计难度增大,系统性能损失增加,权衡利弊,rocket实现的是最少一次,消费端可能会重复接收消息(ACK模式下,ACK消息可能丢失),由消费端幂等消费 为什么不用zk,还是从实际需求出发,Topic路由信息无需在集群之间保持强一致性,最终一致即可,从而…