999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于SystemVerilog語言的設計驗證技術

2008-04-12 00:00:00
現代電子技術 2008年6期

摘 要:隨著集成電路設計規模的不斷增大,設計驗證工作越來越困難。介紹IEEE新標準SystemVerilog語言中用于驗證的隨機約束、功能覆蓋率、斷言技術和利用面向對象思想構建驗證平臺的一般方法。這些方法能極大提高芯片設計的效率,降低芯片設計的風險,減輕測試工程師的負擔。

關鍵詞:SystemVerilog;隨機約束;功能覆蓋率;斷言;面向對象

中圖分類號:TN492 文獻標識碼:B

文章編號:1004-373X(2008)06-008-04

Verification Technology Based on SystemVerilog Language

YAN Mo ZHANG Yuan2

(1.College of Mechanical and Electrical Engineering,Xi′an University of Architecture Technology,Xi′an,710055,China;

[JZ]2.Graduate Department,Chang′an University,Xi′an,710064,China)

Abstract:With the increasing of IC design scale,the verification becomes more and more difficult.This paper presents an IEEE new standard SystemVerilog language with constrained- random,assertion,functional coverage technologies in verification,and introduces the method of using Object Oriented Programming (OOP) thinking to build verification platform.These technologies promote the efficiency of chip design extremely,reduce the chip design risks and the test engineers′ burdens.

Keywords:SystemVerilog;constrained-random;functional coverage;assertion;OOP

1 引 言

近年來,隨著半導體技術的不斷發展,集成電路制造工藝技術越來越先進,芯片設計的規模變得越來越大,芯片驗證工作成了制約芯片設計水平的關鍵性因素。對于一款復雜的SoC芯片,設計驗證將占到整個設計工作量的70%以上。然而驗證技術相對于設計,其發展一直比較緩慢,并且出現相對停滯的現象。這就是所謂的“驗證危機”。為了解決這個困境,EDA廠商相繼推出一些新的驗證手段和概念:隨機約束(constrained-random)、斷言(assertion)、功能覆蓋率(functional coverage)等。所有這些,都是原先使用Verilog語言進行功能驗證所不具備的。

毫無疑問,工具和語言是制約驗證再次提升的癥結所在。IEEE新的標準語言SystemVerilog結合了來自Verilog,VHDL,C++的概念,還有驗證平臺語言和斷言語言,也就是說,他將硬件描述語言(HDL)同現代的高級驗證語言(HVL)結合起來。

因此,SystemVerilog擁有驗證工程師所需要的全部結構,這其中包括:隨機約束(constrained-random)、功能覆蓋率(functional coverage)、斷言(assertion)、面向對象(OOP)等新技術。

2 SystemVerilog語言中的驗證技術

2.1 隨機約束(constrained-random)技術

(1) 隨機約束的概念

隨機約束技術是一種隨機的產生測試激勵的新技術。相比這種新的隨機激勵產生技術,往往更加熟悉定向測試激勵的產生。傳統的定向測試手段是:根據設計規范,工程師通過手工編寫測試向量來驗證設計規范中的某一項功能。但是,隨著芯片設計規模和復雜程度的增加,采用定向測試可能需要成百上千乃至上萬的測試向量,驗證空間成“幾何”增長。這無疑需要大量的人力,同時隨著代碼行數的增多又會導致出錯概率的增加,從而增加驗證的難度。另一方面,定向測試只是針對已知測試空間,無法證明設計中不存在潛在的錯誤。

隨機約束技術的引入是解決這一難題的有效手段。利用計算機隨機生成函數,設計者可以隨機產生任意不同的測試向量,從而使驗證程序的代碼大幅度減少,提高驗證工作的效率。但是,僅通過隨機函數產生測試向量還不能夠有效地驗證設計規范的要求,這項技術最重要的特點是能夠約束測試向量的生成。通過對要生成的測試向量施加約束,可以人為地控制向量的生成。工程師可以根據規范中所定義的功能或者根據所關心的邊角情況,人為地產生各種測試向量來驗證設計的正確性。通過對隨機測試向量施加一定的約束,測試向量最終會變成定向測試激勵。由此,可以認為,定向測試激勵僅是隨機約束激勵的一個特例,而隨機約束激勵能夠對更廣泛的設計空間進行驗證。

(2) 隨機約束激勵的編寫方法

為了能夠產生隨機測試激勵,首先需要將激勵信號聲明為隨機變量。以一個數據包的產生為例,如下所示:

rand integer pkt_len;[JY]// 隨機產生數據包長度

rand bit [7:0] payload [];[JY]// 隨機產生數據包載荷

constraint pkt_c {[JY]// 約束關系

pkt_len >= 3;

pkt_len <= 5;

payload.size() == pkt_len;

}

