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

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

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

如何實(shí)現(xiàn)全面的SystemVerilog語(yǔ)法覆蓋

jf_pJlTbmA9 ? 來(lái)源:芯華章科技 ? 作者:芯華章科技 ? 2023-07-14 15:15 ? 次閱讀

SystemVeirlog的全面支持是開(kāi)發(fā)商用仿真器的第一道門(mén)檻。市面上可以找到不少基于純Verilog仿真器,但是真正能完整支持SystemVerilog 的仍然屈指可數(shù)。如何全面地支持SystemVerilog語(yǔ)言,是開(kāi)發(fā)仿真器的一個(gè)重要任務(wù)。

01. SystemVerilog的發(fā)展歷程

數(shù)字芯片的驗(yàn)證技術(shù)是隨著Verilog語(yǔ)法的演變而演變的。最早,Verilog是完全用來(lái)描述(Model)硬件的,因此又叫HDL(Hardware Description Language硬件描述語(yǔ)言)。隨著驗(yàn)證技術(shù)的進(jìn)步,需要將很多軟件的思路融進(jìn)Testbench以豐富測(cè)試場(chǎng)景。EDA公司都曾經(jīng)推出過(guò)一些針對(duì)Testbench的語(yǔ)言,如OpenVera等。

與Verilog的靜態(tài)屬性不同,這些Testbench的驗(yàn)證語(yǔ)言引入了很多動(dòng)態(tài)的概念,甚至有類(lèi)(class)、繼承、多態(tài)等。然而最終,這些語(yǔ)言又逐步融進(jìn)了Verilog,最終形成了今天的SystemVerilog。下圖顯示在SystemVerilog剛剛成為標(biāo)準(zhǔn)時(shí),它各個(gè)模塊的來(lái)源。

1680850266777795.png

圖片來(lái)源:SystemVerilog is changing everything - Tech Design Forum Techniques (techdesignforums.com)

基于SystemVerilog,各個(gè)EDA廠商推出了各自的仿真器,并在這個(gè)基礎(chǔ)上,進(jìn)一步開(kāi)發(fā)了基于SystemVerilog的methodology library, 最后統(tǒng)一成今天用的通用驗(yàn)證方法學(xué)——UVM (Universal Verification Methodology)。

1680850280486865.png

從上面的歷程可以看出,SystemVerilog的發(fā)展和支持不是一步到位的,是在其他語(yǔ)言的基礎(chǔ)上經(jīng)過(guò)多年演變形成的。各個(gè)EDA廠商根據(jù)他們的自身優(yōu)勢(shì)開(kāi)發(fā)了對(duì)SystemVerilog的支持。雖然這些仿真工具都符合LRM(語(yǔ)言參考手冊(cè))的標(biāo)準(zhǔn),但是由于其發(fā)展路徑不同,在性能上及個(gè)別語(yǔ)義上,仍然存在一定的差異。

02. SystemVerilog的語(yǔ)法特點(diǎn)

SystemVerilog為了給驗(yàn)證提供更多的靈活性,從其他編程語(yǔ)言,尤其是面向?qū)ο蟮木幊陶Z(yǔ)言(如C++, Java)借鑒了很多語(yǔ)法。這使得SystemVerilog語(yǔ)法非常復(fù)雜,各種語(yǔ)法耦合性強(qiáng),環(huán)環(huán)相扣。

因此,這就要求在設(shè)計(jì)時(shí),需要一個(gè)全局的概念,不能切成一個(gè)個(gè)孤立的模塊,否則最終很難拼起來(lái);即使勉強(qiáng)拼出來(lái),也不牢固。這點(diǎn)非常像中國(guó)古建筑的“榫卯”結(jié)構(gòu)。比如,SystemVerilog引入了class、structure,以及各種動(dòng)態(tài)類(lèi)型的數(shù)組,如 queue。這些都不能是孤立的。它們?cè)趯?shí)際使用中(比如UVM)都是嵌套使用的。一個(gè)類(lèi)型的數(shù)組,很可能其元素是另一個(gè)類(lèi)型。

以下通過(guò)一個(gè)uvm的例子,來(lái)更直觀的了解一下SystemVerilog的語(yǔ)法。

1680850293249364.png

