數(shù)字集成電路驗(yàn)證方法學(xué)_第1頁
已閱讀1頁,還剩90頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、數(shù)字集成電路驗(yàn)證方法學(xué),浙江大學(xué)ICLAB實(shí)驗(yàn)室2016-12-26,主要內(nèi)容,驗(yàn)證的必要性驗(yàn)證方法學(xué)介紹驗(yàn)證工具介紹演示,2,共91頁,主要內(nèi)容,驗(yàn)證的必要性驗(yàn)證方法學(xué)介紹驗(yàn)證工具介紹演示,3,共91頁,驗(yàn)證的必要性,驗(yàn)證的概念,驗(yàn)證與測試的區(qū)別。經(jīng)驗(yàn)表明,驗(yàn)證已經(jīng)占到整個產(chǎn)品開發(fā)周期的70%以上,它已經(jīng)成為復(fù)雜SOC(System on-Chip)開發(fā)中的重要壁壘。制造、設(shè)計和驗(yàn)證能力之間存在鴻溝,4,共91頁,典

2、型流程,Verification is not just very hard, it is very, very hard?沒有一個簡單的工具可以解決你所有的驗(yàn)證問題。(VSIA,Virtual Socket Interface Alliance),5,共91頁,主要內(nèi)容,驗(yàn)證的必要性驗(yàn)證方法學(xué)介紹驗(yàn)證工具介紹演示,6,共91頁,驗(yàn)證方法學(xué),方法學(xué):又稱方法論,是一門學(xué)問采用的方法、規(guī)則與公理;一種特

3、定的做法或一套做法。驗(yàn)證方法學(xué):指完成驗(yàn)證過程中的一系列方法、技術(shù)和規(guī)范。 1.仿真技術(shù) 2.靜態(tài)技術(shù) 3.物理驗(yàn)證,7,共91頁,仿真技術(shù),基于事件的仿真--任何一個輸入的變化都被標(biāo)記為事件,即常說的功能仿真,精度高,速度慢。比如Modelsim, VCS?;谥芷诘姆抡?-單周期內(nèi)只檢查一次輸入并計算設(shè)計的輸出邏輯值。速度快,無時序、毛刺。比如Cyclone。事務(wù)級仿真--一堆事件的集合即為事務(wù),即常

4、說的驗(yàn)證平臺。軟硬件協(xié)同驗(yàn)證--需要專門的硬件,成本高 。,8,共91頁,驗(yàn)證方法比較,9,共91頁,傳統(tǒng)驗(yàn)證系統(tǒng),DUT:Design Under Test適用于基于事件的仿真和基于周期的仿真。適用于簡單的設(shè)計。,缺點(diǎn):1.可擴(kuò)展性差2.可重用性差,10,共91頁,層次化的驗(yàn)證系統(tǒng),,適用于事務(wù)級仿真優(yōu)點(diǎn):1.可擴(kuò)展性好2.可重用性好,11,共91頁,為什么要用事務(wù)級仿真?,基于事件的仿真與事務(wù)級仿真的比較,12,共9

5、1頁,事務(wù)級仿真,RVM: Reference Verification Methodology, Synopsys公司。  VMM:Verification Methodology Manual, ARM公司和 Synopsys公司。AVM:Advanced Verification Methodology, Mentor公司。OVM:Open Verification Metho

6、dology, Cadence和Mentor公司。UVM: Universal Verification Methodology, Cadence、Mentor和Synopsys公司。,13,共91頁,為什么選用OVM?,各種驗(yàn)證方法學(xué)比較,14,共91頁,OVM介紹,OVM是一種基于SystemVerilog的驗(yàn)證方法或者策略,已經(jīng)實(shí)現(xiàn)了一個基本的層次化驗(yàn)證平臺,大大簡化驗(yàn)證工程師的工作量。OVM可以驗(yàn)證HDL代碼或者網(wǎng)表文件O

7、VM特點(diǎn): 1.開放性:支持所有驗(yàn)證工具 2.開源:OVM庫都是基于SystemVerilog實(shí)現(xiàn)的,可以在網(wǎng)上下載。 3.可靠性:兩大公司共同開發(fā)維護(hù),15,共91頁,OVM結(jié)構(gòu),,ovm_envovm_sequencerovm_agentovm_scoreboardovm_driverovm_monitor,16,共91頁,SystemVerilog介紹,SystemVerilog結(jié)合了Verilo

