在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Formal Verification (二) FPV、APPs介紹

rfdqdzdg ? 來源:IC Verification Club ? 2023-08-28 09:13 ? 次閱讀

SVA in Formal

FPV對不同的SVA Property,調用合適的算法engine進行建模,依據算法模型從初始狀態Reset state對DUT所有的input自動施加激勵,隨著cycle的depth增加,逐漸窮盡狀態空間。

71b3f62c-4537-11ee-a2ef-92fbcf53809c.png

The full space of all possible RTL state values: 最外層的紫方框為RTL的所有可能存在的狀態空間(input + state element(dff,latch))。

The reset states:初始狀態,一般從reset復位開始。

The reachable states:從reset state可以,自動對input施加激勵,可以達到的狀態。(所以紫方框以內綠橢圓以外的空間,是無法達到的空間,例如RTL中的dead code)Assumptions:使用SVA的assume對DUT進行約束;橙色橢圓型,約束縮小了狀態空間。

Assertion: 使用SVA的assert對property進行斷言;斷言屬性定義了模型的行為,例如assert property: ( @(posedge clk) clr |=> ((overfloat==0)&&(cnt==0)));斷言了在clk上升沿采樣時,若clr為高(先行算子anteceden成功),下一個clk上升沿采樣到的overfloat和cnt都為0(后續算子consequent);而Formal工具要做的就是窮盡狀態空間找出一個counter-exampleCEX反例,進行falsified證偽,例如overfloat和cnt都不為0或者只有一個為0;如果CEX出現,而assertion為golden,則就說明DUT不滿足spec。

Asser1: pass,因為這個CEX不滿足assumptions的約束,不是一個有效狀態。

Assert2: pass,因為這個CEX本身不是可以達到的狀態。

Assert3: fail,有效狀態和約束內,出現了一個CEX。

Cover Points: 使用SVA的cover對property設置覆蓋點;相當于設置一個觀察點,Formal工具會窮盡狀態空間,找到一個滿足要求的狀態;

Cover1: 該覆蓋點被cover

Cover2: 該覆蓋點在約束之外,unreachable

Cover3: 該覆蓋點在有效空間之外,unreachable

VC Formal定義了Assertion和Cover Points的結果如下:

Assertion:proven: assertion pass,窮盡狀態空間也找不到一個CEXfalsified:assertion fail,出現不滿足斷言的CEXinconclusive: Formal在N個cycle depth內,沒有找到CEX,屬于Bounded Proof,有界證明,這個"界“bounded (safe) depth就是N個cycle depth。vacuous:對于包含蘊含操作符|->|=>的property,如果antecedent一直未被觸發,也一定不會出現CEX,此時為空成功vacuous success。vacuous在Simulation中經常出現,因為施加的有限激勵,沒有觸發antecedent成功。但是在Formal中,需要引起注意。

Cover Points:Covered: 覆蓋Uncovered: 未覆蓋

the SVA differences

在Simaltion和Formal中,SVA的使用略有不同:

71cf6470-4537-11ee-a2ef-92fbcf53809c.png

Simulation中的assume和assertion作用相同,不起到約束的作用;而Formal中,assume實現約束的作用;對于Simulation的vacuous success,并不會報錯引起用戶注意,一般建議對property同時做assert和cover處理。

Sequential depth

Sequential depth:也就是上文提及到的Cycle depth;較大的Sequential depth,容易產生inconclusive的結果。

71fd7f5e-4537-11ee-a2ef-92fbcf53809c.png

Assertion Logic Contributes to State Space

COI

COI(CONES OF INFLUENCE):COI是Formal工具對property的邏輯電路映射,也被稱作Logic Cones邏輯錐。COI包含property的所有input和state element,這些決定了不同的輸出結果。

7212816a-4537-11ee-a2ef-92fbcf53809c.png

Formal工具對一個property解析生成的COI Schematic

72263d18-4537-11ee-a2ef-92fbcf53809c.png

從用戶角度,我們不必關心一個property的COI具體是什么樣子;用戶創建的所有property的COI集合對DUT RTL的覆蓋情況,類似于Simulation中的Code coverage,稱為Property Density。

The suggestion of SVA for Formal

formal model從SVA中提取,所以SVA的書寫方式,也會影響Formal的效率,推薦的SVA Coding Guidelines可以參考《VC_Formal_UGAppendix B。下面介紹一些常見的assertion”技巧“:

uniform format

assertion的書寫,需要遵循同一的格式,每條assertion有相應的文檔記錄;每條property都有可讀性的lable標注;可以采用一些宏定義,簡化assertion的書寫,參考:prim_assert.sv[4]當assertion的clock,reset都是同一個時,可以聲明default clocking和default disable iff,簡化書寫。

