一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Formal學(xué)習(xí)筆記之算法基礎(chǔ)學(xué)習(xí)

路科驗證 ? 來源:驗證工程師的自我修養(yǎng) ? 2023-06-20 14:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

COMPARE SPECIFICATIONS

通常,我們會將spec和設(shè)計實現(xiàn)進行比較。Spec相對來說比較抽象些,可以是些SVA的assertion,RTL model或者一些HVL,比如systemc等。而implemenation通常是RTL代碼或者網(wǎng)表。

圖1是一個簡單的checker,A和B分別表示兩種spec,它們接收相同的輸入(Input),checker比較二者的輸出是否相等。如果找到一個輸入序列導(dǎo)致輸出比較失敗,就是找個了一個反例(CounterExample),工具會將此反例,包括相應(yīng)的輸入記錄下來,呈現(xiàn)出來。這個checker其實是個黑盒(Black box),因為我們無法觀察A和B內(nèi)部的狀態(tài)或者信號(白盒White box則可以)。

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

圖1simple checker

如果A和B足夠簡單,那我們可以測到所有可能的情形,或者用Formal Verification來判定二者完全等價。同時,我們也可以借助這個等價來簡化一些復(fù)雜的的問題,例如圖2所示,一個更加復(fù)雜的系統(tǒng),里面包含了A和B。

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

在這個例子中,因為我們先前已經(jīng)證明了A等價于B,我們可以做下簡化操作,把A和B從系統(tǒng)中拿掉,簡化成C和D的比較,如圖3所示。當(dāng)然,C和D的輸入(Inputs’) 與原始的輸入(Input)已經(jīng)有了很大的差別。這種divide and conquer 策略在FV中經(jīng)常使用,主要用來簡化分析大的design。

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

我們可以把上下方框想象成Spec和Implementation,這樣的比較輸入和輸入我們可以判定implementation與spec是等價的,設(shè)計符合我們的要求。這個一個典型的formal equivalence verification (FEV) 。不過,通常Spec和Implementation不會出現(xiàn)這種理想的等價情況。

CONES OF INFLUENCE

如果我們把一些把相干的邏輯分別考量,驗證復(fù)雜度能大大簡化。比如,我們有個硬件,實現(xiàn)加法和乘法運算;在跑simulation的時候,我們可能造不同case側(cè)重不同的點,有點測加法,有的測乘法。如果我們加法和乘法拆分出來,單獨驗,效率定能大幅提升,但在simulation里面不太現(xiàn)實,因為這需要造幾套驗證環(huán)境。

FV則能比較好的支持這種拆分,F(xiàn)V工具讀取property,將設(shè)計里面一些與當(dāng)前property不相關(guān)的邏輯移移除掉。這個叫cone of influence 簡化。如圖4所示,我們只考量result輸出的時候,很多邏輯對這個輸出沒影響,我們可以把它們簡化掉。如果design特別大的話,這種可以極大的簡化復(fù)雜度。

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

FV工具也可以支持用戶自定義的簡化,而非自動簡化。例如有個輸入,我們可以綁定成某個固定的值。這樣邏輯也能大大簡化。

BDD

BDD(binary decision tree),顧名思義,用樹形結(jié)果來表示電路的邏輯。如果去觀察一些電路的真值表如圖5,會發(fā)現(xiàn)有很多redundancy,很多行都是0。BDD可以表示相同設(shè)計的同時,移除一些冗余的邏輯。BDD是一種范式(canonical ),等價設(shè)計的BDD是一樣的;如果兩個電路的BDD一樣,那么可以判定二者等價。BDD算法是第一代Formal 工具常用的算法。

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

我們以一個MUX為例來說明BDD,如圖6所示,一個MUX邏輯的BDD算法, xyz為輸入,最下面一行為輸出。類似于紅黑樹,每一個分支左側(cè)代表下一輸入變量為0,右側(cè)代表輸入為1.

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

我們把輸出為0和1的做下merge,如圖7所示。

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

進一步觀察,左側(cè)兩個z,無論取值如何,輸出都是一樣,說明父節(jié)點y不影響結(jié)果。同理,對于觀察右側(cè),z節(jié)點多余。于是,我們可以進一步簡化成圖8這樣的。

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

