• Rocket


    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中的项相交;
     
     
  • 相关阅读:
    ARC081F Flip and Rectangles
    LCA
    Tarjan
    2020牛客暑期多校六
    状压DP
    操作系统
    JAVA期末复习
    D. Yet Another Yet Another Task (区间最值)
    构造
    Codeforces Round #641 (Div. 2)
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10295022.html
Copyright © 2020-2023  润新知