Immediate VS Concurrent

雖然立即斷言在一些情況下等效于并發斷言,如下:

//ConcurrentAssertion
assert_overfloat_func:assertproperty(`clk_rst$rose(overfloat)|->$past(cnt==4'hF));

//ImmediateAssertion
always@(posedgeclk)
if($rose(overfloat)&&(rstn==1))
assert_overfloat_func_2:assert($past(cnt==4'hF));

但是建議使用并發斷言,Formal工具對蘊含操作符的支持更好。

Try use implication

不建議直接對sequence進行斷言,sequence會在每個cycle都被檢查;推薦使用蘊含操作符的方式。

//BAD
propertysend_header_payload;
@(posedgeclk)disableiff(reset)
(enable##1header##1payload[*16]);
endproperty
//GOOD
propertysend_header_payload;
@(posedgeclk)disableiff(reset)
$rose(enable)|=>header##1payload[*16];
endproperty

SVA Modeling Layer Code

可以通過增加Auxiliary Code,簡化property的書寫難度;如下:

moduleassert_top(inputrstn,inputclk,inputA,
input,B,inputC,inputwr,inputrd);
//Requirement:inputsA,B,Caremutuallyexclusive
wire[2:0]my_bus={A,B,C};
a_abc_mutex:assertproperty(@(posedgeclk)$onehot0(my_bus));
//Requirement:Nomorethan5outstandingwr’s(withoutard)
//andnordbeforewr
reg[2:0]my_cnt;
always@(posedgeclkornegedgerstn)
if(!rstn)my_cnt<=?3’b000;
????????else
????????????if?(?wr?&&?!rd)?my_cnt?<=?my_cnt?+?1;
????????????else?if?(!wr?&&?rd)?my_cnt?<=?my_cnt?–?1;
????????????else?my_cnt?<=?my_cnt;
a_wr_outstand_le5:?assert?property?(@(posedge?clk)?my_cnt?<=?3’d5?);
a_no_rd_wo_wr:?assert?property?(@(posedge?clk)?!((my_cnt?==?3’d0)?&&?rd));
endmodule

use function

assertion中可以調用funciton。

//Computenextgrantforround-robinscheme
functionlogic[3:0]fv_rr_next(logic[3:0]req,logic[3:0]gnt);
fv_rr_next=0;
for(inti=1;(i<4);?i++)?begin
????????if?(req[(fv_which_bit(gnt)+i)%4])?begin
??????????fv_rr_next[(fv_which_bit(gnt)+i)%4]?=?1;
??????????break;
????????end
????end
endfunction

Page81_rr_next:??assert?property?(((opcode?==?NOP)?&&?
????(|gnt?==?1)?&&?(|req?==?1)?&&?(|(req&gnt)==4'b0))?|=>(gnt==fv_rr_next(req,gnt)))
else$error("Violationofroundrobingrantpolicy.");

as SIMPLE as possible

將一個大的assertion才分為多個小的assertion

$rose(START)|=>(ENABLE&&~START&&~STOP)[*7]
##1(ENABLE&&~START&&STOP)|=>
(~ENABLE&&~START&&~STOP);

$rose(START)|->~ENABLE##1ENABLE;
$rose(ENABLE)|->(~START&&~STOP)[*7];
$rose(STOP)|->ENABLE##1~ENABLE;
$fell(START)|=>##5$rose(STOP);

as SHORT as possible

盡量縮短Cycle Depth,使用[0:$]或者太大的時間delay不利于formal分析。

a5:assertproperty@(posedgeclk)a|->(##[0:$]b);
a6:assertproperty(@(posedgeclk)disableiff(~rst_n)A##1B|=>C##[1:100]D);

use Systemverilog

采用可綜合的systemvrilog語法,如interface,struct等,使用更便捷;像s_eventually, 在sv09才支持。

Formal Property Verification

以一個counter做簡單的演示:

modulecounter(
inputclk,
inputrstn,
inputen,
inputclr,
outputcnt,
outputoverfloat
);

reg[3:0]cnt;
regoverfloat;

always@(posedgeclk,negedgerstn)
begin
if(!rstn)
cnt<=?4'b0;
????else?if?(clr)
???????cnt?<=?0;
????else?if?(en?&?(cnt!=4'hF))
???????cnt?<=?cnt?+?1;
end


always@(posedge?clk,negedge?rstn)
begin
????if(!rstn)
???????overfloat?<=?1'b0;
????else?if?(clr)
???????overfloat?<=?1'b0;
????else?if?(cnt==15)
???????overfloat?<=?1'b1;
end

`ifdef?FPV

`define?clk_rst?@(posedge?clk)?disable?iff?(!rstn)


//ASSUME
assume_en_clr_conflit:?assume?property?(`clk_rst?!(en?&&?clr));

