介绍布尔代数最小项与最大项相关概念,以及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. php使用curl post josn数据

    今天在工作中使用到要使用("Content-Type", "application/json;charset=UTF-8")格式传送和接受数据,再次做个记录 p ...

  2. c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind

    一.符号修饰与函数签名 1.符号修饰 编译器将c++源代码编译成目标文件时,用函数签名的信息对函数名进行改编,形成修饰名.GCC的C++符号修饰方法如下: 1)所有符号都以_z开头 2)名字空间的名字 ...

  3. JDBC14 ORM03 JavaBean封装

    Javabean对象封装一条信息(推荐) 让JavaBean的属性名和类型尽量和数据库保持一致 一条记录对应一个对象,将这些查询到的对象放到容器中(List) 表信息如下 List封装多条信息 Con ...

  4. linux centos7 和 windows下 部署 .net core 2.0 web应用

    centos7 下部署asp.net core 2.0应用 安装CentOS7 配置网络[可选] 安装.Net core2.0 创建测试Asp.net Core应用程序 正式部署项目 安装VMware ...

  5. python100例 11-20

    011 兔子问题 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? f1=1 f2=1 for i ...

  6. 今天,你遇到redis线上连接超时了吗?

    一封报警邮件,大量服务节点 redis 响应超时. 又来,好烦. redis 响应变慢,查看日志,发现大量 TimeoutException. 大量TimeoutException,说明当前redis ...

  7. 高性能MySQL之索引深入原理分析

    一.背景 我们工作中经常打交道的就是索引,那么到底什么是索引呢?例如,当一个SQL查询比较慢的时候,你可能会说给“某个字段加个索引吧”之类的解决方案. 总的来说索引的出现其实就是为了提高数据查询的效率 ...

  8. nodejs上使用sql

    1.首先本地要安装mysql, https://www.mysql.com/downloads/. 2.在node中连接mysql,要安装mysql驱动,也就是npm安装mysql模块:npm i m ...

  9. PG primary 和 slave 互换

    http://blog.sina.com.cn/s/blog_544a710b0101a122.html http://blog.51cto.com/heyiyi/1898506 https://bl ...

  10. 数据库设计三大范式 zt

    from  http://www.cnblogs.com/linjiqin/archive/2012/04/01/2428695.html 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定 ...