一個(gè)支持SystemVerilog的仿真器,要想跑通上述case,至少需要關(guān)注以下幾個(gè)方面:

1 復(fù)合類(lèi)型成員的初始化

class ’my_sequence’ 中的成員 ’settings’(第12行)是一個(gè)queue類(lèi)型的變量。這種類(lèi)型的變量需要進(jìn)行特殊的初始化,給queue分配初始空間。該queue的成員又是一個(gè)struct 類(lèi)型,而struct是個(gè)復(fù)合類(lèi)型,因此,這里面是一類(lèi)比較復(fù)雜的嵌套類(lèi)型。

2 數(shù)組的方法調(diào)用(array method)

上面例子用到了‘sort’這個(gè)方法(第25行)。這里面,又涉及到了嵌套類(lèi)型,因?yàn)閝ueue的成員是struct 類(lèi)型的。而struct屬于復(fù)合類(lèi)型,是不能直接比較的。IEEE1800標(biāo)準(zhǔn)引入了 with (item.mebmer...),可以針對(duì)復(fù)合類(lèi)型的某個(gè)成員進(jìn)行排序操作。

3 垃圾回收

SystemVerilog類(lèi)似Java,它不需要用戶(hù)自己進(jìn)行類(lèi)似delete操作。這就要依賴(lài)仿真器提供垃圾回收的功能。否則在運(yùn)行時(shí)會(huì)出現(xiàn)內(nèi)存泄漏。

4 進(jìn)程管理

上述例子中的task ‘main_phase’ 中用到了‘fork join‘,(第33-36行)。仿真器需要有一套進(jìn)程管理來(lái)支持這個(gè)用法。進(jìn)程管理實(shí)現(xiàn)的是否高效,將直接影響到仿真器的性能。

除此之外,還有很多技術(shù)點(diǎn)需要考慮,這里就不贅述了??傊?,一個(gè)對(duì)SystemVerilog全面覆蓋的頂層設(shè)計(jì),對(duì)支持UVM非常關(guān)鍵。

03. SystemVerilog的scheduling semantics

當(dāng)人們理解SystemVerilog時(shí),可能會(huì)比較專(zhuān)注該語(yǔ)言增加的語(yǔ)法部分,但是這里要注意的是,SystemVerilog的引入仍然是為了驗(yàn)證硬件,而不是為了開(kāi)發(fā)軟件。它是為了豐富Testbench做驗(yàn)證的能力。SystemVerilog在豐富了語(yǔ)法的同時(shí),也會(huì)帶來(lái)其他的問(wèn)題,這就需要制定更多的規(guī)范來(lái)定義這些新出現(xiàn)的狀況,IEEE1800 scheduling semantics就是一個(gè)。

Phil Moorby 是Verilog的發(fā)明者。他寫(xiě)了Verilog的第一個(gè)仿真器——Verilog-XL。Verilog的仿真從誕生起,其實(shí)就存在一個(gè)問(wèn)題,那就是如何確保Verilog仿真器軟件的行為和硬件的行為一致,否則仿真就沒(méi)有意義。為此,需要制定一些細(xì)則,來(lái)規(guī)范Verilog在scheduling 上的行為。其中,大家比較熟悉的非阻塞賦值(non-blocking assignment), 就是Phil 引入的,其目的就是確保Verilog在仿真時(shí)序邏輯時(shí)的行為和硬件一致。

2002年,Phil Moorby加入Synopsys, 從事SystemVerilog語(yǔ)言的定義和開(kāi)發(fā)工作。筆者曾有幸和Phil共事,參與了早期SystemVerilog相關(guān)feature(如clocking block等)的開(kāi)發(fā)。這些新的SystemVerilog語(yǔ)法的引入會(huì)對(duì)Simulator的行為帶來(lái)一定的不確定性,為此,Phil對(duì)原有的Verilog scheduling semantics進(jìn)行了擴(kuò)展來(lái)消除這些不確定,其中包括Testbench和DUT之間能進(jìn)行精準(zhǔn)的無(wú)歧義的數(shù)據(jù)通信。這些思想,后來(lái)都被Accellera國(guó)際電子行業(yè)標(biāo)準(zhǔn)化組織采納,變成了今天IEEE1800 scheduling semantics 的一部分。

