介绍布尔代数最小项与最大项相关概念,以及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. V - Can you answer these queries? HDU - 4027 线段树 暴力

    V - Can you answer these queries? HDU - 4027 这个题目开始没什么思路,因为不知道要怎么去区间更新这个开根号. 然后稍微看了一下题解,因为每一个数开根号最多开 ...

  2. spring的bean的属性注入

    一.设置注入 设置注入要求: 要求属性在实体类中必须有getter 和setter方法,然后在spring的工厂中就可以使用property标签进行设值注入. 二.构造注入 通过类的构造方法的方式注入 ...

  3. 手把手教你撸一套Redux(Redux源码解读)

    Redux 版本:3.7.2 Redux 是 JavaScript 状态容器,提供可预测化的状态管理. 说白了Redux就是一个数据存储工具,所以数据基础模型有get方法,set方法以及数据改变后通知 ...

  4. P2220 [HAOI2012]容易题(快速幂)

    Describe 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值 ...

  5. Python自动生成100以内加减乘除混合运算题

    import random from random import choice ops = ('+','-','×','÷') ans = [] i=0 while i < 100 : op1 ...

  6. 高通Vuforia(Unity3D)云识别初级使用教程

    高通Vuforia(Unity3D)云识别初级使用教程   最近因项目开发需要,接触了高通的AR引擎Vuforia云识别,个人感觉稳定性还是很不错的,唯一不爽的地方就是免费的云识别库每个月只能识别10 ...

  7. c3p0 连接池配置数据源

    <!-- 配置数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledD ...

  8. spark机器学习从0到1逻辑斯蒂回归之(四)

      逻辑斯蒂回归 一.概念 逻辑斯蒂回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型.logistic回归的因变量可以是二分类的,也可以是多分类的.logis ...

  9. [Unity UGUI图集系统]浅谈UGUI图集使用

    **写在前面,下面是自己做Demo的时候一些记录吧,参考了很多网上分享的资源 一.打图集 1.准备好素材(建议最好是根据图集名称按文件夹分开) 2.创建一个SpriteAtlas 3.将素材添加到图集 ...

  10. [Unity3D]编辑器扩展之数组或List显示

    效果如下: 源码如下: using System.Collections.Generic; using UnityEditor; using UnityEngine; namespace XM.Edi ...