日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

SystemVerilog調(diào)試過程中常用的方法和技巧

sanyue7758 ? 來源:芯片學(xué)堂 ? 2023-01-09 11:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

調(diào)試(Debug),是個非常廣泛的話題,讓我先嘗試給它下個定義:

調(diào)試指的是在遇到工程問題的時候,通過一些手段來進(jìn)一步診斷問題原因,探索解決方法,最終使得系統(tǒng)功能正常運行的必要過程。

調(diào)試應(yīng)該說是任何一個工程師解決問題的必備技能,對于芯片驗證工程師來說更是如此。調(diào)試通常沒有固定的章法,不可能按照某一個流程步驟就可以解決所有的工程問題,畢竟在實際環(huán)境中遇到的問題千差萬別,可能只是你的某一個命令參數(shù)敲錯了,可能是RTL邏輯設(shè)計上存在bug,也可能是設(shè)計規(guī)格(Specification)本身就存在紕漏,等等等等。

盡管調(diào)試方法不固定,但調(diào)試思想還是很一致的,那就是:盡可能的獲取更多的有效信息,并對這些信息做綜合分析。你細(xì)品,比如最常用的導(dǎo)出仿真日志(log)或者波形文件,這些方法本身就是為了獲取更多的有效信息,這些信息能夠幫助我們更好地去了解現(xiàn)在RTL的功能行為,幫助我們進(jìn)一步對問題進(jìn)行定位。

回到本文主題,本文要介紹的內(nèi)容就是調(diào)試過程中常用的方法和技巧,這些方法的合理應(yīng)用可以獲得上面說的有效信息,從而提高我們解決問題的效率。而至于如何做信息的綜合分析,需要根據(jù)具體場景和經(jīng)驗才能完成。

方法1:文件和參數(shù)索引的建立

之所以把建立文件和參數(shù)的索引也說成是調(diào)試方法,是因為在面對一個組件繁雜的驗證環(huán)境,或者規(guī)模龐大的設(shè)計的時候,能夠快速地檢查相對應(yīng)特性的規(guī)格文件、配置文件、宏定義、類型定義、參數(shù)配置、類原型、函數(shù)原型等信息,極有可能就可以解決掉一些低級的錯誤了。

要快速地找到這些有效信息,一方面依賴于工程師對當(dāng)前驗證環(huán)境和設(shè)計配置文件的熟悉程度,另一方面可以借助一些工具來找到它們。后者就是本節(jié)所要介紹的內(nèi)容,下面就直接羅列我工作中最常用的一些工具和命令。

使用ctags掃描工作目錄,建立基于語法元素的索引,配合Vim可以實現(xiàn)語法元素的快速跳轉(zhuǎn)。

使用meld工具比對目錄或者文件在不同版本之間的差異,功能比gvimdiff強那么一些。

Windows下使用Listary或者Everything軟件來快速查找本地文件,可以參考《芯片工程師必備軟件神器》。

Linux下使用grep命令來篩查文件內(nèi)容,配合管道符“|”可以實現(xiàn)更多級的篩查。

掌握一兩門腳本,Python、Perl、Shell等都可以,掌握正則表達(dá)式,隨手就可以實現(xiàn)一些小功能。

以上提到的工具和命令,都可以在網(wǎng)上找到大量的教程。如果有時間,我再寫一些小的使用Tip放到公眾號上。

方法2:波形的導(dǎo)出和使用

通過波形可以很直觀地看到RTL隨時間變化的所有行為細(xì)節(jié),盡管拉波形看信號變化看多了容易眼睛瞎掉,但不得不承認(rèn)大多數(shù)情況下沒有波形的話問題定位會變得寸步難行。波形文件是仿真過程的副產(chǎn)物,它按照一定的格式將每個仿真事件發(fā)生時刻的信號和變量狀態(tài)記錄下來,并最終以圖形化的方式呈現(xiàn)出來。

2643bc82-8d49-11ed-bfe3-dac502259ad0.png

波形文件的格式很多,比如VCD、FSDB、VPD、WLF等等。

VCD格式應(yīng)該說是最通用的波形格式,它是SV標(biāo)準(zhǔn)中定義的一種ASCII文件格式,其全稱是Value Change Dump。VCD包含了所有信號的變化信息,它可以被任何EDA調(diào)試工具打開。VCD文件可以在testbench中使用SV的內(nèi)建任務(wù)$dumpfile("name.vcd")和$dumpvar()來導(dǎo)出。

