0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Formal学习笔记之算法基础学习

路科验证 来源:验证工程师的自我修养 2023-06-20 14:07 次阅读

COMPARE SPECIFICATIONS

通常,我们会将spec和设计实现进行比较。Spec相对来说比较抽象些,可以是些SVA的assertion,RTL model或者一些HVL,比如systemc等。而implemenation通常是RTL代码或者网表。

图1是一个简单的checker,A和B分别表示两种spec,它们接收相同的输入(Input),checker比较二者的输出是否相等。如果找到一个输入序列导致输出比较失败,就是找个了一个反例(CounterExample),工具会将此反例,包括相应的输入记录下来,呈现出来。这个checker其实是个黑盒(Black box),因为我们无法观察A和B内部的状态或者信号(白盒White box则可以)。

d40fd076-0f26-11ee-962d-dac502259ad0.png

图1simple checker

如果A和B足够简单,那我们可以测到所有可能的情形,或者用Formal Verification来判定二者完全等价。同时,我们也可以借助这个等价来简化一些复杂的的问题,例如图2所示,一个更加复杂的系统,里面包含了A和B。

d434c480-0f26-11ee-962d-dac502259ad0.png

在这个例子中,因为我们先前已经证明了A等价于B,我们可以做下简化操作,把A和B从系统中拿掉,简化成C和D的比较,如图3所示。当然,C和D的输入(Inputs’) 与原始的输入(Input)已经有了很大的差别。这种divide and conquer 策略在FV中经常使用,主要用来简化分析大的design。

d4623c9e-0f26-11ee-962d-dac502259ad0.png

我们可以把上下方框想象成Spec和Implementation,这样的比较输入和输入我们可以判定implementation与spec是等价的,设计符合我们的要求。这个一个典型的formal equivalence verification (FEV) 。不过,通常Spec和Implementation不会出现这种理想的等价情况。

CONES OF INFLUENCE

如果我们把一些把相干的逻辑分别考量,验证复杂度能大大简化。比如,我们有个硬件,实现加法和乘法运算;在跑simulation的时候,我们可能造不同case侧重不同的点,有点测加法,有的测乘法。如果我们加法和乘法拆分出来,单独验,效率定能大幅提升,但在simulation里面不太现实,因为这需要造几套验证环境。

FV则能比较好的支持这种拆分,FV工具读取property,将设计里面一些与当前property不相关的逻辑移移除掉。这个叫cone of influence 简化。如图4所示,我们只考量result输出的时候,很多逻辑对这个输出没影响,我们可以把它们简化掉。如果design特别大的话,这种可以极大的简化复杂度。

d4827310-0f26-11ee-962d-dac502259ad0.png

FV工具也可以支持用户自定义的简化,而非自动简化。例如有个输入,我们可以绑定成某个固定的值。这样逻辑也能大大简化。

BDD

BDD(binary decision tree),顾名思义,用树形结果来表示电路的逻辑。如果去观察一些电路的真值表如图5,会发现有很多redundancy,很多行都是0。BDD可以表示相同设计的同时,移除一些冗余的逻辑。BDD是一种范式(canonical ),等价设计的BDD是一样的;如果两个电路的BDD一样,那么可以判定二者等价。BDD算法是第一代Formal 工具常用的算法。

d4b4d58a-0f26-11ee-962d-dac502259ad0.png

我们以一个MUX为例来说明BDD,如图6所示,一个MUX逻辑的BDD算法, xyz为输入,最下面一行为输出。类似于红黑树,每一个分支左侧代表下一输入变量为0,右侧代表输入为1.

d4d6dc66-0f26-11ee-962d-dac502259ad0.png

我们把输出为0和1的做下merge,如图7所示。

d53f08c2-0f26-11ee-962d-dac502259ad0.png

进一步观察,左侧两个z,无论取值如何,输出都是一样,说明父节点y不影响结果。同理,对于观察右侧,z节点多余。于是,我们可以进一步简化成图8这样的。

d5795e32-0f26-11ee-962d-dac502259ad0.png

