介绍布尔代数最小项与最大项相关概念,以及Term类的实现。
 
 
参考链接:
 
 
1. 几个定义
 
 
2. Term
 
 
Term即是一个项,最大项或最小项。
 
由变量ABCD组成的项AB',包含如下信息:
 
1) 项中包含的变量
 
最小项由ABCD四个变量组成。项AB'只包含了AB两个变量。
 
在Term中,由mask决定项中有哪些变量:
a. mask为1的位对应的变量不在项中出现,如变量CD在项AB'中的mask为1;
b. mask为0的位对应的变量在项中出现;
 
2) 每个变量的值
 
项中的每个变量或者以原变量的形式出现(如A),或者以补变量的形式出现(如B')。
 
在Term中,值存在如下情况:
a. mask为1的变量,即不在项中出现的变量,其值为0;
b. mask为0的变量,即在项中出现的变量,其值为0或1;
 
3) 最大项和最小项
 
项中每个变量的关系,是与(乘)的关系,还是或(加)的关系;亦即项是最小项,还是最大项。
 
在Term中,没有表达这种关系。只表达了变量及其值。至于是最大项还是最小项,取决于如何使用。
 
如DecodeLogic中,无论是minTerms还是maxTerms都可以传给Simplify作为minterms参数:
 
Simplify定义如下:
 
3. BitPat与Term
 
BitPat通过term方法,转变为一个Term。其实现如下:
 
因为Term中的mask与BitPat中相反,所以Term中mask为1的位对应的变量是不存在的变量。与BitPat中的意义相反。
 
这里再提一下BigInt(2).pow(lit.getWidth) - (lit.mask + 1),其有两种理解方法:
 
1) 2的补码
 
mask补码 = 2^n - mask = ~mask + 1
即:~mask = 2^n - mask - 1 = 2^n - (mask + 1)
 
2) 1的补码
 
对mask求1的补码,即是按位取反,即~mask。
 
mask与~mask的和为n位全1的值,亦即2^n - 1。
如0101 + 1010 = 1111 = 2^4 - 1
 
所以:~mask + mask = 2^n - 1
可知:~mask = 2^n - 1 - mask = 2^n - (mask + 1)
 
其实2的补码的算法即取反加一,即是利用~mask + mask = 2^n - 1的特性:
mask补码 = 2^n - mask = 2^n - 1 + 1 - mask = (2^n - 1 - mask) + 1 = ~mask + 1.
 
 

Rocket - decode - 最小项与最大项的更多相关文章

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

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

  2. Rocket - decode - 几个问题

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

  3. Rocket - decode - SimplifyDC

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

  4. Rocket - decode - Simplify

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

  5. Rocket - decode - Term

    https://mp.weixin.qq.com/s/CbBWdTlc_DESlUzd8KFcSg   介绍Term类各方法的实现.     ​​   1. prime   表示一个项是否是质项,即这 ...

  6. Rocket - decode - Inst Decode

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

  7. Redis 中的数据类型及基本操作

    Redis 内置的数据类型有 5种:字符串String.哈希Hash.列表List.集合Set.有序集合ZSet 字符串类型 String 是 Redis 中最基本的类型,一个 key 对应着一个 v ...

  8. js 获取数组中的最大值和最小值

    var arr = [3,12,23,18,25,33,22,30,1] 方案一: 思想 首先对数组进行排序(小 >大),第一项为最小值,最后一项为最大值 var min; var max; a ...

  9. 浅析InnoDB引擎的索引和索引原理

    浅析InnoDB引擎的索引和索引原理 什么是InnoDB的索引 InnoDB的索引就是一颗B+树.页是InnoDB引擎在内存和磁盘之间交换数据的基本单位,页的大小一般是16KB,页的大小可以在启动My ...

随机推荐

  1. idea撤销快捷键

    Ctrl+z:撤销. Ctrl+shift+z:取消撤销.

  2. Android(H5)互相调用方法

    记录一下前面混合开发时很重要的java与js互调方法进行数据交互. 混合开发就需要webview这个控件了 这就很玄学了,哈哈哈 这篇文章https://www.jianshu.com/p/3d9a9 ...

  3. SAP ME31K SUBOBJECT_NOT_FOUND

    SUBOBJECT_NOT_FOUND 在使用BAPI:BAPI_CONTRACT_CREATE创建协议时报错, 错误位置在此处,子对象没找到 GOOGLE到相关解决方案 事务代码:SLG0 新增对象 ...

  4. Git使用教程之在github上创建项目(三)

    继续~ 登录你的github账号,创建一个新项目 1. 2. 至此,github的项目也创建完成了.

  5. [hdu3644 A Chocolate Manufacturer's Problem]模拟退火,简单多边形内最大圆

    题意:判断简单多边形内是否可以放一个半径为R的圆 思路:如果这个多边形是正多边形,令r(x,y)为圆心在(x,y)处多边形内最大圆的半径,不难发现,f(x,y)越靠近正多边形的中心,r越大,所以可以利 ...

  6. Struts2 为什么被淘汰?自己作死!

    Struts2 那些年可谓是风光无限啊,Struts2 + Spring + Hibernate 三大框架一起组成了 "SSH"----牛逼哄哄的 Java Web 框架三剑客. ...

  7. filebeat-kafka:WARN producer/broker/0 maximum request accumulated, waiting for space

    You need to configure 3 things: Brokers Filebeat kafka output Consumer Here a example (change paths ...

  8. Java 如何实现优雅停服?刨根问底

    在 Java 的世界里遨游,如果能拥有一双善于发现的眼睛,有很多东西留心去看,外加耐心助力,仔细去品,往往会品出不一样的味道. 通过本次分享,能让你轻松 get 如下几点,绝对收获满满. a)如何让 ...

  9. python re 里面match 和search的区别

    re.match()从开头开始匹配string. re.search()从anywhere 来匹配string. 例子: >>> re.match("c", &q ...

  10. 判断iptables是否运行的一些探索

    现在有这么一个需求,要判断iptables是否开启.咋看比较难以入手,那么可以想,怎么启动iptables,redhat下很容易联想到/etc/init.d/iptabes start . 我们可以来 ...