當(dāng)然,如果選擇變量的順序不一樣,我們得到的BDD的大小會有所不同。如果我們選擇z->x->y的順序的,我們將得到圖9這樣的BDD。對于一些大的design來說,如果順序選擇不當(dāng),可能導(dǎo)致指數(shù)爆炸。通常用Heuristic-based 算法來尋找最佳的變量順序。比如根據(jù)電路的拓?fù)浣Y(jié)構(gòu)來,根據(jù)變量的相關(guān)性來映射。另一種方法是嘗試將每一個輸入變量替換0或者1,看看哪個精簡的程度更大些。

對于大而復(fù)雜的設(shè)計來說,提取BDD仍然是一件很艱難的工作,或許隨著輸入的增加而指數(shù)級增長。

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

COMPUTING A BDD FOR A CIRCUIT DESIGN

如果我們有真值表,我們可以很快速的提取出BDD。但大部分電路,我們沒那么容易算出真值表,尤其對RTL而言。慶幸的是,我們將根據(jù)基本的邏輯(與、或、非)的BDD組合起來,算出更大設(shè)計的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工具分析一段時間內(nèi)時序邏輯的主要方法。給定properties ,model-checking 會去搜索可能的未來狀態(tài),然后判定是否違反這些property。

首先創(chuàng)建初始狀態(tài)的BDD,然后根據(jù)相應(yīng)的邏輯推導(dǎo)出下一個狀態(tài)的BDD,不斷重復(fù)這個過程(reachability ),直到所有的狀態(tài)都加進來。如果遇到vilation,F(xiàn)V會倒推回去,給出一個反例。

model checker 可能出出現(xiàn)三種情形:

設(shè)計符合spec

有violation,并給出反例

邏輯爆炸,無法證明;只能推測N個cycle沒有violation

BOOLEAN SATISFIABILITY

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

假設(shè)我們有這樣的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

對于很多表達(dá)式,證明其成立可能比較困難,但找反例則會簡單的多。如果我們寫成AND形式,那只需要有一項為0,則表達(dá)式為0.

**Conjunctive normal form (CNF) **表達(dá)式是寫成||形式,各個item或在一起,也稱作product-of-sums ??梢詫ND類比成乘法,OR類比成加法。比如下式就是個CNF:

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

所有的bool邏輯都可以表達(dá)成CNF形式。

我們一個或門為例,輸入為a,b,輸出為c。它的基本邏輯是:

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

改寫一下:

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

我們建立一個真值表,把輸入一個個賦值進去,看看是否成立。比如a=0, b= 0, c = 0。但如果變量比較的多的話,算法會指數(shù)爆炸。

THE DAVIS-PUTNAM SAT ALGORITHM

一個個枚舉顯然不太合理,一個簡單的思路是先考慮一個變量,這樣就拆分成兩個子問題:一個a=0和一個a=1的情形。不斷重復(fù)這個過程,直到證明或者有違規(guī)。

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)
}

最壞的情形是把所有的都遍歷一遍,但一般來說不需要。例如對于表達(dá)是(a||!b||c) 來說,如果將a賦值成1,整個表達(dá)等于1,不需要繼續(xù)分析了。

一個典型的列子如圖13所以

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

總結(jié):

不要理解成formal是逐個枚舉輸入變量的值,formal實際上用的數(shù)學(xué)方法來證明的。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    389

    瀏覽量

    60954
  • SPEC
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    16098
  • BDD
    BDD
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    7610
  • Mux
    Mux
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    23713

原文標(biāo)題:Formal學(xué)習(xí)筆記之算法基礎(chǔ)

