zoukankan      html  css  js  c++  java
  • Rocket

    https://mp.weixin.qq.com/s/DOLkEi-_qQt6lWOhJ2hxVQ

     

    简单介绍TLDebugModuleInner中抽象数据寄存器的实现。

     

     

    1. abstractDataMem

     

    以字节为单位,表示抽象数据寄存器:

     

    dmactive为假时,其值为零:

     

    2. abstractDataNxt

     

    用于存放abstractDataMem寄存器的将要使用的值。

     

    3. 寄存器组

     

    abstract data是一组寄存器,包含了多个寄存器。这里使用RegFieldGroup来定义:

     

    这段代码针对abstractDataMem中的每一个字节生成一个读写逻辑:

    a. 读直接使用abstractDataMem中相应字节作为数据源;

    b. dmiAbstractDataRdEn(i)读指示标志;

    c. 写的数据先存入abstractDataNxt中的相应字节中;

    d. dmiAbstractDataWrEnMaybe(i)为写指示标志;

     

    4. dmi写入

     

    抽象数据寄存器可以使用dmi接口访问:

    只有正在写入,并且针对抽象数据的访问合法时,才可以把abstractDataNxt中的值存入对应的抽象数据寄存器中。

     

    5. custom写入

     

    抽象数据寄存器也可以使用custom接口写入:

    当custom.ready和custom.valid同时为真时,把custom_data中的相应字节写入到对应的abstractDataMem字节中。这里没有使用abstractDataNxt。

     

    6. shadow

     

    abstractDataMem还在另一个地方使用:

     

    这是供核心总线(Hart Bus)访问的地址空间。生成的DATA寄存器组直接针对abstractDataMem中的每个字节进行读写:

    其中,形参rw对应的实参就是x。

     

    结合HARTINFO中的描述,即可明白数据寄存器在核心的内存空间投影(shadow)的含义:

     

     

  • 相关阅读:
    没事千万不要升级VirtualBox和Vagrant!
    以太坊开源项目
    以太坊合约第三方库
    Redis dbfilename
    SUSE Redis 开机启动
    SUSE Linux Enterprise Server 12 SP3 安装redis 6.0以上版本
    HTML基础练习
    html基础
    关于css 浮动的例子
    css 实现三角形
  • 原文地址:https://www.cnblogs.com/wjcdx/p/12492853.html
Copyright © 2011-2022 走看看