亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2008-04-12 00:00:00
        現(xiàn)代電子技術 2008年6期

        摘 要:隨著集成電路設計規(guī)模的不斷增大,設計驗證工作越來越困難。介紹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 引 言

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

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

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

        2 SystemVerilog語言中的驗證技術

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

        (1) 隨機約束的概念

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

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

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

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

        rand integer pkt_len;[JY]// 隨機產(chǎn)生數(shù)據(jù)包長度

        rand bit [7:0] payload [];[JY]// 隨機產(chǎn)生數(shù)據(jù)包載荷

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

        pkt_len >= 3;

        pkt_len <= 5;

        payload.size() == pkt_len;

        }

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

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

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

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

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

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

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

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

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

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

        drv = new;[JY]// 產(chǎn)生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數(shù)據(jù);否則顯示隨機化過程失敗。

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

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

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

        covergroup memory @ (posedge en);

        address : coverpoint addr {

        bins low= {0,127};

        bins high= {128,255};

        }

        endgroup

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

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

        2.3斷言(assertion)技術

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

        (1) 即時(immediate)斷言

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

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

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

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

        (2) 并發(fā)(concurrent)斷言

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

        在并發(fā)斷言中,序列表達式表示的是時間序列上的一組事件。為了精確的描述時序行為,SystemVerilog定義了基本的序列運算符:拼接(concatenation)、重復(repetition)、跳轉重復(goto repetition)、非連續(xù)重復(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為“真”,在倒數(shù)第2個時鐘標記b為“真”,在a之后c之前包含倒數(shù)第2個b之間b為“真”應當為2~10次。這個表達式等價于:a##1 ((!b[*0:]##1 b)[*2:10])##1 c。這里表示時鐘標記數(shù)不固定。

        非連續(xù)重復運算 如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至少發(fā)生1次,則該表達式匹配。

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

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

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

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

        sequence s1;

        a and b;

        endsequence

        屬性是由基本的序列組成,描述了一個復雜的硬件時序行為。假設已經(jīng)定義了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驗證平臺的建立與面向對象思想

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

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

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

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

        4結語

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

        參考文獻

        [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年出生,陜西西安人,西安建筑科技大學機電工程學院,碩士研究生,助教。主要研究方向為集成電路設計。

        乱人伦中文无码视频在线观看| 一本色道久久88加勒比—综合| 精品亚洲第一区二区三区| 国产又爽又大又黄a片| 无码h黄动漫在线播放网站| 2021精品综合久久久久| 男男做h嗯啊高潮涩涩| 国产日韩欧美一区二区东京热| 国产无遮挡裸体免费视频| 国产成人av在线影院无毒| 女同在线视频一区二区| www夜片内射视频在观看视频| 黄色a级国产免费大片| 亚洲 无码 制服 丝袜 自拍| 中文字幕精品久久一区二区三区 | 91精品国产综合久久熟女| 精品欧洲av无码一区二区| 免费成人福利视频| av天堂手机一区在线| а天堂中文地址在线| aaa级久久久精品无码片| 国产美女高潮流白浆在线观看 | 农村欧美丰满熟妇xxxx| 综合网五月| 极品新娘高清在线观看| 夜夜高潮夜夜爽夜夜爱爱一区| 国产av人人夜夜澡人人爽| 国产精品色内内在线播放| 91精品人妻一区二区三区水蜜桃| 日本真人做爰免费视频120秒 | 岳好紧好湿夹太紧了好爽矜持| 黄色毛片视频免费| 国产精品午夜福利亚洲综合网| 天天做天天爱夜夜爽女人爽| 亚洲国产人在线播放首页| 亚洲免费不卡av网站| 自拍偷自拍亚洲一区二区| 中国人妻被两个老外三p| 神马不卡一区二区三级| 国产一级内射一片视频免费 | 九九99久久精品在免费线97|