• Rocket


     
    介绍RocketChip Instruction解码逻辑的实现。
     
    1. RISC-V
     
    RocketChip实现了RISCV ISA:
     
     
    作为RISC-V的官方实现,实现的规范版本比较新,使用的编码技术也比较激进。
     
     
    2. decode_table
     
    在RocketImpl类中,定义了decode_table解码表:
     
    里面定义了每个指令的key与译码结果(包含许多参数)的映射表,如IDecode里面的table定义:
     
    key为指令的编码,以BitPat的形式定义的:
     
    值亦即译码结果是一组BitPat,如:
     
    其结构定义为类IntCtrlSigs
     
    默认值为:
     
     
    3. 指令解码(ID)的输入与输出
     
    解码的输入即是指令本身,指令从内存中读入;
    解码的输出即是IntCtrlSigs中定义的各个信号;
     
    解码的过程:
    根据输入指令,使用decode_table中定义的映射表,查找出与其对应的IntCtrlSigs这一组信号。
     
    因为decode_table过大,译码逻辑需要简化,简化的理论根据是布尔代数,方法类似于卡诺图化简。
     
    4. id_ctrl
     
    其中:
    a. id_inst(0)为需要解码的指令;
    b. id_ctrl为解码的输出;
    c. decode_table为查找表;
     
    5. IntCtrlSigs
     
    a. 调用DecodeLogic解出译码结果;
    b. decoder中的比特组成及顺序与sigs序列中定义的顺序一一对应:
    c. 把decoder中的各个比特组成部分与sigs中的信号一一连接:
     
     
    6. DecodeLogic
     
    a. mappingIn即为decode_table,其中为key(BitPat)到values(Seq[BitPat])的映射;
    b. mapping(i)为key(BitPat)到values中第i个BitPat(如:rocc, br, jal等)的映射表;
    c. 调用另外一个apply,每次解出一个value,即每次生成解出一个value的逻辑:
     
    7. 解码单个信号
     
    代码为提高可读性,已做重构:
     
     
     
  • 相关阅读:
    CSLA服务端如何使用多线程的解决方案
    一片马蜂窝文章
    VB.NET和C#之间的语法不同比较
    [软件推荐]jQuery,JavaScript,HTML,CSS,PHP,MySQL,正则表达式 CHM帮助手册
    使用jQuery.Validate进行客户端验证
    知道AutoHotKey
    数据库设计问题
    [书籍推荐]为了自己的钱包,为了自己的时间——分享一下自己的淘书经验
    策略模式4
    SQLiteHelperSQLite帮助类
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10280036.html
Copyright © 2020-2023  润新知