当然,如果选择变量的顺序不一样,我们得到的BDD的大小会有所不同。如果我们选择z->x->y的顺序的,我们将得到图9这样的BDD。对于一些大的design来说,如果顺序选择不当,可能导致指数爆炸。通常用Heuristic-based 算法来寻找最佳的变量顺序。比如根据电路的拓扑结构来,根据变量的相关性来映射。另一种方法是尝试将每一个输入变量替换0或者1,看看哪个精简的程度更大些。

对于大而复杂的设计来说,提取BDD仍然是一件很艰难的工作,或许随着输入的增加而指数级增长。

d5b76ea2-0f26-11ee-962d-dac502259ad0.png

COMPUTING A BDD FOR A CIRCUIT DESIGN

如果我们有真值表,我们可以很快速的提取出BDD。但大部分电路,我们没那么容易算出真值表,尤其对RTL而言。庆幸的是,我们将根据基本的逻辑(与、或、非)的BDD组合起来,算出更大设计的BDD。

基本的与或非逻辑的BDD,参见图10所示。

d5d8294e-0f26-11ee-962d-dac502259ad0.png

例如,我们以 (x&&y)||z 为例,电路如图11所示。将这些基本门电路组合在一起,就是这个电路的BDD,参见图12.

d5f7b05c-0f26-11ee-962d-dac502259ad0.png

d61765e6-0f26-11ee-962d-dac502259ad0.png

MODEL CHECKING

Model checking是FV工具分析一段时间内时序逻辑的主要方法。给定properties ,model-checking 会去搜索可能的未来状态,然后判定是否违反这些property。

首先创建初始状态的BDD,然后根据相应的逻辑推导出下一个状态的BDD,不断重复这个过程(reachability ),直到所有的状态都加进来。如果遇到vilation,FV会倒推回去,给出一个反例。

model checker 可能出出现三种情形:

设计符合spec

有violation,并给出反例

逻辑爆炸,无法证明;只能推测N个cycle没有violation

BOOLEAN SATISFIABILITY

BOOLEAN SATISFIABILITY,即SAT,它可以更快的举出反例。

假设我们有这样的spec和implemenation:

implementation =  !(!a&&c || a&&!b)
requirement = !a&&!c || b&c

即:

!(!a&&c || a&&!b) -> !a&&!c || b&c

p -> q 等价于 !p || q

(!a&&c || a&&!b) || (!a&&!c || b&&c)

SOLVING THE SAT PROBLEM

对于很多表达式,证明其成立可能比较困难,但找反例则会简单的多。如果我们写成AND形式,那只需要有一项为0,则表达式为0.

**Conjunctive normal form (CNF) **表达式是写成||形式,各个item或在一起,也称作product-of-sums 。可以将AND类比成乘法,OR类比成加法。比如下式就是个CNF:

(a||b||!d)&&(!b||c)&&(a||c)

所有的bool逻辑都可以表达成CNF形式。

我们一个或门为例,输入为a,b,输出为c。它的基本逻辑是:

a -> c
b -> c
!(a||b) -> !c

改写一下:

(!a||c)&&(!b||c)&&(a||b||!c)

我们建立一个真值表,把输入一个个赋值进去,看看是否成立。比如a=0, b= 0, c = 0。但如果变量比较的多的话,算法会指数爆炸。

THE DAVIS-PUTNAM SAT ALGORITHM

一个个枚举显然不太合理,一个简单的思路是先考虑一个变量,这样就拆分成两个子问题:一个a=0和一个a=1的情形。不断重复这个过程,直到证明或者有违规。

SATDivide&Conquer(formula)

If the formula evaluates to 1
{Return Success!}
If the formula evaluates to 0,
{Return Failure, hope another assignment works.}
Else
{split the problem on some variable, v.
SATDivide&Conquer (formula replacing v with 0)
SATDivide&Conquer (formula replacing v with 1)
}

最坏的情形是把所有的都遍历一遍,但一般来说不需要。例如对于表达是(a||!b||c) 来说,如果将a赋值成1,整个表达等于1,不需要继续分析了。

