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

简单介绍TLDebugModuleInner中处理抽象命令时的状态机。

1. CtrlState

定义抽象命令相关的四个状态:

1) ctrlStateReg

ctrlStateReg是一个寄存器,记录了当前的状态:

2) ctrlStateNxt

ctrlStateNxt记录了ctrlStateReg的下一个状态:

其值会输出到ctrlStateReg寄存器中:

3) reset

当io.dmactive为假时,ctrlStateReg的值设置为Wating。

2. hartHalted

表示选择的核心是否处于暂停状态:

3. Waiting

等待执行抽象命令的状态:

a. 如果存在命令输入,则进入CheckGenerate状态;

b. 如果输入的抽象命令类型不支持(目前仅支持access register),则不改变状态,把errorUnsupported置为真;

c. 如果要自动执行抽象命令,但是命令不支持,则不改变状态,而把errorUnsupported置为真;

4. CheckGenerate

在CheckGenerate状态检查生成的抽象命令:

a. 如果抽象命令不支持,则返回Waiting状态,而把errorUnsupported置为真;

b. 如果命令合法,而核心不在暂停状态,则返回Waiting状态,而把errorUnsupported置为真;

c. 抽象命令没有问题,则根据访问的寄存器是在Custom节点,还是GPR,把状态转为Custom或者Exec;

5. Exec

在这个状态下,抽象命令正在执行:

a. goReg === false: 核心在执行抽象命令之前,会写地址GOING,进而goReg的值变为false。表示核心已经在执行抽象命令了;

b. hartHaltedWrEn && (hartSelFuncs.hartIdToHartSel(hartHaltedId) === selectedHartReg)表示选择的核心又进入了暂停状态;

c. 两者结合,表明抽象名录执行结束了。可以返回Waiting状态;

如果在执行抽象命令过程中,发生了异常,则返回Waiting状态,把errorException置为真:

6. Custom

表示正在读Custom源节点中的寄存器:

如果读取结束(custom.ready && custom.valid),则返回Waiting状态。

Rocket - debug - TLDebugModuleInner - Abstract Command State Machine的更多相关文章

  1. Rocket - debug - TLDebugModuleInner - Abstract Command Decoding & Generation

    https://mp.weixin.qq.com/s/0zKSTktxgzo5uCUphqaWSQ 介绍抽象命令的解码和生成. 1. accessRegisterCommandReg accessRe ...

  2. Rocket - debug - TLDebugModuleInner - Abstract Data

    https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ 简单介绍TLDebugModuleInner中抽象数据寄存器的实现. 1. abstractData ...

  3. Rocket - debug - TLDebugModuleInner

    https://mp.weixin.qq.com/s/jkiHceU0HaJbHGvHiU-QOA 简单介绍TLDebugModuleInner的实现. 1. 引入全局配置 1) cfg 引入Debu ...

  4. Rocket - debug - TLDebugModuleInner - COMMAND

    https://mp.weixin.qq.com/s/Lz_D43YdhbRhiGiyoCBxDg 简单介绍TLDebugModuleInner中COMMAND寄存器的实现. 1. COMMANDRe ...

  5. Rocket - debug - TLDebugModuleInner - DMI Register Control and Status

    https://mp.weixin.qq.com/s/tI41wu0xaIQ5PRq6F82tNw 简单介绍TLDebugModuleInner中生成DMI控制和状态寄存器使用到的状态. 1. abs ...

  6. Rocket - debug - TLDebugModuleInner - Hart Bus Access

    https://mp.weixin.qq.com/s/deNMEyJ1idJDVoZwwo0A1A 简单介绍TLDebugModuleInner中核心总线访问(Hart Bus Access). 参考 ...

  7. Rocket - debug - TLDebugModuleInner - ROM Generation

    https://mp.weixin.qq.com/s/j_CgHU4PnY82NMwJzOqHYg 简单介绍Variable ROM Generation. 1. jalAbstract jalAbs ...

  8. Rocket - debug - TLDebugModuleInner - ABSTRACTAUTO

    https://mp.weixin.qq.com/s/adSB7lmKcqmwVd80-gmdIw 简单介绍TLDebugModuleInner中ABSTRACTAUTO寄存器的实现. 1. ABST ...

  9. Rocket - debug - TLDebugModuleInner - Drive Custom Access

    https://mp.weixin.qq.com/s/1bIqzDYXM36MIfSsjvvYIw 简单介绍TLDebugModuleInner中的针对Custom的访问. 1. customNode ...

随机推荐

  1. KMP+Tire树(模板)

    \(\color{Red}{KMP板子}\) #include <bits/stdc++.h> using namespace std; const int maxn=1e6+9; int ...

  2. 解决php获取不到Authorization问题

    我用的是thinkphp3.2.3, 在使用jwt的时候通过Authorization传递token,但是每次都接收不到,通过修改..htaccess文件,问题成功解决了,下面是的.htaccess文 ...

  3. Asp.Net Core 3.1学习-读取、监听json配置文件(7)

    1.前言 文件配置提供程序默认的给我们提供了ini.json.Xml等.都是读取不同格式的文件.文件配置提供程序支持文件可寻.必选.文件变更的监视. 2.读取配置文件 主要运用的包:需要Ini.xml ...

  4. 单线程和多线程执行对比—Python多线程编程

    单线程和多线程执行对比 本章使用递归求斐波那契.阶乘与累加函数的执行来对比单线程与多线程: 斐波那契.阶乘与累加(mtfacfib.py): ​ import threading from time ...

  5. Java SPI机制简述

    概述 SPI全称Service Provider Interface,是一种为框架提供良好扩展性的机制.一般由框架开发方定义接口规范(如java.sql.Driver),而第三方厂商为之提供自己的实现 ...

  6. java ->String、StringBuffer、StringBuilder三者之间的区别

    1.首先说运行速度,速度由快到慢排列:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuil ...

  7. 2018-06-19 Javascript 基础2

    js变量类型测试:typeof()->五种 (number,string,boolean,object,undefined): instanceof->检查某个对象是否是某个构造器产生的 ...

  8. 【DevCloud · 敏捷智库】如何拆分用户故事

    提起用户故事拆分,我们听得最多的就是INVEST原则(关于INVEST原则可以参考文章“用户故事等于需求说明”——你一定没有写好用户故事),但很多人面临的问题是拿到一个较大的用户故事时,该如何拆分才能 ...

  9. linux常用命令---终端与目录操作

    终端相关操作 目录相关操作

  10. package.json中^,~的区别

    https://blog.csdn.net/peaceoncemore/article/details/79195206 "devDependencies": {    " ...