以下是1800 scheduling的semantic,來(lái)自 IEEE1800-2017, page 64——

1680850360749255.jpg

04. GalaxSim對(duì)SystemVerilog的設(shè)計(jì)思路

前面提到,SystemVerilog并非誕生起就一成不變的,而是在不斷變化發(fā)展。因此,作為后來(lái)者,芯華章開(kāi)發(fā)的高性能數(shù)字仿真器GalaxSim,在開(kāi)發(fā)SystemVerilog時(shí),不存在EDA巨頭公司的歷史包袱,可以從一開(kāi)始,就把SystemVerilog當(dāng)作一個(gè)整體來(lái)支持,而不是先支持老的Verilog部分,再支持新的SystemVerilog 部分。這里面包括了以下一些設(shè)計(jì)上的考慮:

1) 更精準(zhǔn)的SytemVerilog語(yǔ)義解析

SystemVerilog經(jīng)過(guò)了十幾年的使用和演變,有些早期的語(yǔ)義可能有了新的含義。此外,很多SystemVerilog的語(yǔ)法是在先有了EDA工具支持后再寫(xiě)入標(biāo)準(zhǔn)的。我們?cè)趯?shí)現(xiàn)SystemVerilog支持時(shí),會(huì)根據(jù)其背后所體現(xiàn)的實(shí)際驗(yàn)證應(yīng)用背景來(lái)設(shè)計(jì)仿真行為,而不是簡(jiǎn)單地做一個(gè)語(yǔ)言層面的編譯器。這樣,我們確保了GalaxSim在SystemVerilog上的仿真行為上和國(guó)際主流仿真工具兼容。

2)更加原生的支持

EDA主流的仿真器在支持SystemVerilog上都走了很長(zhǎng)的一段路,這是因?yàn)镾ystemVerilog本身并沒(méi)有穩(wěn)定下來(lái)。往往會(huì)出現(xiàn)的情況是,既有的仿真器的infrastructure無(wú)法滿足新出現(xiàn)的SystemVerilog的語(yǔ)法。

GalaxSim不會(huì)面臨這個(gè)問(wèn)題,因?yàn)槲覀冊(cè)谠O(shè)計(jì)其基礎(chǔ)結(jié)構(gòu)的時(shí)候,就會(huì)把SystemVerilog需要的各種data type一并考慮進(jìn)去。這樣的設(shè)計(jì)帶來(lái)的優(yōu)勢(shì)就是開(kāi)發(fā)更加流暢,質(zhì)量更高。

3)更加優(yōu)異的性能

性能始終是仿真器的靈魂。然而,對(duì)于SystemVerilog這種相對(duì)較新的語(yǔ)言,其性能往往不如純Verilog。這是因?yàn)?,它們往往是先開(kāi)發(fā)feature,確保功能的完備性;直到后來(lái)在客戶(hù)端遇到了性能問(wèn)題,再進(jìn)行性能優(yōu)化甚至重構(gòu)。

GalaxSim對(duì)SystemVerilog的支持,在設(shè)計(jì)之初,就根據(jù)目前的設(shè)計(jì)規(guī)模,將性能問(wèn)題與功能同步設(shè)計(jì),確保4大性能指標(biāo)(Compile Time、Compile Memory、Run Time、Run Memory)比肩甚至超越國(guó)際主流仿真器。

4)更加貼近驗(yàn)證的scheduling semantics

SystemVerilog的目的是為了驗(yàn)證。因此,仿真器對(duì)scheduling的要求是非常嚴(yán)格的。有些甚至并沒(méi)有非常明確地寫(xiě)在標(biāo)準(zhǔn)里,但是已經(jīng)被業(yè)內(nèi)主流EDA企業(yè)在事實(shí)上使用了。這些規(guī)范都是被數(shù)十年客戶(hù)檢驗(yàn)過(guò),也是在實(shí)際應(yīng)用中必須遵守的“戒律”。

05. 總結(jié)

