• Rocket


    https://mp.weixin.qq.com/s/VbidBjB6QsaQG-KWRIM8zQ

    简单介绍CustomCSRs的实现。

    1. CustomCSR

    CustomCSR定义自定义CSR寄存器的信息。

    1) case class

    用于封装自定义CSR寄存器的信息:

    其中:

    a. id:CSR寄存器的编号:

    b. mask:暂时不清楚;

    c. init:初始值;

    2) object

    定义一个constant方法用于生成CustomCSR:

    2. CustomCSRIO

    定义CustomCSR的读写接口:

    其中:

    a. wen:写使能;

    b. wdata:写寄存器时使用的数据源;

    c. value:读寄存器时使用的数据源;

    3. CustomCSRs

    CustomCSRs继承自CoreBundle,定义了一个核心的输入输出接口类型:

    1) csr id

    定义包含CSR的id,包括bpmCSR和chikenCSR(目前不知bpm/chiken的意义):

    2) decls

    decls(声明)把bpmCSR和chikenCSR汇总到一起:

    在CustomCSRs的子类中,需要覆盖decls这个方法,并使用super.decls获取父类中定义的CSRs,再与子类中的CSRs加总到一起。

    3) csrs

    根据decls.size生成相应的CustomCSRIO:

    4) getOrElse

    A. getOrElse

    getOrElse的声明如下:

    根据csr的取值,选择返回一个值:

    a. 如果csr是None,则使用alt;

    b. 如果csr不是None,则取出其中的CustomCSR,与f参数一起传递给getByIdOrElse方法获取返回值;

    B. getByIdOrElse

    getByIdOrElse的声明如下:

    其中:

    a. 使用indexWhere方法从decls中查找与参数id相同的寄存器的编号;如果没有找到,则返回-1:

    b. 如果没找到,则使用alt;

    c. 如果找到了,则使用函数f从相应的CustomCSRIO中取出数据;

    5) flushBTB

    flushBTB的定义如下:

    a. 如果bpmCSR未定义,则为false.B;

    b. 如果定义了,则查找decls中是否存在相应id的csr,如果没有,还是使用false.B;

    c. 如果有,则取出相应CustomCSRIO中的wen信号;也就是说,在该CSR存在的情况下,只要写使能,就需要刷新BTB;

    6) 其他

    如下四个方法,定义了bpmCSR的第0位和chikenCSR的低三位的用法:

                 

  • 相关阅读:
    调试技术 Orisun 博客园
    Core Dump和/proc调试 Orisun 博客园
    再谈select, iocp, epoll,kqueue及各种I/O复用机制 Shallway 博客频道 CSDN.NET
    基础很重要
    Speech and Language Processing (2nd Ed.): Updates
    CS 288: Statistical Natural Language Processing
    对C++中string类型的总结
    HTTP代理实现请求报文的拦截与篡改1 jivi 博客园
    学习优秀源码 Orisun 博客园
    分享:苹果老员工可享两年离岗留职待遇
  • 原文地址:https://www.cnblogs.com/wjcdx/p/13276288.html
Copyright © 2020-2023  润新知