FSDB的全稱是Fast Signal Database,它是原來Novas公司(先被Synopsys收購)的工具Verdi專用的波形格式。在testbench中,可以使用Verilog PLI接口(可以像調(diào)用內(nèi)建函數(shù)那樣去調(diào)用C/C++函數(shù))調(diào)用$fsdbDumpfile("name.fsdb")和$fsdbDumpvars(0, top)去導(dǎo)出。注意,要用著兩個函數(shù)需要將Verdi安裝目錄中share/PLI下的相關(guān)庫添加到動態(tài)鏈接庫路徑($LD_LIBRARY_PATH)中,或者有參數(shù)(比如Mentor工具用的-pli)去指定PLI庫的路徑。

VPD是Synopsys自家定義的波形壓縮格式,叫VCD Plus(這個plus是不是有點似曾相識的感覺),在使用Synopsys VCS工具仿真時可以導(dǎo)出VPD波形,同時也可以使用使用配套的波形瀏覽器DVE(Discovery Visual Environment)去打開波形。VPD波形可以在testbench中使用$vcdpluson去導(dǎo)出,在VCS做編譯和仿真的時候需要指定debug能力,比如加參數(shù)-debug_all。

WLF的名字就比較單純,叫Wave Log Format,一看就知道是干啥的。WLF格式是Mentor家(現(xiàn)在屬于SIEMENS)定義的,可以由QuestaSim或者M(jìn)odelSim仿真工具可以生成和加載。如果你用ModelSim做過實驗,當(dāng)你打開波形界面,它會在工作目錄下自動生成一個WLF文件。另外Mentor的工具還可以使用命令選項-qwavedb并附加一串選項,可以在仿真過程中生成仿真數(shù)據(jù)庫文件(simulation database),該文件以.db為后綴,可以當(dāng)成仿真波形被Visualizer調(diào)試工具打開。

以上提到的函數(shù)調(diào)用在參數(shù)上具有很大靈活性,可以指定具體要dump波形的RTL層級、scope范圍甚至指定哪些信號。此外還有其他函數(shù)可以用來限制波形文件大小、波形dump開關(guān)、導(dǎo)出Memory數(shù)據(jù)等等。

盡管不同格式的波形文件有以上差異,但在應(yīng)用的時候大部分情況下取決于你有什么EDA工具可以用,另一方面這些波形格式也有工具可以相互轉(zhuǎn)化。

仿真波形在使用的時候通常有一些技巧,方便問題的定位和重現(xiàn),下面列舉幾個常用的:

將功能相關(guān)的信號分組(group)放在一起,方便做邏輯或協(xié)議檢查;

可以將多個信號組合成總線信號,或者進(jìn)行自定義的邏輯運算;

為被關(guān)注的仿真時刻添加標(biāo)簽(Mark),方便來回觀看;

通過添加標(biāo)尺可以查看信號事件間距、周期信號頻率、統(tǒng)計信號事件等功能;

將常用的狀態(tài)信號、總線信號、某個用例調(diào)試用的信號等保存成do文件,即將當(dāng)前波形界面的元素保存下來,方便波形重現(xiàn);

每個人看波形的習(xí)慣和方式會有不同,找到自己習(xí)慣的方式就可以了;

方法3:仿真日志的導(dǎo)出和使用

仿真日志(常說的log文件)通常是我們查看仿真結(jié)果會首先打開的文件。該文件中可以包含整個仿真過程中由編譯器和仿真器打印輸出的各種文本信息,比如當(dāng)前導(dǎo)入了哪些文件、本次編譯和仿真分別用到了哪些參數(shù)、當(dāng)前DUT的頂層是哪一層、仿真過程中不同時刻的關(guān)鍵動作和信息、本次仿真的結(jié)果和資源開銷等等。

基于文本的仿真日志記錄和對仿真日志的手動分析看起來是比較低級和低效的,特別是當(dāng)我們看著仿真日志并順著時間軸試圖去將打印數(shù)據(jù)和RTL行為關(guān)聯(lián)起來的時候,簡直苦不堪言。盡管如此,仿真日志的導(dǎo)出和使用仍然在某些時刻起到了基礎(chǔ)性的作用,特別是在UVM將report機制構(gòu)造健全之后,其作用不可忽視。

SystemVerilog本身在打印信息上有好幾個任務(wù)可以用:$display, $write, $strobe, $monitor, 這幾個任務(wù)的使用上不完全相同。

