介绍布尔代数最小项与最大项相关概念,以及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. GoF23:建造者模式

    目录 概念 角色分析 实现方式 方式一 角色分析 代码编写 方式二 角色分析 代码编写 总结 优点 缺点 应用场景 建造者也抽象工厂模式的比较 ​ 建造者模式也属于创建型模式,它提供了一种创建对象的最 ...

  2. Git使用教程之新手也能看懂(一)

    首先我写这篇文章的初衷是因为 有一段时间没用Git了,现在突然用起来,很多命令都忘记了,导致去上网查了各种资料和文档(其中廖雪峰老师的文章给我的帮助很大,非常感谢!),花费了大量的时间,等于是又重新学 ...

  3. 设计模式之GOF23代理模式03

    动态代理 public class StarHandler implements InvocationHandler{  Star realStar; public StarHandler(Star ...

  4. QQ恢复解散后的群聊或删除后的好友的方法

    今天有一个群被一个管理员乱踢人,之后将群解散. 事后几分钟我在想有没有什么方法可以重新恢复的方法,之后进入了QQ的官网进行查找. 本来以为没希望了,但是奇迹发生了. 原来真的可以恢复! 恢复的详情: ...

  5. 不吹牛X,我真的干掉了if-else

    我们在web开发中,经常使用数据库表中的字段作为"标记"来表示多个"状态",比如: 我们就以某宝的在线购物流程为例进行分析.在订单表中,使用zt字段来表示定单的 ...

  6. vue 事件修饰符(阻止默认行为和事件冒泡)

    1. 原生js中,阻止事件冒泡,获取点击对象, e.stopPropagation(); 2. vue阻止事件冒泡@click.stop="show" <body> & ...

  7. vue项目中使用bpmn-流程图json属性转xml(七篇更新完成)

    内容概述 本系列“vue项目中使用bpmn-xxxx”分为七篇,均为自己使用过程中用到的实例,手工原创,目前陆续更新中.主要包括vue项目中bpmn使用实例.应用技巧.基本知识点总结和需要注意事项,具 ...

  8. [!] Unable to find a pod with name, author, summary, or description matching `AFNetworking`

    大量的答案是删除~/Library/Caches/CocoaPods/search_index.json  没有起作用 有用答案: https://blog.csdn.net/qq_35827461/ ...

  9. 一言难尽,Jpa这个功能差点让我丢了工作

    故事背景 前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸. 故事细节 在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了, ...

  10. Java——java.lang.NumberFormatException: For input string: ""

    java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.f ...