//COVER
cover_clr_overfloat:?cover?property?(`clk_rst?$fell(overfloat));
cover_cnt_value:?cover?property?(`clk_rst?(cnt==20));

//ASSERT
assert_clr_func:?assert?property(`clk_rst?clr?|=>((overfloat==0)&&(cnt==0)));


propertyp_en_func;
inttmp;
`clk_rst(en,tmp=cnt)|=>if(cnt!=4'hF)(tmp+1==cnt);
endproperty

assert_en_func:assertproperty(p_en_func);

assert_clr_overfloat:assertproperty(`clk_rst$fell(overfloat)|->$past(clr));
//PASS
assert_overfloat_func:assertproperty(`clk_rst$rose(overfloat)|->$past(cnt==4'hF));
//WRONGassertion
assert_overfloat_func_fail:assertproperty(`clk_rst(cnt==4'hF)|=>overfloat);

//ImmediateAssert
always@(posedgeclk)
if($rose(overfloat)&&(rstn==1))
assert_overfloat_func_2:assert($past(cnt==4'hF));

`endif
endmodule

Result:vacuity欄為property的先行算子成立的cycle depth。witness欄為property的后續算子成立的cycle depth。對于assert_overfloat_func這個property,witness早于vacuity1個cycle,是因為$past()是對過去的判斷。

723756d4-4537-11ee-a2ef-92fbcf53809c.png

Initial State定義clk,rstn;從復位狀態開始,Formal工具自動對input信號灌入激勵。

#ClockDefinitions
create_clockclk-period100
#ResetDefinitions
create_resetrstn-senselow

#InitialisationCommands
sim_run-stable
sim_save_reset

ASSUME

增加了en和clr不可能同時為高的約束。

COVER

增加一些關心的cover point,工具可以快速地跑出對應波形:例如$fell(overfloat)的cover:

726468e0-4537-11ee-a2ef-92fbcf53809c.png

200ns:完成復位2000ns:cover point match(注意采樣的上升沿前的數據)

對于(cnt==20))則是uncover,cnt最大值為15。

ASSERT

assert_overfloat_func_fail: assert property (`clk_rst (cnt==4'hF) |=> overfloat);這個propery斷言失敗,被工具找到了一個CEX: 當cnt==4'hF時,同時拉高clr,overfloat就不會為高了。

727dad64-4537-11ee-a2ef-92fbcf53809c.png在這里插入圖片描述

assertion annotation:

72ad42ae-4537-11ee-a2ef-92fbcf53809c.png

**ENGINE** Type欄的e1,s6,t3為算法引擎的代號;工具會根據property的特性選擇合適的算法,調用相應的引擎處理;VC Formal中的engines:

72c1d3cc-4537-11ee-a2ef-92fbcf53809c.png

常見算法為:

?Binary Decision Diagrams orBDD

?"SATisfiability" Proofs orSAT

?Bounded Model Checking orBMC

?Craig Interpolation, usually shortened to "Craig"

?Property Directed Reachability orPDR

一般使用工具默認分配的engine,當然用戶也可以自己指定;VC Formal提供了多種引擎編排的recipes,適用FPV不同的使用場景。

JasperGold Result

72f24fca-4537-11ee-a2ef-92fbcf53809c.png

CEX wave:

7309adc8-4537-11ee-a2ef-92fbcf53809c.png

JasperGold中的engines:

7323d892-4537-11ee-a2ef-92fbcf53809c.png

FPV的使用場景

design exercise FPV

FPV不需要搭建平臺和手動施加激勵,適合快速的在一些新設計的RTL上跑一些基礎功能;例如上一節$fell(overfloat))這個cover point,如果通過Simulatin,需要搭建testbench并詳盡地施加每一拍的激勵;而使用Formal,設計人員不需要關注整個過程,只關注最終結果,工具會自動施加相應的激勵并達到你想要的結果。

所以當你有以下需求時,可以考慮使用design exercise FPV:

1.對于新設計的模塊,想要跑一些基礎功能進行確認

2.在驗證人員的驗證平臺還沒有準備好時,需要自己提前做一些簡略地驗證

3.接手遺留的RTL代碼,可以跑一下FPV,結合波形加深對特定功能的理解

設計人員自己跑FPV,對RTL內部細節很了解;思路一般是:首先增加感興趣的cover point;再添加一些assumption,可以過度約束;先跑出一些簡單功能的波形;增加一些assertion,做檢查;接著添加一些復雜功能的assertion和cover point,并逐漸放寬assumption;跑FPV并不是可以一次性把所有property都寫完備,需要"wiggle"幾輪,多次調試property;

有些公司對IP開發有額外的斷言標準要求,例如property應該占RTL總代碼行數的三分之一;這些property既可以用于formal,也可以用于simulation。《Assertion-Based Design》,《Creating Assertion-Based IP》書籍中介紹了相關經驗。

Bug hunting FPV

當你有以下需求時,可以考慮使用Bug hunting FPV:

1.你所驗證的模塊有很多corner cases,需要額外的FPV驗證保證完備性

2.Simulation回歸random case時,陸續發現新的error,需要額外的FPV驗證提高置信度

3.對于一個成熟的模塊,加了一個新的feature,需要額外的FPV驗證

Bug hunting FPV是Simulation的補充驗證手段,采用更高層級的assertion,加入過約束,將注意力集中于某一個功能點;

full proof FPV

對一個設計只采用FPV進行驗證,保證設計功能100%符合spec;這個從理論上是完全可行的,也是Formal Verification的初衷:只要property是完備的,正確的,相對于RTL,就可以建立一個golden model,遍歷RTL的所有狀態空間,保證100%正確。當你滿足以下條件時,可以采用full proof FPV:

1.待測設計有一個詳細的規格書或者一個包含所有功能點的表格

2.待測設計是一個標準接口,可以采用商業的AIP進行驗證

對于full proof FPV,每種Formal工具都有推薦的sign-off流程,來保證驗證的完備。

VC Formal的推薦流程如下:

73365602-4537-11ee-a2ef-92fbcf53809c.png

JasperGold的推薦流程如下:

734ee550-4537-11ee-a2ef-92fbcf53809c.png

通過收集覆蓋率,保證property的完備,完成sign-off工作。具體后文介紹。

APPs

formal tool除了FPV,還提供了其他適用不同場景的APPs,如對于pinmux可以采用connectivity連通性檢查,對于寄存器的訪問采用register檢查,對于一塊mem,是否存在其他非法訪問路勁,可以才用security檢查;這一類app都是FPV的衍生,通過提供一文件或約束,工具自動產生property,調用最佳engine處理。相較于FPV,學習成本低。對于汽車產品,有額外的Functional Safety要求,工具會自動對rtl注錯分析其影響結果。

VC Fomrla Apps:

7376437a-4537-11ee-a2ef-92fbcf53809c.png73a0b696-4537-11ee-a2ef-92fbcf53809c.png

對于以上Apps, 可能除了DPV, JasperGold都有對應的Apps.






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19454

    瀏覽量

    231364
  • 邏輯電路
    +關注

    關注

    13

    文章

    494

    瀏覽量

    42734
  • SVA
    SVA
    +關注

    關注

    1

    文章

    19

    瀏覽量

    10155
  • DUT
    DUT
    +關注

    關注

    0

    文章

    190

    瀏覽量

    12516
  • FPV
    FPV
    +關注

    關注

    0

    文章

    16

    瀏覽量

    4523

原文標題:Formal Verification (二) FPV、APPs

文章出處:【微信號:數字芯片設計工程師,微信公眾號:數字芯片設計工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是FPV?怎樣去搭建FPV驗證環境呢?

    、頂層連接、狀態機和門控等等。、搭建FPV驗證環境(一)—編譯設計為了更好地說明FPV的實際應用,本文首先基于一個密碼鎖的例子展示FPV驗證的各個步驟。本文首先
    發表于 06-27 16:40

    搭建FPV驗證環境之創建assert與執行FPV簡析

    如果斷言FAIL了,我們還需要進行2次定位以確定FAIL的根本原因。搭建FPV驗證環境(四)—執行FPV現在所有FPV需要的元素已經在前面的文章依次介紹過了,我們可以開始真正執行
    發表于 06-27 17:15

    一、什么是FPV

    一、什么是FPVFPV是一種用來證明使用SVA或類似的語言描述的RTL屬性的方法。上圖說明了一個FPV工具執行的框圖。FPV的輸入:1、RTL模型2、要證明的一組屬性:asserti
    發表于 06-28 14:35

    FPV設計的狀態空間主要由什么因素決定的

    ;1} ,第個周期后到達狀態{2} ,直到達到最終狀態。FPV則會探索每個時鐘周期中所有可能的狀態,如圖中不斷增長的橢圓所示。如果FPV工具達到
    發表于 09-14 14:11

    A Roadmap for Formal Property

    What is formal property verification? A natural language such as English allowsus to interpret
    發表于 07-18 08:27 ?0次下載
    A Roadmap for <b class='flag-5'>Formal</b> Property

    路線圖正式產權核查

    What is formal property verification? A natural language such as English allowsus to interpret
    發表于 07-18 08:28 ?0次下載
    路線圖正式產權核查

    Advanced Formal Verification

    been observed that verification becomes the major bottleneck in design flows, i.e. up to 80% of the overall design
    發表于 07-21 09:10 ?0次下載
    Advanced <b class='flag-5'>Formal</b> <b class='flag-5'>Verification</b>

    Functional Verification Coverage Measurement and Analysis

    What is functional verification? I introduce a formal definition for functional verification
    發表于 07-25 14:48 ?0次下載
    Functional <b class='flag-5'>Verification</b> Coverage Measurement and Analysis

    功能驗證覆蓋測量與分析

    What is functional verification? I introduce a formal definition for functional verification
    發表于 07-25 14:49 ?0次下載
    功能驗證覆蓋測量與分析

    AVM Based Unified Verification

    This paper addresses the problem of current SoC functional verification productivityby describing a
    發表于 07-04 11:39 ?17次下載

    FPV58口系列智能渦街流量計技術資料

    概述: FPV58□系列智能型渦街流量計,由FPV580、FPV581、FPV582組成。 〖1〗FPV580=
    發表于 08-26 12:09 ?16次下載

    新思科技升級Verification Continuum平臺繼續引領技術

    新思科技近日發布新版Verification Continuum?平臺,將各種驗證工具進行新的原生集成,實現高達五倍的驗證性能。Verification Continuum平臺基于新思科技開發的高速
    的頭像 發表于 06-11 08:42 ?4893次閱讀

    分享一些形式驗證(Formal Verification)的經典視頻

    前段時間很多朋友在微信群里討論Formal驗證的視頻資料問題,今天整理好了,分享給大家。
    的頭像 發表于 02-11 13:15 ?897次閱讀
    分享一些形式驗證(<b class='flag-5'>Formal</b> <b class='flag-5'>Verification</b>)的經典視頻

    Formal Verification的基礎知識

    通過上一篇對Formal Verification有了基本的認識;本篇將通過一個簡單的例子,感受一下Formal的“魅力”;目前Formal Tool主流的有Synopsys的VC
    的頭像 發表于 05-25 17:29 ?2870次閱讀
    <b class='flag-5'>Formal</b> <b class='flag-5'>Verification</b>的基礎知識

    數字驗證中Formal Verification在國內的應用以及前景如何?

    這種中型規模的RTL如果用simulation,妥妥的一分鐘能跑十幾個sanity case,所以性價比實在太低。尤其是碰到帶memory的設計,用formal簡直就是噩夢(不過工具好像可以替換掉memory的邏輯,你也可以dummy掉data payload,但控制邏輯的data path同樣不短)。
    的頭像 發表于 06-26 16:38 ?1484次閱讀
    主站蜘蛛池模板: 中文字幕有码在线视频 | 日韩亚洲人成在线综合日本 | 热re66久久精品国产99热 | 国产视频日本 | 四虎免费久久影院 | 欧美一欧美一区二三区性 | 色五月丁香五月综合五月 | 888米奇在线视频四色 | 西西人体44rt高清午夜 | 可以免费看黄的网址 | 一级特级女人18毛片免费视频 | 天天噜噜噜 | 一级做a爱片在线播放 | 亚洲 欧美 动漫 | 噜噜噜噜影院 | 国产精品午夜自在在线精品 | 中文天堂最新版www官网在线 | 新版bt天堂资源在线 | 狠狠色狠狠色综合日日小蛇 | 深深激情网 | 我要色综合网 | 色午夜在线 | jlzzjlzzjlzz日本亚洲 | 视频在线色| 午夜性a一级毛片 | 日韩毛片网 | 濑亚美莉iptd619在线观看 | 美女用手扒开尿口给男生桶爽 | 成 人 免费 网站 | 黄色片啪啪 | 日日射夜夜 | 97成人免费视频 | 国产成人久视频免费 | 激情五月综合综合久久69 | 1024手机在线看片 | 天天干天天爽天天射 | 澳门三级bd高清 | 天天综合射 | 163黄页网又粗又长又舒服 | 亚洲资源最新版在线观看 | 黄色免费网站在线播放 |