https://mp.weixin.qq.com/s/RcXI8uEHvZHGCvX3DoVR4Q 简单介绍TLDebugModuleInner中处理抽象命令时的状态机. 1. CtrlState 定义抽象命令相关的四个状态: 1) ctrlStateReg ctrlStateReg是一个寄存器,记录了当前的状态: 2) ctrlStateNxt ctrlStateNxt记录了ctrlStateReg的下一个状态: 其值会输出到ctrlStateReg寄存器中: 3) reset 当io.dma…
https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRegisterCommandReg是从COMMANDReg取值解析而来的一个带结构变量: 解析出来的结构是ACCESS_REGISTERFields: 这是当command为访问寄存器时的结构: 注:我手上使用的代码比较老了,一直使用所以没有更新. quick access命令暂时没有实现: 2. G…
https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ 简单介绍TLDebugModuleInner中抽象数据寄存器的实现. 1. abstractDataMem 以字节为单位,表示抽象数据寄存器: dmactive为假时,其值为零: 2. abstractDataNxt 用于存放abstractDataMem寄存器的将要使用的值. 3. 寄存器组 abstract data是一组寄存器,包含了多个寄存器.这里使用RegFieldGroup来定义: 这…
https://mp.weixin.qq.com/s/jkiHceU0HaJbHGvHiU-QOA 简单介绍TLDebugModuleInner的实现. 1. 引入全局配置 1) cfg 引入DebugModulePrams: 2) hartSelFuncs 定义hartsel与hart id之间的映射函数: 2. 多个diplomacy node 1) dmiNode dmiNode是一个寄存器节点,包含除了DMCONTROL/HAWINDOWSEL/HAWINDOW三个寄存器之外的0x000…
https://mp.weixin.qq.com/s/Lz_D43YdhbRhiGiyoCBxDg 简单介绍TLDebugModuleInner中COMMAND寄存器的实现. 1. COMMANDReset 寄存器复位时使用的值: 当dmactive为假时,存入寄存器中: 2. COMMANDReg 带结构的寄存器: 3. 写 不带结构的32位写入值: 转换为带结构的写入值: 寄存器写入逻辑: 其中:COMMANDWrEnMaybe标志是否正在写入. COMMANDWrEnLegal标志写入的数…
https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abstractCommandBusy 表示是否处于等待状态,如果不是在等待状态,则视为Busy: 2. ABSTRACTCSWrEnLegal 如果正处于等待状态,则可以合法写入ABSTRACTCS寄存器: 3. COMMANDWrEnLegal 如果正处于等待状态,则可以合法写入COMMAND寄存器:…
https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考资料: a. https://github.com/pulp-platform/riscv-dbg/blob/master/doc/debug-system.md b. RISC-V External Debug Support Version 0.13.2 Appendix A.2 1. Hart…
https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbstract是一条指令,跳转到抽象命令的指令: Instruction.JAL是jump and link指令: GeneratedUJ用于生成一个UJ格式的指令结构: JAL属于J-format. GeneratedUJ的定义如下: jalAbstract.setImm(ABSTRACT(cfg)…
https://mp.weixin.qq.com/s/adSB7lmKcqmwVd80-gmdIw 简单介绍TLDebugModuleInner中ABSTRACTAUTO寄存器的实现. 1. ABSTRACTAUTOReset 寄存器复位时使用的值: 当dmactive为假时,存入寄存器中: 2. ABSTRACTAUTOReg 带结构的寄存器: 3. 写 1) ABSTRACTAUTOWrDataVal 不带结构的32位值: 用于接收写寄存器时传入的数据: 2) ABSTRACTAUTOWrD…
https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode customNode定义为DebugCustomSink类型的节点: 根据DebugCustomSink的定义,customNode所属的模块为调试模块: 这与customNode所属的模块为TLDebugModuleInner相符. Custom相关节点到连接图如下,供参考: 2. needCu…
https://mp.weixin.qq.com/s/EJVqw7JPjjaib68tENl5AQ 简单介绍TLDebugModuleInner中的Program Buffer Access. 1. implementation-specific bits set by harts executing code 1) haltedBitRegs/resumeReqRegs haltedBitRegs和resumeReqRegs在dmactive为假的情况下,值为0.在dmactive为真的情况下…
https://mp.weixin.qq.com/s/kjhJJ3moRQzxHt6pJOXEgg 简单介绍TLDebugModuleInner中Program Buffer寄存器的实现. 1. programBufferMem 1) 定义 以字节为单位的Program Buffer寄存器: 2) 复位值 dmactive为假时,其值为0: 2. programBufferNxt 用于存放programBufferMem寄存器的将要使用的值. 3. 寄存器组 programBufferMem是一…
https://mp.weixin.qq.com/s/dF_0sE5ZakyY569wlppVHA 简单介绍TLDebugModuleInner中ABSTRACTCS寄存器的实现. 1. ABSTRACTCSReset 寄存器复位时使用的值: 其定义如下: 其中,datacount和progbufsize的值从配置中获取. 2. ABSTRACTCSReg 带结构的寄存器: 3. 写 1) ABSTRACTCSWrDataVal ABSTRACTCSWrDataVal是一个不带结构的32位值:…
https://mp.weixin.qq.com/s/elOGjaVCWc48gs9c_cTqww 简单介绍TLDebugModuleInner中HALTSUM寄存器的实现. 1. numHaltedStatus 为了记录每个核心的暂停状态,需要的宽度为32位的窗口数: numHaltedStatus = (nComponents + 31) / 32 = (nComponents - 1 + 32) / 32 = (nComponents - 1) / 32 + 1 当前实现最多只支持1024…
https://mp.weixin.qq.com/s/9GjZAax0SZhRqLne16jn-w 简单介绍TLDebugModuleInner中HARTINFO寄存器的实现. 1. HARTINFORdData 读HARTINFO寄存器时使用的数据源,通过dmiNode访问: 其中的值基本上都是根据配置生成后即保持不变: 2. dataaccess 表示使用CSR寄存器实现还是使用内存实现: 当前实现中,其值为1: 也就是使用内存实现. 3. datasize 表示data寄存器占用的32位字…
https://mp.weixin.qq.com/s/GyGriFyeq_7Z3xOjKn56Mg 简单介绍TLDebugModuleInner中DMSTATUS寄存器的实现. 1. DMSTATUSRdData 从DMSTATUS寄存器读取时,使用DMSTATUSRdData作为数据源: 2. authenticated 认证功能没有实现: 3. version 当前版本号值为2,代表Version 0.13: 4. any & all 规范中定义为: 代码实现为: 1) nonexisten…
https://mp.weixin.qq.com/s/7UY99gEJ8QpVBJIohdqKhA 简单介绍TLDebugModuleInner中innerCtrl相关的寄存器. 1. innerCtrl 接下来用到的innerCtrl来自于io中: io.innerCtrl从整体上看方向是输入,信号经过TLDebugModuleInnerAsync中转,来自Outer: io.innerCtrl一直处于ready状态: 2. selectedHartReg selectedHartReg是一个…
https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器. 1. Read s0 using abstract command 1) abstract command 抽象命令,Debug模块支持一些可选的抽象命令.一般情况下,debugger执行命令时,CPU核心是被暂停的: 命令是否支持只能通过执行之后判断返回的错误码来确定: debugger通过写command寄存器来执行命令: 使…
Contents [hide]  1 Description 2 Components 3 C# - FSMSystem.cs 4 Example Description This is a Deterministic Finite State Machine framework based on chapter 3.1 of Game Programming Gems 1 by Eric Dybsend. Therea are two classes and two enums. Includ…
近期在读Hadoop#Yarn部分的源代码.读到状态机那一部分的时候,感到enmu的使用方法实在是太灵活了,在给并发编程网翻译一篇文章的时候,正好碰到一篇这种文章.就赶紧翻译下来,涨涨姿势. 原文链接:http://www.javacodegeeks.com/2011/07/java-secret-using-enum-to-build-state.html 作者:Peter Lawrey    译者:陈振阳 综述 Java中的enum比其它的语言中的都强大,这产生了非常多令人吃惊的使用方法.…
https://mp.weixin.qq.com/s/8yYLVg-RXX3XX0T431lxeA 介绍riscv debug接口的使用实例:使用Program Buffer读取寄存器. 1. Write mstatus using program buffer 1) csrw s0 MSTATUS csrw用于写CSR,这里是把s0写入到mstatus中. 2) ebreak ebreak被debugger用于把控制权返回给调试环境,这里就是执行完Program Buffer中的程序之后,执行…
状态机(Finite State Machine):状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动       作.完成特定操作的控制中心. 类别: ~ 若输出只和状态有关而与输入无关,则称为Moore状态机      ~ 输出不仅和状态有关而且和输入有关系,则称为Mealy状态机 关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成.状态机通过响应一系列事件而"运行".每个事件都在属于"…
What is a State Machine? Any device that changes its state from one to another due to some actions are defined to be state machines. For example an ATM machine, traffic signal, remote control, the computer itself, etc. Most software applications also…
State Machine,即为状态机,是Qt中一项非常好的框架.State Machine包括State以及State间的Transition,构成状态和状态转移.通过状态机,我们可以很方便地实现很多东西.Qt的Animation框架也是基于状态机的. 在Qt自带的帮助文档中搜索State Machine,会有一篇官方的说明文档.笔者的Qt5.2自带的文档如下: The State Machine Framework The State Machine framework provides c…
今天晓东和大家来一起看一下Android4.0中蓝牙适配器(Bluetooth Adapter)的状态机变化的过程.首先,我们需要了解一下,蓝牙适配器究竟有哪些状态,从代码可以清晰地看到(frameworks/base/core/java/android/server/bluetoothadapterstatemachine.java): BluetoothAdapterStateMachine(Context context, BluetoothService bluetoothService…
// 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guard 控制结构,有人说:"可是阅读很多开源代码也是if/else层层嵌套的".是的,guard控制结构只是一种风格,语言并没有规定你一定要这么写,也没必要.两种风格都能写出逻辑清晰的代码,但是还是有细微差别,嵌套模式下,要写出清晰的代码需要更好的做好函数的分层(见第1节),例如,在分支里只做…
// 上一篇:卫语句(guard clause) // 下一篇:局部化(localization) 基于语言提供的基本控制结构,更好地组织和表达程序,需要良好的控制结构. 前情回顾 上次分析了guard 控制结构,有人说:"可是阅读很多开源代码也是if/else层层嵌套的".是的,guard控制结构只是一种风格,语言并没有规定你一定要这么写,也没必要.两种风格都能写出逻辑清晰的代码,但是还是有细微差别,嵌套模式下,要写出清晰的代码需要更好的做好函数的分层(见第1节),例如,在分支里只做…
1.0.0 Summary Tittle:[UML]-NO.43.EBook.1.UML.1.003-[UML 大战需求分析]- 状态机图(State Machine Diagram) Style:DesignPattern Series:DesignPattern Since:2017-11-08 End:.... Total Hours:... Degree Of Diffculty:2 Degree Of Mastery:2 Practical Level:2 Desired Goal:2…
[翻译]What is State Machine Diagram(什么是状态机图)? 写在前面 在上一篇学习类图的时候将这个网站上的类图的一篇文章翻译了出来,感觉受益良多,今天来学习UML状态机图,在网站找了很多的博客,但是都有些雷同的现象,所以又计划从该网站上学习UML状态机图,翻译出来以供大家参考.下面是原文链接: https://www.visual-paradigm.com/guide/uml-unified-modeling-language/what-is-state-machin…
今天遇到这样一个需求,我有一个名为happy的animation clip和一个名为speak的animation clip.想实现当主角胜利后播放动序列: happy->speak->happy->speak->... 这样无限循环. 走了一些弯路后发现直接在animator state machine里就可以搞定,如下图: transition{idle->happy}上condition设为triggerWin,由于idle到happy的transition不能太拖沓,…