https://mp.weixin.qq.com/s/4uWqBRrMVG6FlnBKmw8U-w

 
介绍SimplifyDC如何简化解码逻辑。
 
 
1. 使用
 
 
简化从mint和maxt中查找的逻辑。
 
其方法签名如下:
其中:
a. minTerms: 使结果为1的蕴含项;
b. maxTerms:使结果为0的蕴含项;
c. bits:最小项中变量的个数;
 
 
2. 主要过程
 
主要过程与Simplify基本一致:
1) 从minTerms和maxTerms中获取质项,即在卡诺图中画圈,把最小项划入圈中,以合并最小项,但又不能在圈中圈入maxTerms中的项;
2) 从质项中查找必要质项,做出如下区分:
a. 把质项分为必要质项和非必要质项;
b. 把最小项(minTerms)分为必要质项覆盖的最小项和未覆盖的最小项;
c. 从非必要质项中提取出代价最小的能够覆盖未覆盖最小项的质项,并与必要质项合并为cover;
3) cover就是能够覆盖minTerms的最简项的集合;
 
3. 获取质项
 
getPrimeImplicants实现如下:
 
1) 前半部分与Simplify相同,表格示例如下:
 
 
2) 尝试把单元格(i,j)中未合并的质项进行化简
 
化简的方法是消去其中一个值为0的变量,如果消去之后的新项不与maxTerms中的任何项相交,则该化简可以进行。
 
单元格(i,j)相较于(i,j+1)在上面,即above为true。也意味着above的单元格中的质项,其value各位中1的个数少一个。
 
所以尝试把above的单元格中质项的某变量的值从0变为1,而把在下的单元格中执行的某变量的值从1变为0。
 
单元格(i,j)中的质项,合并(merge)吸收一个变量之后,value中1的位数不变,而mask中多了一个1,所以添加到单元格(i+1,j)中。
 
单元格(i,j+1)中的质项,合并吸收一个变量之后,value中1的位数减少一个,而mask中1的位数增加一个,所以也是添加到单元格(i+1,j)中。
 
merge是有方向的:a merge b,则a.value必然大于b.value。这是dc merge a和a merge dc的区别。
 
实现如下:
 
a. 取出单元格(i,j)中未合并的质项;
b. 该单元格在上,above=true;
c. 如果某个变量值为0,且吸收之后不与maxTerms中的任何项相交,则可以用以化简:
 
 
term中的每一个变量都会尝试,碰到第一个可以吸收的变量即返回。
 
3) 尝试把单元格(i,j+1)中未合并的质项进行化简
 
实现如下:
 
a. 取出单元格(i,j+1)中未合并的质项;
b. 该单元格在下,above=false;
c. 如果某个变量值为1,且吸收之后不与maxTerms中的任何项相交,则可以用以化简:
 
 
 
4. 获取必要质项
 
与Simplify相同。
 
5. 获取最后化简结果cover
 
与Simplify相同。
 
6. 验证化简结果
 
 
a. 化简结果要覆盖全部minTerms中的项;
b. 化简结果不能与maxTerms中的项相交;
 
 

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

  1. Rocket - decode - 几个问题

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

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

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

  3. Rocket - decode - Term

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

  4. Rocket - decode - Simplify

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

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

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

  6. Rocket - decode - Inst Decode

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

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

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

  8. (转)64位开源处理器Rocket的源代码简单介绍

    转载地址: http://blog.csdn.net/leishangwen/article/details/46604819 最近大概阅读了一下UCB发布的Rocket处理器的源码,对源代码各个文件 ...

  9. flask+sqlite3+echarts2+ajax数据可视化报错:UnicodeDecodeError: 'utf8' codec can't decode byte解决方法

    flask+sqlite3+echarts2+ajax数据可视化报错: UnicodeDecodeError: 'utf8' codec can't decode byte 解决方法: 将 py文件和 ...

随机推荐

  1. Linux软件安装和维护

    rpm 早期 redhat package manager 现在 rpm package manager rpm安装的格式: 软件名称-版本号-适用平台.rpm jdk -8u151 -linux-x ...

  2. LTE基站开局流程

    1.全局参数配置 MOD  ENODEB :修改基站 ADD  CNOPERATOR: 添加运营商 ADD  CNOPERATORTA:添加跟踪区(TA) 2.设备参数配置(机柜.机框.RRU.光纤链 ...

  3. SpringCloudStream学习(一)RabbitMQ基础

    应公司大佬要求,学习一下SpringCloudStream,作为技术储备.这几天也看了这方面的资料,现在写一篇笔记,以做总结.文章会从RabbitMQ基础讲起,到SpringCloudStream结束 ...

  4. vue滑动吸顶以及锚点定位

    Vue项目中需要实现滑动吸顶以及锚点定位功能.template代码如下: <template> <div class="main"> <div id= ...

  5. Spring IOC使用详解

    SpringIOC使用详解 一.IOC简介 IOC(Inversion of Control):控制反转,即对象创建的问题.通俗地讲就是把创建对象的代码交给了Spring的配置文件来进行的.这样做的优 ...

  6. SpringMVC 设置全局DateTime json返回格式

    对于部分返回DateTime的项目,只需要在指定属性上添加@JsonSerialize 使用自定义的json转换格式即可自定义返回DateTime格式 但是对于项目中返回有多个DateTime字段来说 ...

  7. Anaconda3中的Jupyter notebook添加目录插件

    学习python和人工智能的相关课程时安装了Anaconda3,想在Jupyter notebook中归纳整理笔记,为了方便日后查找想安装目录(Table of Contents, TOC)插件,查找 ...

  8. chrome "items hidden by filters"

    今天更新chrome 后遇到console不能显示errors的问题,折腾一番后发现在console的Default levels中选择Default即可.

  9. HTML5面试题

    1. sessionStorage和localStorage的区别 答案: sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会 ...

  10. 5.7 Go 捕获异常

    5.7 Go 捕获异常 Go语言处理异常不同于其他语言处理异常的方式. 传统语言处理异常: try catch finally go语言 引入了defer.panic.recover 1.Go程序抛出 ...