在上面這段代碼中可以看到,數據包的長度pkt_len和載荷數據payload都被聲明成一個隨機變量。他們的產生依賴于約束條件。從約束條件中可以看到,數據包的長度pkt_len在3~5之間,載荷payload的長度則由pkt_len決定。

如果要將數據包載荷中的數據取值限定在一定的范圍內,則可以使用如下語句進行約束:

foreach (payload[i]) payload[i] inside {[0:16],[64:128]};

這條語句表明,將來生成的載荷數據只能在0~16和64~128之間進行取值。

要想控制數據生成的概率,還可以使用如下語句:

foreach (payload[i]) payload[i] dist {[0:16]:=80,[64:128]:=20};

上面這條語句對數據的取值概率進行了約束。payload將在0~16和64~128范圍內按照80~20的概率進行取值。

如果繼續修改約束條件,例如對數據包使用pkt_len==5;進行約束;數據載荷使用foreach (payload[i]) payload[i] == i;進行約束。這樣,可以清楚地知道所生成的payload是按照{1,2,3,4,5}進行取值。這時,隨機約束產生的測試激勵實際上已經轉化為定向測試激勵。

在定義了上面的這些約束條件后,應當把他們放在一個自定義的類(Class)中,例如:driver類。這樣做的好處是,設計者可以很容易的構建驗證平臺。接著,可以按照下面的方法產生激勵:

driver drv[JY]// 聲明為driver類

drv = new;[JY]// 產生driver類對象

if (drv.randomize()==1) begin

for (i = 1;i <= drv.pkt_len;i++) begin

