• 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)的含义:

     

     

  • 相关阅读:
    百度之星初赛 A
    百度之星 初赛 BC
    2016 百度之星资格赛
    codeforces 749
    codeforces 785
    HDU 4617
    网络流 poj 2195
    网络流 poj 3436 poj 3281
    codeforces 780 C
    idea激活
  • 原文地址:https://www.cnblogs.com/wjcdx/p/12492853.html
Copyright © 2020-2023  润新知