SystemVerilog作為最復(fù)雜的語(yǔ)言之一,是國(guó)產(chǎn)數(shù)字仿真器開(kāi)發(fā)的第一道門(mén)檻。如果LRM(語(yǔ)言參考手冊(cè))的覆蓋率不夠,就會(huì)阻礙仿真器的商用推廣。但從上文的分析中不難發(fā)現(xiàn),實(shí)現(xiàn)復(fù)雜的SystemVerilog需要巨大的工程量。如何在紛雜的SystemVerilog語(yǔ)法中將主流UVM所需的部分,高質(zhì)高量地實(shí)現(xiàn)出來(lái),是GalaxSim為代表的國(guó)產(chǎn)EDA數(shù)字仿真器,需要解決的首要問(wèn)題。

芯華章核心研發(fā)團(tuán)隊(duì)曾在跨國(guó)公司成功主導(dǎo)過(guò)大型仿真器項(xiàng)目研發(fā),對(duì)驗(yàn)證語(yǔ)言、方法學(xué)、仿真器核心構(gòu)架、算法、優(yōu)化有著豐富的技術(shù)儲(chǔ)備,尤其在SystemVerilog 方面有著多年的耕耘,因此能將復(fù)雜的SystemVerilog背后的“榫卯”嵌套結(jié)構(gòu)梳理清楚,進(jìn)而可以在清晰的架構(gòu)上,一步到位支持幾乎所有SystemVerilog的語(yǔ)法。 實(shí)現(xiàn)對(duì)SystemVerilog語(yǔ)法的支持,僅僅使得仿真器可以編譯用戶(hù)的設(shè)計(jì)了。要想使仿真器真正發(fā)揮驗(yàn)證作用,還需要在SystemVerilog的基礎(chǔ)上搭建各種應(yīng)用,如Debug、SVA、Coverage等,才能最終使仿真器成為真正的仿真平臺(tái)。此外,性能始終是仿真器的核心。在完成SystemVerilog支持的同時(shí),如何結(jié)合調(diào)試(Debug),提升性能方面的功能,也是需要面對(duì)的重大課題。