$display(\"@%0d: paypload[%0d]=%0d\",time,i,drv.payload[i]);

#20ns;

end

end else

$display(\"Randomization failed\");

這段代碼中使用drv.randomize()對driver類對象drv進行隨機化,如果成功,就顯示出payload數據;否則顯示隨機化過程失敗。

2.2使用功能覆蓋率(functional coverage)

功能覆蓋率往往是同隨機約束一起使用的,當設計者使用了隨機約束產生激勵時,怎么能夠知道設計是否已經達到目標?無論是否使用隨機激勵或定向激勵,設計者都能夠通過使用覆蓋率來精確估計驗證過程。

使用功能覆蓋率的一般過程是這樣,首先,仿真工具會根據用戶定義的覆蓋率組將覆蓋率數據收集到一個或多個數據庫中。測試開始時,覆蓋率會隨著測試的時間而不斷提升,到達一定時候,覆蓋率不再增加。這時,如果覆蓋率還沒有達到100%,設計者可以采用更多的種子生成激勵進行測試或通過修改約束的方法生成新的激勵,直到整個設計的功能覆蓋率達到100%。這時可以認為驗證結束。功能覆蓋率的使用方法如下:

covergroup memory @ (posedge en);

address : coverpoint addr {

bins low= {0,127};

bins high= {128,255};

}

endgroup

上面這段代碼中使用covergroup關鍵字定義了一個功能覆蓋率組并且使用關鍵字converpoint定義功能覆蓋率點。他的意義是:每當en信號上升沿來的時候,仿真工具將采樣addr信號,將收集得到的值分別放入low和high兩個數據庫文件中。當addr小于128時,他的值將被收集到low這個數據庫文件中;當addr大于127時,他將被收集到high這個數據庫文件中。low和high是采用bins關鍵字并由用戶自己定義的用來收集覆蓋點addr數據的二進制文件。

仿真工具會根據收集到的這些數據和用戶預先定義好的這些二進制類型的數據庫文件進行命中比對,從而計算出相應的功能覆蓋率。

2.3斷言(assertion)技術

斷言技術是SystemVerilog語言為進行芯片驗證而增加的新技術。一條斷言就指明系統的一個行為,他主要用來驗證設計行為。SystemVerilog包含2種類型的斷言:即時(immediate)斷言和并發(concurrent)斷言。

(1) 即時(immediate)斷言

即時斷言主要跟隨在仿真事件之后,同仿真過程一起使用,他的執行類似過程控制塊中的語句。他主要是在語句執行的過程中對一個表達式進行判斷,也可以使用if語句進行同樣的解釋。如果表達式的計算結果為:X,Z,0,那么他就被解釋成假并且被斷言失敗。反之,表達式被解釋為真并且斷言通過。即時斷言可以使用下面的語句進行:

assert (req1 || req2) display(\"assert passed\");

else error(\"assert failed at time %0t\",time);

這條語句對表達式req1||req2進行斷言,當表達式成立時,斷言通過;否則,斷言失敗。

(2) 并發(concurrent)斷言

并發斷言基于時鐘語義并且使用采樣后的變量值,他就像帶有時鐘的always塊。并發斷言描述一種跨越時間的行為。與即時斷言不同的是,他的計算模型是基于時鐘的,斷言僅在時鐘標記發生時進行計算。一個并發斷言的構成一般由以下幾個部分組成:布爾(Boolean)表達式、序列(Sequences)、屬性(Property)、屬性斷言指令。

在并發斷言中,序列表達式表示的是時間序列上的一組事件。為了精確的描述時序行為,SystemVerilog定義了基本的序列運算符:拼接(concatenation)、重復(repetition)、跳轉重復(goto repetition)、非連續重復(non-consecutive repetition)、貫穿(throughout)、蘊涵within)、交集(intersect)、與(and)、或(or)[2]。其意義如下:

拼接運算 如a##2 b表示在當前時鐘標記時刻a事件為“真”,在隨后2個時鐘標記時刻b事件應當為“真”。a##[0:3] b表示b跟隨在a之后的0~3個時鐘標記期間。

重復運算 如a##1 b[*3]##1 c表示a##1 b##1 b##1 b##1 c,b被重復了3次。如果使用b[*2:3],則表示b被重復2~3次。

跳轉重復運算 如a##1 b[->2:10]##1 c表示在第1個時鐘標記a為“真”,在最后一個時鐘標記c為“真”,在倒數第2個時鐘標記b為“真”,在a之后c之前包含倒數第2個b之間b為“真”應當為2~10次。這個表達式等價于:a##1 ((!b[*0:]##1 b)[*2:10])##1 c。這里表示時鐘標記數不固定。

非連續重復運算 如a##1 b[=2:10]##1 c等價于:a##1((!b[*0:]##1 b)[*2:10])##1 !b[*0:]##1 c。

貫穿運算 如a throughout (b[->1])表示a必須一直保持有效直到b也有效。

蘊涵運算 如a within b表示從b開始到結束期間,若a至少發生1次,則該表達式匹配。

交集運算 如a intersect b表示a與b從開始到結束都應當匹配。

與運算 如a and b表示a和b在開始時應當匹配,結束時可以不同。

或運算 如a or b表示a和b中只要有一個匹配,表達式就匹配。

序列的定義可以使用sequence和endsequence進行定義,如:

sequence s1;

a and b;

endsequence

屬性是由基本的序列組成,描述了一個復雜的硬件時序行為。假設已經定義了req1和req2序列,屬性可以描述如下:

property a1;

@ (posedge clk)

disable iff (reset)

req1 |-> req2;

endproperty

上面代碼表示定義了一個斷言屬性a1,每次在時鐘上升沿的時候斷言進行計算。|->符號表示req1匹配時就有req2匹配。disable iff (reset)語句表明斷言在reset有效時不進行計算,即不在復位時刻進行斷言。

當定義完屬性后,就可以用斷言指令,對屬性進行斷言,例如:

a1_assert : assert property (a1);

3驗證平臺的建立與面向對象思想

要能夠有效地使用上述的驗證技術,驗證工程師需要搭建合理的驗證環境。一般的驗證平臺結構如圖1所示:

從圖1中,可以看出整個驗證平臺從底至上被分成信號層、命令層、功能層、場景層以及測試層。這其中包括了:生成器、代理、驅動器、監視器、檢查器、記分板以及斷言。

信號層為DUT(被測設計)提供信號級的連接。命令層在信號層之上,一般包括驅動器(Driver)、監視器(Monitor)和斷言(Assertion)。驅動器主要用來向DUT提供激勵數據。監視器用來報告觀測到的時序和數據。功能層位于命令層之上,是高層次操作的抽象。這一層主要包括代理(Agent)、檢查器(Checker)和記分板(Scoreboard)。代理的作用是接收上層傳來的高層事務,如DMA的讀寫等,并且將這些高層事務轉換成單獨的命令向驅動器提供。驅動器在接收到代理發出的命令后,就會生成相應的激勵數據。檢查器根據監視器報告的時序和數據進行相應的判斷。SystemVerilog語言在驗證中使用記分板技術實現自檢查結構。記分板的作用就是根據代理層送來的命令和檢查器所報告的命令進行比較,用來確定是否某一高層事務被遺漏,同時進行記錄。場景(Scenario)層在功能層之上,主要是用來生成高層事務。最上層是測試層,他被用來配置不同的測試案例,定義不同的約束條件。在整個測試工程中,功能覆蓋率由仿真工具自動生成,測試者將根據功能覆蓋率來調整測試平臺,修改測試案例直到覆蓋率達到100%,便可以認為測試過程結束。

為了使驗證平臺的分層結構更容易實現,各驗證模塊之間更容易地進行數據通信,SystemVerilog引入了面向對象(OOP)的思想建立驗證平臺。一般情況下,將驅動器、監視器、檢查器、記分板、事務生成器使用關鍵字class定義為類。一旦定義了一個類之后,就可以將與之相關的數據和操作統一放在這個類里面。從而使整個驗證平臺的結構變得清晰并且更容易維護。

4結語

隨機約束、功能覆蓋、斷言已經成為現代芯片驗證中的關鍵技術。這些技術能夠大幅度地提高工作效率,降低芯片設計風險,節約成本。在使用這些技術進行芯片驗證工作時,應當合理地運用面向對象的思想按照前面提到的分層結構建立相應的驗證平臺。這樣做不僅可以加快驗證環境的建立、有效地使用驗證技術而且還可以降低驗證平臺的維護成本、增強程序可讀性。

參考文獻

[1]劉杰,徐偉俊,夏宇聞,等.設計驗證中的隨機約束\\[J\\].中國集成電路,2006(11):28-31,44.

[2]Janick Bergeron,Eduard Cerny,et al.Andrew Nightingale.SystemVerilog驗證方法學\\[M\\].夏宇聞,楊雷,陳先勇,等,譯.北京:北京航空航天大學出版社,2007.

[3]Rindert Schutten.基于ESL并采用SystemC和SystemVerilog的設計流程\\[J\\].電子設計技術,2006(4):142-149.

[4]Chris Spear.SystemVerilog for Verification\\[M\\].Springer,2006.

[5]SystemVerilog 3.1a Language Reference Manual.Accellera′s Extensions to Verilog.Accellera,Napa,California,2004.

[6]李暾,郭陽,李思昆.基于斷言的模擬矢量自動生成方法\\[J\\].軟件學報,2004,15(10):1 441-1 450.

作者簡介 閆 沫 男,1980年出生,陜西西安人,西安建筑科技大學機電工程學院,碩士研究生,助教。主要研究方向為集成電路設計。

主站蜘蛛池模板: 欧美亚洲一二三区| 欧美一级在线看| 国产成人永久免费视频| 又大又硬又爽免费视频| 99偷拍视频精品一区二区| 色男人的天堂久久综合| 国产亚洲视频免费播放| 国产在线精品网址你懂的| 久久五月天综合| 热久久这里是精品6免费观看| 国产美女人喷水在线观看| 国产亚洲欧美日本一二三本道| 欧美色视频在线| 国产欧美视频在线| 久久综合国产乱子免费| 国产精品林美惠子在线观看| 老汉色老汉首页a亚洲| 97青草最新免费精品视频| 狠狠色综合网| 综合五月天网| 午夜福利在线观看入口| 毛片视频网址| 热久久国产| 欧美精品导航| 自拍欧美亚洲| V一区无码内射国产| 精品少妇人妻无码久久| 婷婷午夜天| 欧美日韩va| 91精品人妻互换| 一级成人a毛片免费播放| 国产精品视频导航| 国产国产人在线成免费视频狼人色| 精品视频第一页| 999福利激情视频| 国产女人综合久久精品视| 亚洲Va中文字幕久久一区| 精品国产一区91在线| 国产激情第一页| 精品久久国产综合精麻豆| 国产一区二区人大臿蕉香蕉| 在线精品亚洲一区二区古装| 久久狠狠色噜噜狠狠狠狠97视色| 91小视频在线播放| 日本三级欧美三级| 亚洲va视频| 亚洲欧美日韩成人在线| 天堂亚洲网| 国产精品丝袜视频| a级毛片免费播放| 国产在线八区| 日韩高清一区 | 色妞永久免费视频| 欧洲亚洲欧美国产日本高清| 红杏AV在线无码| 视频二区国产精品职场同事| 一级在线毛片| 日本亚洲欧美在线| 91免费国产在线观看尤物| 在线精品自拍| 91丨九色丨首页在线播放| 在线免费观看AV| 精品人妻一区无码视频| 伊人久久婷婷| 亚洲视频色图| 中文无码毛片又爽又刺激| 日本在线免费网站| 草逼视频国产| 亚洲综合色区在线播放2019| 欧美全免费aaaaaa特黄在线| 这里只有精品在线| 国产精品视频白浆免费视频| 日本欧美视频在线观看| 亚洲AⅤ永久无码精品毛片| 国产成人精品一区二区| 中国国产A一级毛片| 少妇露出福利视频| 国产亚洲精久久久久久久91| 亚洲系列无码专区偷窥无码| 亚洲欧州色色免费AV| 欧美午夜理伦三级在线观看| 无码精品福利一区二区三区|