介绍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. 解码单个信号
 
代码为提高可读性,已做重构:
 
 
 

Rocket - decode - Inst Decode的更多相关文章

  1. python编码问题之\"encode\"&\"decode\"

    python encode decode 编码 decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换 ...

  2. Oracle 中 nvl、nvl2、nullif、coalesce、decode 函数的用法详解

    NVL(EXPR1,EXPR2) NVL2(EXPR1,EXPR2,EXPR3) NULLIF(EXPR1,EXPR2) COALESCE(EXPR1,,..,EXPRn) decode ------ ...

  3. Oracle / PLSQL函数 - DECODE

    1.DECODE( expression , search , result [, search , result]... [, default] ) 参数说明: expression : 表中的某一 ...

  4. Oracle特有函数 case when decode exists 分页rownum

    select * from EMP eselect * from dept dselect * from salgrade s--Oracle特有函数 case whenselect case 2 w ...

  5. [Algorithm -- Dynamic programming] How Many Ways to Decode This Message?

    For example we have 'a' -> 1 'b' -> 2 .. 'z' -> 26 By given "12", we can decode t ...

  6. 【转】python 字符编码与解码——unicode、str和中文:UnicodeDecodeError: 'ascii' codec can't decode

    原文网址:http://blog.csdn.net/trochiluses/article/details/16825269 摘要:在进行python脚本的编写时,如果我们用python来处理网页数据 ...

  7. Oracle中sign/decode/nvl/round/trunc/(+)/instr/substr/replace解释

    1. sign函数 sign函数语法: sign(n); sign函数说明: 取数字n的符号,大于0返回1,小于0返回-1,等于0返回0(n可以是表达式,(n-200)) 例子: a=10; b=50 ...

  8. 简单接触oracle数据库nvl函数decode函数

    SQL语句的DECODE()和NVL()函数用法 SELECT DECODE(choose_tool,0,'宝马',1,'电动车',2,'自行车','步行')  AS my_tool FROM dat ...

  9. DECODE 与CASE WHEN 的比较以及用法

    1.DECODE 只有Oracle 才有,其它数据库不支持; 2.CASE WHEN的用法, Oracle.SQL Server. MySQL 都支持; 3.DECODE 只能用做相等判断,但是可以配 ...

随机推荐

  1. mui日期设置与时钟样式时间设置

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. Unity2019.3缺少Cinemachine插件/AssetStore搜索不到

    Unity2019.1版本都还自带Cinemachine,到2019.3就没有了(原因暂时未知),PackageManager里没有,到资源商店里搜索也找不到 解决方法: Windows>Pac ...

  3. (一只小白)对private,final关键字的一些认知

    1.private: private是私有的意思,在Java中可以用来修饰类里面的成员变量或者成员方法(注:不能修饰一个类,因为一个类如果外部无法访问的话,面向对象的编程思想将毫无意义),顾名思义,被 ...

  4. Coursera课程笔记----P4E.Capstone----Week 4&5

    Spidering and Modeling Email Data(week4&5) Mailing List - Gmane Crawl the archive of a mailing l ...

  5. 移动端H5支付(微信和支付宝)

    我们直接进入主题吧,先说功能: 1.用户通过我们的页面输入充值帐号和金额调起支付(微信或者支付宝),支付成功返回获取支付结果. 2.微信支付成功后重定向到指定页面(没有设置重定向地址的话,默认返回调起 ...

  6. DevOps vs. Agile:它们有什么共同点?

    DevOps与Agile有很多不同,但它们之间仍可发现很多共同点,这篇文章为读者揭晓. DevOps和Agile之间有着明显的关系.Agile是方法论,Scrum是框架,并DevOps随着看板也落在了 ...

  7. mfw

    0x01 可能为git泄露 git泄露 githack下载源码 index.php <?php if (isset($_GET['page'])) { $page = $_GET['page'] ...

  8. 2018-06-19 Javascript 基础2

    js变量类型测试:typeof()->五种 (number,string,boolean,object,undefined): instanceof->检查某个对象是否是某个构造器产生的 ...

  9. 「从零单排HBase 12」HBase二级索引Phoenix使用与最佳实践

    Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs对HBase数据进行增删改查,构建二级索引.当然,开源产品嘛,自然需要注意“避坑”啦,阿丸会把使用方式和最佳实践都告 ...

  10. 【雕爷学编程】Arduino动手做(3)---微波雷达感应开关模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...