8、g和C++的概念,具有如下新功能:1.面向?qū)ο缶幊?OOP) 、2.隨機(jī)約束(Constraint Random)、3.斷言(Assertion) 、4.功能覆蓋率(Functional Coverage) 。,17,共91頁,OOP:Object-oriented programming對象:對象(Object)是一個現(xiàn)實(shí)實(shí)體的抽象,對象可被認(rèn)為是一個把數(shù)據(jù)(屬性)和程序(方法)封裝在一起的實(shí)體,這個程序產(chǎn)生該對象的動作,屬

9、性反映了對象當(dāng)前的狀態(tài) 。面向?qū)ο缶幊蹋褐饕菍⑽覀儗?shí)際生活中的對象經(jīng)過抽象,將它定義成為一個類,通過類的屬性和方法來模擬生活中的這個對象。這樣使得程序更容易結(jié)構(gòu)化、抽象起來更方便。 傳統(tǒng)的編程結(jié)構(gòu)和設(shè)計方法以過程為中心進(jìn)行功能組合,代碼的擴(kuò)充和復(fù)用能力很差。對象是對現(xiàn)實(shí)世界實(shí)體的模擬,因面能更容易地理解需求,即使用戶和分析者之間具有不同的教育背景和工作特點(diǎn),也可很好地溝通。,SystemVerilog介紹-面向?qū)ο缶幊?18,共9

10、1頁,類:定義實(shí)物的抽象特點(diǎn), 包含方法和屬性。對象:類的實(shí)例。方法:類的行為。繼承:子類包含類的特性。,SystemVerilog介紹-面向?qū)ο缶幊?19,共91頁,CRT:Constraint Random Test class my_transaction extends ovm_transaction; rand int data_i; constraint c_data_i { data_i >

11、;= 0; data_i < 262144; } endclassmy_transaction tr = new();tr.randomize(); //tr.data_i大于0小于262144,SystemVerilog介紹-隨機(jī)約束,20,共91頁,SystemVerilog介紹-隨機(jī)約束,class transcation; rand bit [1:0] src

12、; rand bit [31:0] data; bit [31:0] low, high; constraint cons{ src dist {0:=40, [1:3]:=60}; data inside {[low:high]}; }endclass,21,共91頁,SystemVerilog介紹-斷言,斷言:屬于驗(yàn)證方法中的一種,是對設(shè)計屬性(行為)的描述, 如果一個屬性不是我們期望

13、的那樣,那么斷言就會失敗。assertions與verilog相比:verilog是一種過程性語言。它的設(shè)計目的是硬件描述,它可以很好的控制時序,但是描述復(fù)雜的時序關(guān)系,代碼較為冗長。assertions是一種描述性語言,設(shè)計目的為仿真驗(yàn)證,可以有很多內(nèi)嵌的函數(shù)來測試特定的時序關(guān)系和自動收集覆蓋率數(shù)據(jù)。,22,共91頁,SystemVerilog介紹-斷言,Assertion 示例property p10;@(posedge

14、clock) (io.data_check_o=data_out_design_for_check-2);endpropertya10: assert property (p10);,23,共91頁,SystemVerilog介紹-斷言,property pr1; @(posedge clock) start |-> req ##2 (gnt==1 && req==0);endpropertyA_

15、pr1: assert property (pr1);,24,共91頁,SystemVerilog介紹-功能覆蓋率,功能覆蓋率: 衡量哪些設(shè)計特征已經(jīng)被程序驗(yàn)證過的一個指標(biāo)代碼覆蓋率 1. 語句覆蓋(StatementCoverage) 2. 判定覆蓋(DecisionCoverage) 3. 條件覆蓋(ConditionCoverage) 4. 路徑覆蓋(PathCoverage),25,共91頁,

16、語句覆蓋,語句覆蓋(StatementCoverage):度量被測代碼中每個可執(zhí)行語句是否被執(zhí)行到了。int foo(int a, int b){   return  a / b;}TeseCase: a = 10, b = 5 語句覆蓋率:100%代碼

