https://mp.weixin.qq.com/s/CbBWdTlc_DESlUzd8KFcSg

 
介绍Term类各方法的实现。
 
 
 
1. prime
 
表示一个项是否是质项,即这个项是否被其他项包含。如项AB包含项ABC。
 
2. covers
 
 
this covers x,即项this包含项x,包含两点:
a. 项this包含的变量比项x少:x.mask &~ mask
b. 项this包含的变量的值与项x相同:(value ^ x.value) &~ mask
 
如包含ABC三变量的项:AB(value: 110, mask: 001),ABC(value: 111, mask: 000)
AB covers ABC: ((110 ^ 111) &~ 001) | (000 &~ 001) == 0
 
3. intersects
 
 
this intersects x,即项this与项x相交,也包含两点:
a. 项this与项x有共同的变量:~mask & ~x.mask
b. 且共同的变量值都相同:(value ^ x.value) & (~mask & ~x.mask)
 
4. equals
 
 
this equals that,即项this与项that相等,需要两者的value和mask都相等。
 
5. <
 
 
this < that,即项this小于项that,包含两种情况:
a. this的值小于that的值;
b. 值相等,但this.mask小于that.mask;
 
小于判断用于项之间的排序,并无特殊的意义。
 
6. similar
 
 
this similar x, 即项this与项x相似,包含三个条件:
a. mask相等:mask == x.mask
b. this.value > x.value
c. this和x的值只差一个变量(差值为2的幂):(diff & diff - 1) == 0
 
如:ABC(值为111) similar AB'C(值为101)。
 
7. merge
 
 
this merge x,需要this similar x,如ABC merge AB'C = AC,
a. 取出不同的变量:val bit = value - x.value
b. 把value中相应变量对应的位清0:value &~ bit
c. 把mask中相应变量对应的位置1:mask | bit
 
在合并生成的新项(Term)中,合并的变量对应的value位为0,对应的mask位为1,以表明这个变量在Term中不存在。
 
合并生成的新项是一个质项,而被合并的两项则不再是质项了。
 

Rocket - decode - Term的更多相关文章

  1. Rocket - decode - 几个问题

    https://mp.weixin.qq.com/s/pMsK_E4mQrm3QXdnp7nDPQ   讨论指令解码部分遗留的几个问题.     1. 最小项与蕴含项之间的关系   参考链接: htt ...

  2. Rocket - decode - SimplifyDC

    https://mp.weixin.qq.com/s/4uWqBRrMVG6FlnBKmw8U-w   介绍SimplifyDC如何简化解码逻辑.     1. 使用   ​​   简化从mint和m ...

  3. Rocket - decode - Simplify

    https://mp.weixin.qq.com/s/YWXYNaRU-DbLOMxpzF2bpQ   介绍Simplify如何简化解码逻辑.     1. 使用   Simplify在DecodeL ...

  4. Rocket - decode - 最小项与最大项

    https://mp.weixin.qq.com/s/XrBh9Kapj01HdvBi5MkbgA   介绍布尔代数最小项与最大项相关概念,以及Term类的实现.     参考链接: https:// ...

  5. Rocket - decode - 解码单个信号

    https://mp.weixin.qq.com/s/0D_NaeBEZX5LBQRdCz2seQ     介绍解码单个信号逻辑的实现.    1. 单个信号   每个指令对应了一组信号,每个信号对应 ...

  6. Rocket - decode - Inst Decode

    https://mp.weixin.qq.com/s/WvepB3yAzjMbQalO3Z82pQ   介绍RocketChip Instruction解码逻辑的实现.   1. RISC-V   R ...

  7. arm cortex-m0plus源码学习(三)GPIO

    概述: Cortex-m0的integration_kit提供三个GPIO接口,其中GPIO0传输到外部供用户使用,为EXTGPIO:GPIO1是内核自己的信号,不能乱改,会崩掉:GPIO2是一些中断 ...

  8. 64位开源处理器Rocket该人士介绍

    最近大概读一点UCB发布时间Rocket处理器的源代码,的每个文件的源代码的功能有一定的一般理解,Mark一点点. Rocket是一家64bit标量处理器,5第一阶段管道,用途risc-v指令集.综合 ...

  9. Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization

    A code sequence made up multiple instructions and specifying an offset from a base address is identi ...

随机推荐

  1. input唤起键盘影响移动端底部fixed定位

    主要代码如下: public docmHeight = document.documentElement.clientHeight || document.body.clientHeight; // ...

  2. STM32 TIM 编码器模式采集编码器信号

    layout: post tags: [STM32] comments: true 文章目录 @[toc] 什么是正交解码? 编码器接口模式 标准库接口 TIM_TimeBaseInitTypeDef ...

  3. Power Query:非常规工资条

    常规工资条为标题.内容.空行,每三行一循环,横向排版.打印.空行填充颜色,方便切割.其中用到函数嵌套,先把table以row转换为list,然后用List.TransformMany生成Table.C ...

  4. 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结

    堆和栈的区别 一个由C/C++编译的程序占用的内存分为以下几个部分1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap ...

  5. layui 关闭弹出层方法

    layer.closeAll();//疯狂模式,关闭所有层 layer.closeAll('dialog'); //关闭信息框 layer.closeAll('page');//关闭所有页面层 lay ...

  6. 编写HTML和CSS几点心得

    HTML代码优化 表单域用fieldset包起来,并用legend说明其用途(注意在css初始化的时候把fieldset的border设为0,把legend的display设为none) 每个inpu ...

  7. .Net Core3.0 WebApi 项目框架搭建 四:JWT权限验证

    .Net Core3.0 WebApi 项目框架搭建:目录 什么是JWT 根据维基百科定义,JWT(读作 [/dʒɒt/]),即JSON Web Tokens,是一种基于JSON的.用于在网络上声明某 ...

  8. ql的python学习之路-day10

    前言:本节主要讲解迭代器和生成器 迭代器&生成器 一.生成器(generator) 循环占用大部分的容量内存,如果只需要循环前面的几个结果那怎么样做呢,在python中有一种一边循环一边计算的 ...

  9. SpringBoot +Vue 前后端分离实例

    今天下了Vue,想试一试前后端分离的实现,没想到坑还不少,这里就记录一下我遇到的坑和我的代码: 一.Vue的下载安装:从网上找就好了,没什么问题,除了下载以后,要把镜像库改成淘宝的,要不然太慢了. 二 ...

  10. python Lambda, filter, reduce and map

    1. lambda The lambda operator or lambda function is a way to create small anonymous functions , i.e. ...