最常用的是$display,$display可以用來做格式化輸出,格式化方法跟C語言幾乎一致,并且打印完成之后會自動換行。

$write則用的不多,它的功能跟$display很接近,區(qū)別在于在打印完成之后不會添加換行符,所以適用于想要在一行里輸出多個信息的場景。

$strobe的打印就比較講究了,通過$strobe打印的變量值是當(dāng)前仿真時間槽(time slot)中該變量最后的值,比如對變量A做非阻塞賦值(<=)之后跟著用$strobe打印變量值,打印出來的是該變量完成賦值之后的值,而如果用$display則是打印出來該變量賦值完全之前的值。

$monitor的功能就跟它的名字一樣,它相當(dāng)于是在主線程之外開了一個監(jiān)控線程。當(dāng)通過$monitor打印的變量或者表達(dá)式發(fā)生改變時,打印的功能就會被觸發(fā),看起來就像是一個有了外部中斷能力的$display。

在UVM的框架里,打印信息被賦予了嚴(yán)重性等級(severity)和冗雜等級(verbosity),這在信息控制上提供可很大的便利。

Severity分成了INFO、WARNING、ERROR和FATAL,分別使用宏uvm_info、uvm_warning、uvm_error和uvm_fatal來進(jìn)行信息打印。

Verbosity等級共分為UVM_NONE、UVM_LOW、UVM_MEDIUM、UVM_HIGH、UVM_FULL、UVM_DEBUG六級,表示信息的冗雜程度由低到高。

INFO顧名思義就是簡單的狀態(tài)信息打印,這些信息并不是必須的,它的verbosity屬性可以通過uvm_info宏的參數(shù)來指定。比如當(dāng)仿真的verbosity設(shè)為UVM_DEBUG時,所有uvm_info信息都會被打印出來,仿真日志會顯得非常冗雜;當(dāng)仿真的verbosity設(shè)為UVM_NONE的時候,只有UVM_NONE屬性的uvm_info信息才會被打印出來,仿真日志就看起來簡潔很多。

WARNING指的是一些警告信息,提示潛在的問題,比如你顯式地調(diào)用了某個phase,可能不會影響仿真的繼續(xù),但可能會讓仿真場景不符合預(yù)期。WARNING的verbosity默認(rèn)都是UVM_NONE,因此始終會被打印出來。

ERROR就是一些錯誤信息,錯誤信息的出現(xiàn)不會使得仿真馬上停止,UVM給我們提供了閾值設(shè)置,當(dāng)錯誤信息的數(shù)量達(dá)到某個值只有仿真就會自己退出。通常UVM_ERROR的信息被打印出來,我們都需要去把它們都解決掉。ERROR的verbosity等級默認(rèn)都是UVM_NONE,所以也不要想著用verbosity來屏蔽它。

FATAL就是一些致命的錯誤,只要一出現(xiàn)仿真就會馬上退出,這種問題同樣必須解決,不解決你連仿真都跑不完。可想而知,這類信息同樣verbosity默認(rèn)是UVM_NONE,始終會被打印出來。

Verbosity的設(shè)置出了直接用仿真參數(shù)+UVM_VERBOSITY=UVM_DEBUG來配置,UVM還提供了+uvm_set_verbosity這一非常靈活的參數(shù),具體使用方法這里就不做介紹了。UVM出了這套完備的打印信息控制機制之外,還提供了很多調(diào)試宏,比如+UVM_CONFIG_DB_TRACE、+UVM_PHASE_TRACE、+UVM_OBJECTION_TRACE等,用來方便用戶從仿真日志中觀測配置數(shù)據(jù)庫(configuration database)狀態(tài)、phase執(zhí)行狀態(tài)和objection狀態(tài)等。

總而言之,信息的打印方法有很多,UVM在report機制上也給到了足夠的控制手段,利用好這些方法,仿真日志將是我們調(diào)試用例的利器!關(guān)于UVM的議題可以介紹的實在太多,有時間再開這一系列的文章。






審核編輯:劉清

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

    關(guān)注

    1

    文章

    395

    瀏覽量

    62907
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    183

    瀏覽量

    20108
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4889

    瀏覽量

    90333