文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    算法圖解學(xué)習(xí)筆記分享

    算法圖解學(xué)習(xí)筆記03:分而治之
    發(fā)表于 06-05 17:42

    Formal算法基礎(chǔ)知識學(xué)習(xí)筆記

    的BDD一樣,那么可以判定二者等價。BDD算法是第一代Formal 工具常用的算法。我們以一個MUX為例來說明BDD,如圖6所示,一個MUX邏輯的BDD算法, xyz為輸入,最下面一行
    發(fā)表于 10-26 16:21

    學(xué)習(xí)筆記12864串行顯示

    學(xué)習(xí)筆記12864串行顯示講解,很好的資料下載吧。
    發(fā)表于 01-13 16:09 ?0次下載

    STM32各模塊學(xué)習(xí)筆記

    STM32個模塊學(xué)習(xí)筆記 目錄 STM32筆記之一 中斷優(yōu)先級.....................................................1 STM32筆記
    發(fā)表于 11-30 03:32 ?3243次閱讀

    OpenStackCinder學(xué)習(xí)筆記

    OpenStackCinder學(xué)習(xí)筆記(開關(guān)電源技術(shù)教程ppt)-該文檔為OpenStackCinder學(xué)習(xí)
    發(fā)表于 09-23 12:40 ?5次下載
    OpenStack<b class='flag-5'>之</b>Cinder<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>

    開關(guān)電源學(xué)習(xí)筆記 --- 目錄

    — Buck-Boost變換器的基本原理二.DC-DC變換器的電感設(shè)計開關(guān)電源學(xué)習(xí)筆記4 — DC-DC變換器的儲能電感設(shè)計電磁學(xué)知識儲備開關(guān)電源學(xué)習(xí)
    發(fā)表于 10-22 09:36 ?35次下載
    開關(guān)電源<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b> --- 目錄

    學(xué)習(xí)筆記】單片機匯編學(xué)習(xí)

    學(xué)習(xí)筆記】單片機匯編學(xué)習(xí)
    發(fā)表于 11-14 18:21 ?15次下載
    【<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】單片機匯編<b class='flag-5'>學(xué)習(xí)</b>

    ROS 學(xué)習(xí)筆記五:對Arduino環(huán)境刮目相看

    ROS 學(xué)習(xí)筆記五:對Arduino環(huán)境刮目相看
    發(fā)表于 11-29 09:51 ?2次下載
    ROS <b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b>五:對Arduino環(huán)境刮目相看

    STM32學(xué)習(xí)筆記1——軟硬件基礎(chǔ)keil5編程與GPIO開發(fā)

    STM32學(xué)習(xí)筆記1——軟硬件基礎(chǔ)keil5編程與GPIO開發(fā)
    發(fā)表于 11-30 12:36 ?4次下載
    STM32<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>1——軟硬件基礎(chǔ)<b class='flag-5'>之</b>keil5編程與GPIO開發(fā)

    HT32F52352學(xué)習(xí)筆記

    HT32F52352學(xué)習(xí)筆記
    發(fā)表于 12-02 20:36 ?6次下載
    HT32F52352<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b>六

    什么是深度學(xué)習(xí)算法?深度學(xué)習(xí)算法的應(yīng)用

    什么是深度學(xué)習(xí)算法?深度學(xué)習(xí)算法的應(yīng)用 深度學(xué)習(xí)算法被認(rèn)為是人工智能的核心,它是一種模仿人類大腦
    的頭像 發(fā)表于 08-17 16:03 ?2623次閱讀

    機器學(xué)習(xí)算法匯總 機器學(xué)習(xí)算法分類 機器學(xué)習(xí)算法模型

    機器學(xué)習(xí)算法匯總 機器學(xué)習(xí)算法分類 機器學(xué)習(xí)算法模型 機器學(xué)
    的頭像 發(fā)表于 08-17 16:11 ?1517次閱讀

    機器學(xué)習(xí)算法總結(jié) 機器學(xué)習(xí)算法是什么 機器學(xué)習(xí)算法優(yōu)缺點

    機器學(xué)習(xí)算法總結(jié) 機器學(xué)習(xí)算法是什么?機器學(xué)習(xí)算法優(yōu)缺點? 機器
    的頭像 發(fā)表于 08-17 16:11 ?2441次閱讀

    機器學(xué)習(xí)算法入門 機器學(xué)習(xí)算法介紹 機器學(xué)習(xí)算法對比

    機器學(xué)習(xí)算法入門 機器學(xué)習(xí)算法介紹 機器學(xué)習(xí)算法對比 機器學(xué)
    的頭像 發(fā)表于 08-17 16:27 ?1240次閱讀

    機器學(xué)習(xí)有哪些算法?機器學(xué)習(xí)分類算法有哪些?機器學(xué)習(xí)預(yù)判有哪些算法?

    機器學(xué)習(xí)有哪些算法?機器學(xué)習(xí)分類算法有哪些?機器學(xué)習(xí)預(yù)判有哪些算法? 機器
    的頭像 發(fā)表于 08-17 16:30 ?2385次閱讀