責(zé)任編輯:彭菁

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

    關(guān)注

    14

    文章

    1018

    瀏覽量

    83746
  • eda
    eda
    +關(guān)注

    關(guān)注

    71

    文章

    2759

    瀏覽量

    173275
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    cocotb中的基礎(chǔ)語(yǔ)法SystemVerilog中的常用語(yǔ)法對(duì)照總結(jié)

    對(duì)于信號(hào)的讀取,我們?cè)?b class='flag-5'>SystemVerilog中,可以直接讀取信號(hào)值,而在cocotb中,其為接口變量提供了value方法屬性用于獲取信號(hào)值。
    的頭像 發(fā)表于 07-21 09:07 ?3898次閱讀
    cocotb中的基礎(chǔ)<b class='flag-5'>語(yǔ)法</b>與<b class='flag-5'>SystemVerilog</b>中的常用<b class='flag-5'>語(yǔ)法</b>對(duì)照總結(jié)

    systemverilog--語(yǔ)法詳解

    官方的一個(gè)systemverilog詳解,很詳細(xì)。推薦給打算往IC方面發(fā)展的朋友。
    發(fā)表于 06-02 09:30

    systemverilog學(xué)習(xí)教程

    systemverilog的一些基本語(yǔ)法以及和verilog語(yǔ)言之間的區(qū)別。
    發(fā)表于 04-01 14:24

    使用SystemVerilog來(lái)簡(jiǎn)化FPGA中接口的連接方式

    開(kāi)發(fā),但現(xiàn)在Vivado對(duì)SystemVerilog的支持已經(jīng)比較好了,完全可以使用SystemVerilog寫(xiě)出可綜合的FPGA程序,而且FPGA開(kāi)發(fā)中只會(huì)使用的SystemVerilog語(yǔ)
    發(fā)表于 01-08 17:23

    剛裝IC617建一個(gè)systemverilog的cell總是報(bào)語(yǔ)法錯(cuò)誤怎么去解決?

      如下圖,先建一個(gè)systemverilog的cell,但是會(huì)報(bào)錯(cuò),求幫解決下。寫(xiě)個(gè)最簡(jiǎn)單的也會(huì)報(bào)語(yǔ)法錯(cuò)誤?!   ?/div>
    發(fā)表于 06-24 06:24

    Systemverilog覆蓋率的合并和計(jì)算方式

      在systemverilog中,對(duì)于一個(gè)covergroup來(lái)說(shuō),可能會(huì)有多個(gè)instance,我們可能需要對(duì)這些instance覆蓋率進(jìn)行操作?! ≈槐4鎐overgroup type的覆蓋
    發(fā)表于 03-21 14:24

    SystemVerilog的斷言手冊(cè)

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    發(fā)表于 07-22 14:12 ?20次下載

    SystemC 和SystemVerilog的比較

    就 SystemC 和 SystemVerilog 這兩種語(yǔ)言而言, SystemC 是C++在硬件支持方面的擴(kuò)展,而 SystemVerilog 則繼承了 Verilog,并對(duì) Verilog 在面向?qū)ο蠛万?yàn)證能力方面進(jìn)行了擴(kuò)
    發(fā)表于 08-16 10:52 ?5373次閱讀

    cocotb中的基礎(chǔ)語(yǔ)法

    cocotb的出現(xiàn)使得我們能夠在做RTL仿真驗(yàn)證時(shí)依托Python來(lái)進(jìn)行測(cè)試用例的構(gòu)建,當(dāng)我們習(xí)慣了用Verilog、SystemVerilog來(lái)構(gòu)建測(cè)試用例時(shí),切換到cocotb后最直觀的方式便是我們能夠建立cocotb中的基礎(chǔ)語(yǔ)法
    的頭像 發(fā)表于 07-21 09:18 ?2439次閱讀

    簡(jiǎn)述SystemVerilog的隨機(jī)約束方法

    上一篇文章介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過(guò)使用隨機(jī)約束,我們可以將隨機(jī)限制在一定的空間內(nèi),有針對(duì)性地提高功能覆蓋率。
    的頭像 發(fā)表于 01-21 17:03 ?2103次閱讀

    解碼國(guó)產(chǎn)EDA數(shù)字仿真器系列之二 | 如何實(shí)現(xiàn)全面的SystemVerilog語(yǔ)法覆蓋?

    SystemVeirlog的全面支持是開(kāi)發(fā)商用仿真器的第一道門(mén)檻。市面上可以找到不少基于純Verilog的仿真器,但是真正能完整支持SystemVerilog 的仍然屈指可數(shù)。如何全面地支
    發(fā)表于 04-07 14:40 ?751次閱讀
    解碼國(guó)產(chǎn)EDA數(shù)字仿真器系列之二 | 如何<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>全面的</b><b class='flag-5'>SystemVerilog</b><b class='flag-5'>語(yǔ)法</b><b class='flag-5'>覆蓋</b>?

    EDA數(shù)字仿真器:SystemVerilog全面覆蓋編程案例

    數(shù)字芯片的驗(yàn)證技術(shù)是隨著Verilog語(yǔ)法的演變而演變的。最早,Verilog是完全用來(lái)描述(Model)硬件的,因此又叫HDL(Hardware Description Language硬件描述語(yǔ)言)。
    發(fā)表于 04-07 16:50 ?859次閱讀

    SystemVerilog實(shí)用知識(shí)點(diǎn):覆蓋率之Function Coverage

    SystemVerilog是一名芯片驗(yàn)證工程師,必須掌握的一門(mén)語(yǔ)言,其中Function Coverage是必須要懂的知識(shí)點(diǎn)之一;
    的頭像 發(fā)表于 06-04 16:30 ?7880次閱讀
    <b class='flag-5'>SystemVerilog</b>實(shí)用知識(shí)點(diǎn):<b class='flag-5'>覆蓋</b>率之Function Coverage

    SystemVerilog覆蓋率建模方式

    為了確保驗(yàn)證的完備性,我們需要量化驗(yàn)證目標(biāo)。SystemVerilog提供了一套豐富的覆蓋率建模方式。
    的頭像 發(fā)表于 06-25 10:44 ?1174次閱讀

    SystemVerilog的隨機(jī)約束方法

    上一篇文章《暗藏玄機(jī)的SV隨機(jī)化》介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過(guò)使用隨機(jī)約束,我們可以將隨機(jī)限制在一定的空間內(nèi),有針對(duì)性地提高功能
    的頭像 發(fā)表于 09-24 12:15 ?1733次閱讀