一个典型的列子如图13所以

d63610ae-0f26-11ee-962d-dac502259ad0.png

总结:

不要理解成formal是逐个枚举输入变量的值,formal实际上用的数学方法来证明的。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RTL
    RTL
    +关注

    关注

    1

    文章

    385

    浏览量

    59795
  • SPEC
    +关注

    关注

    0

    文章

    31

    浏览量

    15800
  • BDD
    BDD
    +关注

    关注

    0

    文章

    6

    浏览量

    7527
  • Mux
    Mux
    +关注

    关注

    0

    文章

    38

    浏览量

    23382

原文标题:Formal学习笔记之算法基础

文章出处:【微信号:Rocker-IC,微信公众号:路科验证】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    算法图解学习笔记分享

    算法图解学习笔记03:分而治之
    发表于 06-05 17:42

    Formal算法基础知识学习笔记

    的BDD一样,那么可以判定二者等价。BDD算法是第一代Formal 工具常用的算法。我们以一个MUX为例来说明BDD,如图6所示,一个MUX逻辑的BDD算法, xyz为输入,最下面一行
    发表于 10-26 16:21

    学习笔记12864串行显示

    学习笔记12864串行显示讲解,很好的资料下载吧。
    发表于 01-13 16:09 0次下载

    C语言学习笔记运算符优先性

    C语言学习笔记运算符优先性
    发表于 12-17 16:04 1次下载

    STM32各模块学习笔记

    STM32个模块学习笔记 目录 STM32笔记之一 中断优先级.....................................................1 STM32笔记
    发表于 11-30 03:32 3160次阅读

    OpenStackCinder学习笔记

    OpenStackCinder学习笔记(开关电源威廉希尔官方网站 教程ppt)-该文档为OpenStackCinder学习
    发表于 09-23 12:40 5次下载
    OpenStack<b class='flag-5'>之</b>Cinder<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>

    开关电源学习笔记 --- 目录

    — Buck-Boost变换器的基本原理二.DC-DC变换器的电感设计开关电源学习笔记4 — DC-DC变换器的储能电感设计电磁学知识储备开关电源学习
    发表于 10-22 09:36 35次下载
    开关电源<b class='flag-5'>学习</b><b class='flag-5'>笔记</b> --- 目录

    学习笔记】单片机汇编学习

    学习笔记】单片机汇编学习
    发表于 11-14 18:21 15次下载
    【<b class='flag-5'>学习</b><b class='flag-5'>笔记</b>】单片机汇编<b class='flag-5'>学习</b>

    ROS 学习笔记五:对Arduino环境刮目相看

    ROS 学习笔记五:对Arduino环境刮目相看
    发表于 11-29 09:51 2次下载
    ROS <b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b>五:对Arduino环境刮目相看

    HT32F52352学习笔记

    HT32F52352学习笔记
    发表于 12-02 20:36 6次下载
    HT32F52352<b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b>六

    什么是深度学习算法?深度学习算法的应用

    什么是深度学习算法?深度学习算法的应用 深度学习算法被认为是人工智能的核心,它是一种模仿人类大脑
    的头像 发表于 08-17 16:03 2158次阅读

    机器学习算法汇总 机器学习算法分类 机器学习算法模型

    机器学习算法汇总 机器学习算法分类 机器学习算法模型 机器
    的头像 发表于 08-17 16:11 1111次阅读

    机器学习算法总结 机器学习算法是什么 机器学习算法优缺点

    机器学习算法总结 机器学习算法是什么?机器学习算法优缺点? 机器
    的头像 发表于 08-17 16:11 1921次阅读

    机器学习算法入门 机器学习算法介绍 机器学习算法对比

    机器学习算法入门 机器学习算法介绍 机器学习算法对比 机器
    的头像 发表于 08-17 16:27 957次阅读

    机器学习有哪些算法?机器学习分类算法有哪些?机器学习预判有哪些算法

    机器学习有哪些算法?机器学习分类算法有哪些?机器学习预判有哪些算法? 机器
    的头像 发表于 08-17 16:30 1997次阅读