17、的bug: b=0,26,共91頁,判定覆蓋&條件覆蓋,判定覆蓋(DecisionCoverage):度量程序中每一個判定的分支是否都被測試到了。條件覆蓋(ConditionCoverage):度量判定中的每個子表達(dá)式結(jié)果true和false是否被測試到了。int foo(int a, int b){    if (a 

18、;< 10 || b < 10) // 判定    {        return 0; // 分支一    }    else 

19、;   {        return 1; // 分支二    }},TestCaes1: a = 5, b = 15覆蓋了分支一TestCaes2: a = 15,&

20、#160;b = 15  覆蓋了分支二,TestCase1: a = 5, b = 5       true,  trueTestCase2: a = 15, b = 15  

21、0;false, false,TestCase1: a = 5, b = 15  true,  false   分支一TestCase2: a = 15, b = 5  false, true &#

22、160;  分支一,判定覆蓋率:100%,條件覆蓋<100%,條件覆蓋率:100%判定覆蓋率:100%,條件覆蓋率:100%,判定覆蓋<100%,27,共91頁,路徑覆蓋,路徑覆蓋(PathCoverage):度量了是否函數(shù)的每一個分支都被執(zhí)行了。,int foo(int a, int b){    int n

23、Return = 0;    if (a < 10)    {// 分支一        nReturn += 1;    }  &#

24、160; if (b < 10)    {// 分支二        nReturn += 10;    }    return nReturn;},Te

25、stCase1 a = 5,    b = 5     nReturn = 11TestCase2 a = 15,  b = 5     nReturn = 10TestCase3 a = 5,  &

26、#160; b = 15   nReturn = 1TestCase4 a = 15,  b = 15   nReturn = 0路徑覆蓋率:100%,28,共91頁,SystemVerilog介紹-功能覆蓋率,,29,共91頁,Functional Coveragecovergroup:覆蓋率模型coverpoint

27、:覆蓋點(diǎn)sample():采樣函數(shù)bins: 倉,SystemVerilog介紹-功能覆蓋率,30,共91頁,SystemVerilog介紹-功能覆蓋率,covergroup Covkind; coverpoint tr.kind{//kind為4位數(shù)據(jù) bins zero={0}; bins hi[] = {[8:$]};};endgroupCovkind cov = new();Cov.sample();,31

28、,共91頁,SystemVerilog介紹-功能覆蓋率,covergroup group(@posedge clk); ca: coverpoint a; // a為1bit cb: coverpoint b; // b為1bit cab: cross ca cb;endgroupgroup grp = new();//不需要調(diào)用grp.sample();,32,共91頁,靜態(tài)技術(shù),語法檢查--用戶可以自由控制需要檢查

29、的規(guī)則,如代碼風(fēng)格,可綜合檢查,DFT檢查。 nlint工具。靜態(tài)時序分析--檢查建立、保持時間以及其他延時信息是否滿足設(shè)計時序要求。 Prime Time。形式驗(yàn)證等價性檢查:不考慮時序信息,通常用于驗(yàn)證兩個設(shè)計是否在功能上等效(有g(shù)olden design)。 Formality 工具。模型檢查:驗(yàn)證設(shè)計的功能(沒有g(shù)olden design)。JasperGold,33,共91頁,語法檢查,用戶可以自由控制需要檢查的規(guī)則

30、代碼風(fēng)格檢查:命名規(guī)范等可綜合檢查:設(shè)計的代碼是否滿足可綜合要求DFT檢查:代碼是否會影響后端DFT的設(shè)計跨時鐘域設(shè)計檢查:亞穩(wěn)態(tài)傳播檢查等常用工具為:nlint工具。,34,共91頁,一般來說,要分析或檢驗(yàn)一個電路設(shè)計的時序方面的特征有兩種主要手段:動態(tài)時序仿真(Dynamic Timing Simulation)和靜態(tài)時序分析(Static Timing Analysis) 1.動態(tài)時序仿真:利用仿真器和延遲文件,

31、通過反標(biāo)節(jié)點(diǎn)延遲信息來仿真。 優(yōu)點(diǎn):可直觀查看波形;缺點(diǎn):速度慢,看不到關(guān)鍵路徑。 2.靜態(tài)時序分析:分析每條時間路徑上的延遲,來查看是否存在setup/hold違反。 優(yōu)點(diǎn):分析速度比較快,全面;缺點(diǎn):不能查看功能是否正確。,,靜態(tài)時序分析,35,共91頁,靜態(tài)時序分析,針對建立時間、保持時間的檢查,分為四種情況輸入端口到寄存器寄存器到寄存器寄存器到輸出輸入到輸出針對周期個數(shù),分為:單周期檢查多

32、周期檢查,36,共91頁,所謂等價性檢查,就是通過比較兩個設(shè)計在邏輯功能是否等同的方法來驗(yàn)證電路的功能。優(yōu)點(diǎn): 1.不依賴于測試矢量,因此能提供更完全的驗(yàn)證; 2.可以實(shí)現(xiàn)RTL-to-RTL、RTL-to-gate、gate-to-gate兩者之間的驗(yàn)證; 3.有定位功能,可以幫助你找出兩個設(shè)計之間功能不等同的原因; 4.可以使用的文件格式有VHDL、Verilo

33、g、Synopsys 的.db格式,以及EDIF網(wǎng)表等; 5.可以實(shí)現(xiàn)自動的分層驗(yàn)證;,,形式驗(yàn)證之等價性檢查,37,共91頁,形式驗(yàn)證之等價性檢查,# set reference(RTL)read_verilog -r -libname WORK ABC.vread_db tcb018gbwp7twc.dbset_top ABC# set implentation(Gate)read_veri

34、log -i -libname WORK ABC_mapped.vset_top ABCmatchverify,38,共91頁,所謂模型檢查,就是通過SystemVerilog中的斷言來描述DUT的特性,通過窮舉法產(chǎn)生隨機(jī)激勵,判斷設(shè)計是否滿足設(shè)計需求。是仿真的補(bǔ)充。優(yōu)點(diǎn): 1.不需要人為產(chǎn)生激勵,產(chǎn)生的激勵更完整; 2.對于某些模塊,用模型檢查比仿真驗(yàn)證速度更快 3.得到的波形很短(主要是

35、斷言失敗的波形),幾十個周期,方便定位問題缺點(diǎn): 只能適合用于模塊級別的驗(yàn)證,,形式驗(yàn)證之模型檢查,39,共91頁,物理驗(yàn)證--版圖級,電源電壓降串?dāng)_ Astro/ICC 布局布線工天線效應(yīng) 具中完成電遷移,,40,共91頁,物理驗(yàn)證--版圖級,電遷移 EM(electrical mobility)概念:金屬線在電流

36、和溫度的作用下產(chǎn)生的金屬遷移的現(xiàn)象原因:電子沿著電壓梯度漂移,與組成導(dǎo)線的金屬粒子發(fā)生碰撞,若能量很高,會使金屬導(dǎo)體的某些部位產(chǎn)生空洞或小丘,從而引起導(dǎo)線失效。失效模式:主要包括短路、斷路以及參數(shù)退化和時序違規(guī)等,41,共91頁,主要內(nèi)容,驗(yàn)證的必要性驗(yàn)證方法學(xué)介紹驗(yàn)證工具介紹演示,42,共91頁,,如何利用OVM完成驗(yàn)證?,43,共91頁,基于OVM的數(shù)字濾波器驗(yàn)證平臺,數(shù)模轉(zhuǎn)化器(DAC)中的數(shù)字插值濾波器作為此驗(yàn)證平臺的

37、DUT數(shù)字插值濾波器的功能: 1.提高采樣頻率 2.濾除帶外(帶寬20KHz)噪聲,44,共91頁,傳統(tǒng)的濾波器驗(yàn)證平臺仿真結(jié)果,傳統(tǒng)的驗(yàn)證平臺:基于定向測試矢量+波形查看的方式,45,共91頁,傳統(tǒng)驗(yàn)證平臺沒找到BUG的原因,1.仿真時間沒有足夠長 2.借助波形來判斷 3.沒有與理想?yún)⒖寄P捅容^ 基于OVM的驗(yàn)證平臺,,46,共91頁,OVM驗(yàn)證平臺驗(yàn)證步驟,1.利用OVM庫完成

38、平臺代碼2.啟動驗(yàn)證工具3.創(chuàng)建編譯庫4.編譯驗(yàn)證平臺代碼5.啟動仿真,47,共91頁,利用OVM庫完成平臺代碼,擴(kuò)展OVM類逐層完成: 1.接口 2.數(shù)據(jù)產(chǎn)生 3.驅(qū)動器 4.驗(yàn)證環(huán)境 5.比較器,48,共91頁,OVM平臺--接口,interface io_if();logic [17:0] data_i;logic [17:0] data_o;logic [17:0] data_che

39、ck_o;modport dut_if(input data_i, output data_o);// DUT接口modport check_if(input data_i, output data_check_o);// 比較器模塊接口 Endinterfaceio_if my_io();//裝載接口module check(io_if.check_if io, input clock,rst,en);dut dut(.

40、io(my_io), .clock(clock), .rst(rst), .en(rst_check)); check check(.io(my_io), .clock(clock), .rst(rst), .en(rst_check)) ;,49,共91頁,OVM平臺—數(shù)據(jù)產(chǎn)生,class my_transaction extends ovm_transaction; rand int data_i;

41、 function new (string name = ""); super.new(name);

42、 endfunction: new //產(chǎn)生隨機(jī)事件的約束條件 constraint c_data_i { data_i >= 0; data_i

43、 <262144; } virtual function void randomize_(); data_i = $random & 18'h3ffff; endfunction`ovm_object_utils_begin(my_transaction)//在程序中 `ovm_fiel

44、d_int(data_i, OVM_ALL_ON + OVM_DEC) `ovm_object_utils_end endclass: my_transaction,50,共91頁,OVM平臺—驅(qū)動器,class my_driver extends ovm_driver;// `ovm_component_utils

45、(my_driver)//注冊本類,這個宏的結(jié)尾沒有符號; virtual io_if v_io;//裝載虛擬接口 ovm_get_port #(my_transaction) get_port;//裝載與激勵發(fā)生器通信的通道接口:

46、 function new(string name, ovm_component parent); super.new(name, parent);

47、 //〖建議〗驗(yàn)證程序中可寫一些ovm_report_info的語句供提示用: ovm_report_info("", "Called my_driver::new");//在測試結(jié)果顯示此函數(shù)被調(diào)用

48、 endfunction: new,51,共91頁,function void build; super.build(); ovm

49、_report_info("", "Called my_driver::build"); get_port = new("get_port", this);//初始化 endfunction

50、: build virtual task run;

51、 ovm_report_info("", "Called my_driver::run"); forever

52、 begin my_transaction tx; #1600

53、 get_port.get(tx);//從通道中取一個事件 ovm_report_info("",$psprintf("data_i = %2h",tx.data_i)); v_io.dut_if.data_i = tx.data_i;

54、 end endtask: run

55、 endclass: my_driver,52,共91頁,OVM平臺—驗(yàn)證環(huán)境,class my_env extends ovm_env;// `ovm_component_utils(my_env)//注冊本類

56、 ovm_random_stimulus #(my_transaction) env_stimulus;//裝載激勵器 tlm_fifo #

57、(my_transaction) env_fifo;//裝載通道 my_driver env_driver;//裝載驅(qū)動器

58、 function new(string name = "my_env", ovm_component parent = null); super.new(name, parent); ovm_report_info(&qu

59、ot;", "Called my_env::new"); endfunction: new,53,共91頁,virtual function void build; super.bu

60、ild(); ovm_report_info("", "Called my_env::build"); env_stimulus = new(&qu

61、ot;env_stimulus", this);//初始化激勵器 env_fifo = new("env_fifo", this);//初始化通道 env_driver = new("env.driver", th

62、is);//初始化驅(qū)動器 endfunction: build

63、 virtual function void connect;//設(shè)定連接關(guān)系 ovm_report_info("", "Called my_env::connect"); env_

64、stimulus.blocking_put_port.connect(env_fifo.put_export);//激勵器側(cè)接口-放事件 env_driver.get_port.connect(env_fifo.get_export);//驅(qū)動器側(cè)接口-取事件 endfunction: connect,54,共91頁,virtual function void configu

65、re;// ovm_report_info("", "Called my_env::configure"); env_stimulus.set_report_id_action("s

66、timulus generation", OVM_NO_ACTION);//限制顯示信息 endfunction: configure//你可刪除上一行,看看有什么變化?

67、 task run(); ovm_report_info("","Called my_env::run"); endtask: r

68、un virtual function void report;

69、 ovm_report_info("", "Called my_env::report"); endfunction: report

70、 //在運(yùn)行下面的run_test()函數(shù)時,以上函數(shù)將自動依次運(yùn)行 endclass: my_env,55,共91頁,module check(io_if.check_if io, input clock,rst,en, input [17:0] data_out_design_for_check

71、);wire [17:0] hcic_out;//參考模型Hcic_full Hcic_full (clock, en, rst, io.data_i, hcic_out,);assign io.data_check_o= hcic_out;property p10; @(posedge clock) (io.data_check_o=data_out_design_for_check-2)||io.data_che

72、ck_o==0;endpropertya10: assert property (p10);endmodule,OVM平臺—比較器,56,共91頁,`timescale 1ns/10ps module top;

73、 import ovm_pkg::*; import my_pkg::*;

74、 parameter clock_cycle = 100; bit clock; bit rst; bit rst_che

75、ck; io_if my_io();//裝載接口 dut dut(.io(my_io), .clock(clock), .rst(rst),

76、 .en(rst_check));//裝載DUT check check(.io(my_io), .clock(clock), .rst(rst), .en(rst_check), .data_out_design_for_check(my_io.dut_if.data_o)); //〖建議〗在驗(yàn)證程序頂級模塊中一般采用繼承ovm_test

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論