zoukankan      html  css  js  c++  java
  • Rocket

    https://mp.weixin.qq.com/s/7WKB1QxcVzqm2Q7bWcKHzA

     

    简单介绍RegField的实现。

     

     

    1. 简单介绍

     

    定义寄存器域相关的参数类型。

     

    2. RegFieldAccessType

     

    访问类型:读、写、读写:

     

    3. RegFieldWrType

     

    写操作类型:

    写一清零,写一置位,写一反转,

    写零清零,写零置位,写零反转,

    清除,置位,修改

     

    4. RegFieldRdAction

     

    读操作的作用:清零,置位,修改:

     

    5. RegFieldDesc

     

    1) class

     

    寄存器域描述,定义寄存器域的各种属性:

    a. name:名称;

    b. desc:描述;

    c. group:所在组;

    d. groupDesc:组描述;

    e. access:访问类型,默认为读写类型;

    f. wrType:写类型;

    g. rdAction:读的动作;

    h. volatile:寄存器的值是否会自动变换;

    i. reset:复位值;

    j. enumberations:推测为寄存器域各个值代表意义的描述:

     

    2) object

     

    创建一个reserved的寄存器域:

     

    6. RegFieldGroup

     

    使用name和desc描述regs中的寄存器:

     

    7. RegReadFn

     

    1) class

     

    读寄存器的函数:

    包含两个参数:

    a. combinational:是否为组合逻辑;

    b. fn:参数为输入信号,返回值为输出信号的用于生成读取逻辑的函数:

     

    2) object

     

    用于生成读取逻辑的辅助方法。

    a. 直接传入逻辑生成函数作为参数:

     

    b. 使用RegisterReadIO作为参数:

     

    RegisterReadIO在RegisterCrossing中定义:

     

    c. 只输入oready用于生成读取逻辑:

     

    d. 使用ReadValidIO读取:

     

    e. 直接使用一个UInt作为读取逻辑的输出:

     

    f. 把Unit转换为RegReadFn的隐式类型转换方法:

     

    8. RegWriteFn

     

    与RegReadFn同理,用于生成写入逻辑的辅助方法。

     

    9. RegField

     

    用于描述一个寄存器域。

     

    1) case class

     

    定义了寄存器域的比特位宽度,读函数、写函数,描述信息:

    a. pipelined

     

    读写函数中是否有非组合逻辑:

     

    b. readOnly:

     

    生成一个只读版本的拷贝:

     

    c. toJson:

     

    把寄存器域的各个属性转换为JSON格式的对象,以便输出:

    PS. 可以看到这里需要外部提供字节偏移量和位偏移量信息(因为RegField只有位宽度信息,寄存器域可以复用,具体放在哪个位置可以是变化的)。

     

    2) object

     

    辅助方法,用于创建各种类型的寄存器域:

    其中:

    a. ()表示空函数;

    b. r:生成只读寄存器;

    c. w:生成只写寄存器;

     

    d. w1ToClear:生成一个协议清零的读写寄存器:

     

    e. rwReg:为BlackBox寄存器生成读写逻辑:

     

    f. bytes:生成一个以字节为单位进行读写的逻辑:

     

    其中:

    a) fullBytes为全部为有效位的字节;

    b) partialBytes为部分位有效位的字节(是否应该为partialByte,因为要么1个字节,要么0个字节,不是复数);

    c) padBytes:补到numBytes宽度所需要添加的字节数;

     

    g. 为寄存器reg生成一个以字节为单位进行读写的逻辑:

     

    10. HasRegMap

     

    该特征为子类引入一个中断向量表,一个生成寄存器访问逻辑的方法:

     

  • 相关阅读:
    [718. 最长重复子数组]
    排序算法--归并,堆,快速排序
    改进的插排--希尔排序
    排序算法--选泡插
    对封装继承多态的理解
    Servlet[springmvc]的Servlet.init()引发异常
    [面试题 16.18. 模式匹配]
    [124. 二叉树中的最大路径和](
    7.29_python_lx_day11
    7.28_python_lx_day18
  • 原文地址:https://www.cnblogs.com/wjcdx/p/11546314.html
Copyright © 2011-2022 走看看