原文標(biāo)題:SystemVerilog | 這些Debug調(diào)試方法你都知道嗎?| Part I

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    BSP調(diào)試#04:HDMI TX(RK3588)

    ? 本合集的是我當(dāng)初調(diào)試 RK3588 平臺時的 原始筆記 ——只保留了那些踩過坑的問題接口,沒出過問題的內(nèi)容全刪掉了。文章框架如下: 其中, “調(diào)試過程” 章節(jié)可能有點意思(記錄了我踩過的坑
    的頭像 發(fā)表于 04-10 09:23 ?6513次閱讀
    BSP<b class='flag-5'>調(diào)試</b>#04:HDMI TX(RK3588)

    BSP調(diào)試#03:Ethernet(RK3588)

    本合集的是我當(dāng)初調(diào)試 RK3588 平臺時的 原始筆記 ——只保留了那些踩過坑的問題接口,沒出過問題的內(nèi)容全刪掉了。文章框架如下: 其中,“ 調(diào)試過程 ”章節(jié)可能有點意思(記錄了我踩過的坑),其他
    的頭像 發(fā)表于 04-03 15:53 ?1w次閱讀
    BSP<b class='flag-5'>調(diào)試</b>#03:Ethernet(RK3588)

    BSP 調(diào)試:前言

    RK3588 平臺時的 原始筆記 ——只保留了那些踩過坑的問題接口,沒出過問題的內(nèi)容全刪掉了。?? 加上,調(diào)試 RK3588 那會我已經(jīng)不再是新手,因此合集《BSP調(diào)試(RK3588)》中的廢話相比前面合集少很多,直接就是 硬件設(shè)計、軟件配置、
    的頭像 發(fā)表于 03-12 21:19 ?448次閱讀
    BSP <b class='flag-5'>調(diào)試</b>:前言

    變頻器使用過程中的參數(shù)調(diào)試

    變頻器作為現(xiàn)代工業(yè)控制系統(tǒng)中不可或缺的關(guān)鍵設(shè)備,其參數(shù)調(diào)試的準(zhǔn)確性直接關(guān)系到電機運行效率、設(shè)備壽命及生產(chǎn)安全。在實際應(yīng)用中,約60%的變頻器故障源于參數(shù)設(shè)置不當(dāng),這凸顯了科學(xué)調(diào)試的重要性。本文將系統(tǒng)闡述變頻器參數(shù)調(diào)試的核心要點、
    的頭像 發(fā)表于 02-28 15:46 ?481次閱讀

    RK3588平臺USB攝像頭調(diào)試實戰(zhàn):從報錯到穩(wěn)定運行

    在嵌入式開發(fā)中,RK3588 憑借強勁的算力常被用于邊緣計算、工業(yè)視覺等場景,而 USB 攝像頭作為常見外設(shè),調(diào)試過程中難免遇到各類 “卡殼” 問題。最近我們在 RK3588 上調(diào)試 USB 攝像頭
    的頭像 發(fā)表于 02-04 16:13 ?741次閱讀

    瑞芯微Camera調(diào)試避坑指南:從Sensor到MIPI的常見問題全解析

    在智能硬件領(lǐng)域,Camera 模塊是安防監(jiān)控、車載影像、消費電子的核心組件 —— 但調(diào)試過程中,“I2C 不通”“畫面偏綠”“MIPI 數(shù)據(jù)采不到” 等問題往往讓工程師頭大。
    的頭像 發(fā)表于 02-02 17:28 ?2902次閱讀

    單片機系統(tǒng)硬件的調(diào)試方法

    在線仿真器和系統(tǒng).然后打開電源和啟動在線仿真器.進(jìn)行在線仿真調(diào)試。在調(diào)試過程中.經(jīng)常出現(xiàn)三種故障.第一種是通電之后,電源的指示燈不亮,以及電位系數(shù)為零.此時可以用萬能表檢測電源的插座。如果發(fā)現(xiàn)存在虛焊
    發(fā)表于 12-03 06:10

    將mcs文件燒到板子上以及利用IDE上傳軟件程序過程中遇到的問題以及解決方法

    。 但是在后續(xù)我們自己的程序上版子的過程中,遇到了上載不成功的問題: 解決方法參考了評論區(qū)的何志帆大佬的方法[2]: 1.可以重啟板子同時run寫入,不過我自己的程序這個方法沒成
    發(fā)表于 10-31 09:10

    【六岳微LY-F335開發(fā)板試用體驗】OLED顯示和調(diào)試過程中的坑

    \\\\\\\\_loop\\\\\\\\(\\\\\\\\); \\\\\\\\} 調(diào)試過程中發(fā)現(xiàn)BMP和顯示漢字占據(jù)存儲單元太大,導(dǎo)致CMD文件報錯,于是刪除了大部分BMP和漢字對應(yīng)的常量并刪除對應(yīng)函數(shù),最后給出調(diào)試圖片:
    發(fā)表于 09-22 19:17

    CUBEIDE調(diào)試過程中,如何將數(shù)組仲的數(shù)據(jù)拷貝到電腦?

    請問,有什么辦法可以在CUBEIDE 調(diào)試過程中,將數(shù)組的數(shù)據(jù)拷貝到電腦上去?
    發(fā)表于 09-09 07:20

    時間同步設(shè)備在復(fù)雜網(wǎng)絡(luò)環(huán)境中的調(diào)試要點

    時間同步設(shè)備是保障網(wǎng)絡(luò)系統(tǒng)協(xié)同運行的基礎(chǔ)設(shè)施,尤其在金融、電力、通信等領(lǐng)域?qū)纫筝^高的場景中,其穩(wěn)定性直接影響業(yè)務(wù)連續(xù)性。在實際部署中,網(wǎng)絡(luò)環(huán)境的復(fù)雜性常給同步精度帶來挑戰(zhàn)。本文將分享幾個調(diào)試過程中的經(jīng)驗要點。
    的頭像 發(fā)表于 08-13 15:48 ?648次閱讀
    時間同步設(shè)備在復(fù)雜網(wǎng)絡(luò)環(huán)境中的<b class='flag-5'>調(diào)試</b>要點

    使用AURIX進(jìn)行調(diào)試過程中,如果進(jìn)入某個函數(shù)的時候出現(xiàn)問題,是配置項的問題還是函數(shù)中的變量的問題?

    在使用AURIX進(jìn)行調(diào)試過程中,如果進(jìn)入某個函數(shù)的時候出現(xiàn)問題,是配置項的問題還是函數(shù)中的變量的問題?
    發(fā)表于 08-11 07:17

    調(diào)試工具:Eclipse調(diào)試工具欄與窗口的深入分析

    摘要 :在嵌入式系統(tǒng)開發(fā)領(lǐng)域,高效的調(diào)試工具鏈對于項目的成功實施具有決定性意義。本文聚焦于 Eclipse 調(diào)試工具欄與窗口的功能特性,深入剖析其在嵌入式開發(fā)調(diào)試過程中的關(guān)鍵作用。以廈門國科安芯
    的頭像 發(fā)表于 07-07 11:32 ?1081次閱讀
    <b class='flag-5'>調(diào)試</b>工具:Eclipse<b class='flag-5'>調(diào)試</b>工具欄與窗口的深入分析

    半導(dǎo)體硅片生產(chǎn)過程中常用摻雜技術(shù)

    在半導(dǎo)體硅片生產(chǎn)過程中,精確調(diào)控材料的電阻率是實現(xiàn)器件功能的關(guān)鍵,而原位摻雜、擴散和離子注入正是達(dá)成這一目標(biāo)的核心技術(shù)手段。下面將從專業(yè)視角詳細(xì)解析這三種技術(shù)的工藝過程與本質(zhì)區(qū)別。
    的頭像 發(fā)表于 07-02 10:17 ?2875次閱讀
    半導(dǎo)體硅片生產(chǎn)<b class='flag-5'>過程中</b>的<b class='flag-5'>常用</b>摻雜技術(shù)

    伺服剛性和慣量比調(diào)試

    伺服系統(tǒng)作為現(xiàn)代工業(yè)自動化的核心部件,其性能直接影響設(shè)備的運動精度和動態(tài)響應(yīng)。在伺服調(diào)試過程中,剛性(Stiffness)和慣量比(Inertia Ratio)是兩個關(guān)鍵參數(shù),它們共同決定了系統(tǒng)
    的頭像 發(fā)表于 06-07 17:52 ?5542次閱讀
    木里| 赫章县| 博罗县| 蒙阴县| 三门县| 方正县| 兰考县| 都兰县| 淄博市| 米易县| 新晃| 沁水县| 清流县| 遂溪县| 屏山县| 五大连池市| 贵南县| 电白县| 嘉定区| 汤阴县| 太原市| 陆良县| 呼伦贝尔市| 和林格尔县| 东港市| 抚州市| 霍邱县| 大悟县| 阿尔山市| 沧源| 彝良县| 蒙自县| 马山县| 辉南县| 广丰县| 泾阳县| 尤溪县| 通渭县| 齐河县| 和林格尔县| 平乡县|