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

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

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

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

sanyue7758 ? 來源:芯片學(xué)堂 ? 2023-04-04 10:42 ? 次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

581f19e8-d247-11ed-bfe3-dac502259ad0.png

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

VCD格式應(yīng)該說是最通用的波形格式,它是SV標(biāo)準(zhǔn)中定義的一種ASCII文件格式,其全稱是Value Change Dump。VCD包含了所有信號(hào)的變化信息,它可以被任何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)出。注意,要用著兩個(gè)函數(shù)需要將Verdi安裝目錄中share/PLI下的相關(guān)庫添加到動(dòng)態(tài)鏈接庫路徑($LD_LIBRARY_PATH)中,或者有參數(shù)(比如Mentor工具用的-pli)去指定PLI庫的路徑。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Verbosity的設(shè)置出了直接用仿真參數(shù)+UVM_VERBOSITY=UVM_DEBUG來配置,UVM還提供了+uvm_set_verbosity這一非常靈活的參數(shù),具體使用方法這里就不做介紹了。UVM出了這套完備的打印信息控制機(jī)制之外,還提供了很多調(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機(jī)制上也給到了足夠的控制手段,利用好這些方法,仿真日志將是我們調(diào)試用例的利器!

方法4:可視化調(diào)試

可視化調(diào)試主要分為Post-process和Interactive這兩種模式??梢暬{(diào)試工具是工程師在定位代碼問題時(shí)的有力工具,也是現(xiàn)在驗(yàn)證工程師主流的調(diào)試工具。工具的使用一般可以參考官方的用戶手冊(User Guide),也能夠在官網(wǎng)上找到相應(yīng)的培訓(xùn)鏈接和視頻

常用的可視化調(diào)試工具有Synopsys家的Verdi,Siemens家的Visualizer,還有Cadence家的SimVision。對于個(gè)人用戶來說,可能沒有辦法去實(shí)操體驗(yàn),但通常所在公司會(huì)購買至少一家的License。三家公司的工具的操作流程和基礎(chǔ)調(diào)試功能都差不多,然后又分別有自己調(diào)試的獨(dú)特功能。

58b62ebe-d247-11ed-bfe3-dac502259ad0.jpg

先介紹下后處理調(diào)試模式(post-process,即在仿真結(jié)束之后再去可視化和處理仿真結(jié)果,有些地方會(huì)叫做PPE,post-processing environment)的使用,因?yàn)檫@種方式在實(shí)際工作中用的比較多。在使用可視化調(diào)試工具之前,通常需要將testbench和RTL編譯到同一個(gè)數(shù)據(jù)庫中,該數(shù)據(jù)庫包含了文件信息、RTL例化層次信息、信號(hào)連接關(guān)系等等,以供調(diào)試工具的追蹤和分析。

如果使用Verdi工具,需要使用VCS在編譯(Compilation=Analysis+Elaboration)的時(shí)候,通過加參數(shù)-kdb -lca來生成KDB庫(Knowledge Database),其中l(wèi)ca(Limited Customer Availability Features)參數(shù)是為了指定工具特性。KDB數(shù)據(jù)庫格式是Verdi專用的格式,所以KDB庫有時(shí)候也可以叫Verdi庫。打開verdi的時(shí)候使用命令verdi加參數(shù)-elab來選擇該KDB庫。

如果使用Visualizer工具,需要使用Questa/ModelSim在對設(shè)計(jì)完成編譯(vlog/vcom)之后,使用vopt命令加參數(shù)-debug -designfile design.bin來生成.bin文件,同樣該文件格式是Visualizer專用的。打開Visualizer的時(shí)候使用命令visualizer加參數(shù)-designfile來選擇該bin文件,使用參數(shù)-wavefile來選擇db波形文件。

如果使用SimVision工具,需要在仿真階段使用NC仿真器或者XCelium仿真器(具有更高的仿真性能,比如支持多核等)將設(shè)計(jì)和波形都導(dǎo)出成shm格式。在仿真結(jié)束之后,你可以看到名為example.shm的目錄,該目錄下會(huì)有兩個(gè)文件:.dsn文件和.trn文件,前者包含的是設(shè)計(jì)的信息(類似于我們上面說的數(shù)據(jù)庫),后者包含的是波形信息。打開SimVision的時(shí)候使用命令simvision直接加example.shm來打開待調(diào)試的數(shù)據(jù)庫。

58ef1878-d247-11ed-bfe3-dac502259ad0.jpg

再看看交互模式(interactive mode),交互模式相對于后處理模式增加了仿真控制的功能,即可以設(shè)置仿真斷點(diǎn)、控制仿真的暫停、運(yùn)行和重啟等,并實(shí)時(shí)地觀察到信號(hào)的行為。交互模式下,上述EDA工具的界面上會(huì)多出來一些調(diào)試控件。不過這種模式的仿真運(yùn)行速度比較慢,且在分發(fā)和重現(xiàn)代碼行為上不是很友好,所以在實(shí)際工作中也用的比較少,除非遇到非常棘手但卻摸不著頭腦的問題。以上提到的幾家工具都支持交互模式調(diào)試,操作流程也都差不多,并且跟后處理模式一樣也需要先編譯出來一個(gè)數(shù)據(jù)庫。

如果使用Synopsys家的工具,在設(shè)置完必要的環(huán)境變量之后,比如VCS_HOME和VERDI_HOME,需要使用VCS命令vcs -kdb -lca -debug_access+all 編譯出KDB庫和simv可執(zhí)行的仿真文件,然后在執(zhí)行simv的時(shí)候加上參數(shù)-verdi就可以打開交互模式下的Verdi了,這個(gè)時(shí)候調(diào)試器和仿真器是關(guān)聯(lián)起來的。

如果使用Siemens家的工具,同樣在設(shè)置完必要的環(huán)境變量并使用命令vopt編譯出design.bin文件之后,可以使用命令vsim -visualizer=design.bin -qwavedb=+signal+class -f 打開交互模式下的Visualizer,便可以在調(diào)試工具界面去控制仿真器。

如果使用Cadence家的工具,那就相對復(fù)雜一點(diǎn),因?yàn)镃adence前前后后有幾個(gè)仿真器,比如verilog、ncsim、irun,并且進(jìn)交互調(diào)試模式的方法也比較多樣,但大致可以分兩種:一種是可以通過參數(shù)-gui直接開啟帶SimVision的仿真器,另一種方式是單獨(dú)啟動(dòng)SimVision,使用參數(shù)-connect host/pid連接到運(yùn)行在本地或者遠(yuǎn)端的仿真上。

以上命令只是展示大概的使用過程,實(shí)際應(yīng)以對應(yīng)版本的用戶手冊為準(zhǔn)哈。當(dāng)你打開可視化調(diào)試工具調(diào)試界面之后,有這么幾種常用的調(diào)試功能:

通過Hierarchy等窗口瀏覽源代碼的例化層次結(jié)構(gòu),類繼承關(guān)系等;

通過查找Driver和Load來定位信號(hào)的傳播通路(這個(gè)是用的最多的);

通過Filter來分類查看當(dāng)前文件包含的輸入輸出信號(hào)、參數(shù)、變量等;

通過查找來定位某一個(gè)module例化出來的所有模塊;

原理圖和狀態(tài)機(jī)跳轉(zhuǎn)圖可以有限地幫助你理解代碼行為;

配合波形文件查看各種信號(hào)隨時(shí)間變化的行為;

調(diào)試工具的功能還有很多,具體可以查看各個(gè)工具的官方介紹和培訓(xùn)視頻。

方法5:SVA斷言在調(diào)試中的應(yīng)用

概述:SystemVerilog Assertion(斷言)主要用于驗(yàn)證設(shè)計(jì)的行為,并且可以提供功能覆蓋率信息。Assertion可以應(yīng)用于兩種不同的驗(yàn)證方法中,一種是在動(dòng)態(tài)仿真中去動(dòng)態(tài)地檢查各個(gè)既定屬性(property)是否滿足,另一種測試用于Formal驗(yàn)證工具去證明設(shè)計(jì)是否符合規(guī)范。

作用:如果你剛接觸,可以把斷言簡單理解成checker或者monitor,它指的是在設(shè)計(jì)中嵌入一些工程師根據(jù)待測特性自行定義的一些屬性,仿真的時(shí)候仿真工具會(huì)去判斷這些屬性是否成立,以此來判斷某個(gè)特性是否實(shí)現(xiàn)正確。SVA在本文中作為調(diào)試的方法來介紹,就是因?yàn)閿嘌钥梢詭椭覀儽O(jiān)測屬性,為我們報(bào)出來哪些時(shí)刻行為正常、哪些時(shí)刻行為異常,且這些行為可以是有時(shí)序的!

分類:在SystemVerilog中,斷言大致可以分為兩類:立即斷言(immediate assertion)和并發(fā)斷言(concurrent assertion)。立即斷言是基于仿真事件(simulation event)的,當(dāng)它被執(zhí)行到的時(shí)候就會(huì)立即對多定義的屬性做出判斷并給出結(jié)果;而并發(fā)斷言是基于時(shí)鐘的,斷言的評估(evaluate)發(fā)生在時(shí)鐘邊沿,這也使得并發(fā)斷言具有監(jiān)測的能力,這也是下面要主要介紹的。

結(jié)構(gòu):斷言的具體實(shí)現(xiàn)依賴于更基礎(chǔ)的元素,比如sequence和property。Sequence是最底層的元素,它可以復(fù)用和嵌套。Sequence可以用來定義簡單的布爾表達(dá)式,也可以用來描述多周期的時(shí)序行為。Property則可以實(shí)現(xiàn)跟sequence一樣的內(nèi)容,也可以通過組合不同的sequence來構(gòu)造更加復(fù)雜的時(shí)序行為。為了規(guī)范化,建議將嵌入的時(shí)鐘信號(hào)@(posedge clk)放在property這一層,而將sequence跟時(shí)鐘獨(dú)立開來,方便基礎(chǔ)sequence的復(fù)用。

調(diào)度:SystemVerilog的仿真基于事件驅(qū)動(dòng)模型,事件的調(diào)度機(jī)制在SV語言標(biāo)準(zhǔn)中有明確說明。該調(diào)度機(jī)制將每個(gè)仿真時(shí)刻(time slot)再劃分成多個(gè)region,如下圖所示,每個(gè)region都有自己明確的操作。仿真調(diào)度算法的確定,可以使得仿真環(huán)境跟DUT交互時(shí)顯示出同步的效果。其中跟SVA相關(guān)的region有Preponed、Observed和Reactive。在Preponed中,SVA會(huì)對有關(guān)聯(lián)的變量完成采樣;在Observed中,多有的property完成評估,即判斷斷言描述是否成立;在Reactive中,執(zhí)行斷言評估結(jié)果需要采取的對應(yīng)的操作。

59090ac6-d247-11ed-bfe3-dac502259ad0.png

應(yīng)用:斷言的應(yīng)用主要可以分成四個(gè)步驟:1、構(gòu)造基礎(chǔ)布爾表達(dá)式;2、構(gòu)造sequence序列;3、構(gòu)造斷言屬性property;4、將屬性代碼插入或綁定(bind)到待測模塊中。SVA提供了一些好用又強(qiáng)大的功能:判斷信號(hào)邊沿和狀態(tài)、添加延時(shí)來構(gòu)造信號(hào)時(shí)序行為、支持構(gòu)造不定周期的時(shí)序窗口、判斷過去的信號(hào)狀態(tài)、支持?jǐn)嘌缘倪壿嬤\(yùn)算等等,本文篇幅顯然是不夠的了。

方法6:軟件調(diào)試方法的借鑒和應(yīng)用

這一節(jié)的內(nèi)容更像是討論,有哪些軟件開發(fā)中用到的調(diào)試方法,或者問題定位策略是可以借鑒過來應(yīng)用到芯片驗(yàn)證中的。

有個(gè)前提需要明確的是,硬件仿真始終是基于事件驅(qū)動(dòng)的程序執(zhí)行過程,盡管仿真調(diào)度機(jī)制簡潔明了,但往往待測設(shè)計(jì)規(guī)模龐大(具體表現(xiàn)為硬件行為具備并行性質(zhì),一個(gè)時(shí)鐘信號(hào)的翻轉(zhuǎn)事件關(guān)聯(lián)著成千上萬的信號(hào)動(dòng)作),所以硬件仿真的運(yùn)行速度會(huì)非常的慢,這是跟單純軟件程序的一個(gè)顯著區(qū)別。

運(yùn)行速度上的差異帶來了調(diào)試方法上的一些不同。軟件調(diào)試中交互式的操作非常多,比如解釋執(zhí)行的腳本(比如Python)不需要編譯就可以馬上得到執(zhí)行的結(jié)果,又比如基于斷點(diǎn)的調(diào)試可以非常容易地檢查變量值和堆棧跟蹤。反觀硬件調(diào)試,工程師很難快速地知道在哪里設(shè)置斷點(diǎn),往往需要反復(fù)的嘗試,這會(huì)浪費(fèi)掉很多時(shí)間。因此硬件的調(diào)試更多依賴于信息的導(dǎo)出,其形式通常是仿真日志和波形文件。

如何提高硬件調(diào)試的交互性可能是軟件調(diào)試帶來的啟示,有這么一些不成熟的想法,比如是否可以增加調(diào)試信息(代碼、波形和仿真日志)之間的關(guān)聯(lián),實(shí)現(xiàn)自動(dòng)化跳轉(zhuǎn);是否可以增加工具對代碼的理解或者記錄調(diào)試過程來進(jìn)行自動(dòng)化分析;是否可以在增量編譯的概念上實(shí)現(xiàn)增量仿真;等等等等。






審核編輯:劉清

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

    關(guān)注

    4

    文章

    587

    瀏覽量

    27202
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    384

    瀏覽量

    59534
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84111
  • Verilog語言
    +關(guān)注

    關(guān)注

    0

    文章

    113

    瀏覽量

    8192
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    188

    瀏覽量

    12208

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    STM32調(diào)試過程中常見的問題及解決方法

    一、調(diào)試STM32程序時(shí),某些標(biāo)志位被調(diào)試軟件意外清除的問題 在調(diào)試過程中,使用調(diào)試軟件的寄存器或存儲(chǔ)器顯示窗口,可以很方便地查看外設(shè)寄存
    發(fā)表于 01-22 16:01

    電子書:電源研發(fā)過程中常見的問題

    `本電子書主要講解電源研發(fā)過程中常見的問題及處理辦法,其中包括電源系統(tǒng)開機(jī)工作不正常、低溫不開機(jī)、電源嘯叫問題、帶負(fù)載能力差問題等問題的原因及解決辦法,還羅列了四種開關(guān)電源常見的故障情況及解決方法
    發(fā)表于 02-20 14:40

    12種js中常用到的循環(huán)遍歷方法介紹

    js中常用到的12中循環(huán)遍歷的方法
    發(fā)表于 06-26 09:26

    STM32調(diào)試過程中常見的問題有哪些

    STM32調(diào)試過程中常見的問題及解決方法一、 在“Debug選項(xiàng)卡”下設(shè)置好仿真器的類型后,下載程序時(shí)卻提示“No ULINK Device found.” 解決辦法: Keil MDK默認(rèn)
    發(fā)表于 08-06 06:12

    平衡小車在移植過程中常見的問題有哪些?

    平衡小車在移植過程中常見的問題有哪些?
    發(fā)表于 11-10 06:19

    在嵌入式開發(fā)過程中常用的庫函數(shù)有哪些

    在嵌入式開發(fā)過程中常用的庫函數(shù)有哪些?有何優(yōu)勢?
    發(fā)表于 02-25 07:07

    模擬電路中常用檢測儀器及測試方法的研究

    模擬電路中常用檢測儀器及測試方法的研究介紹了 模擬電路 中常用檢測儀器的性能特征以及在電路故障診斷中儀器的測試方法。在電路故障檢測中,正確的
    發(fā)表于 07-24 11:46 ?101次下載

    Vivado使用技巧:debug仿真設(shè)計(jì)的三種調(diào)試方法

    源代碼級(jí)別調(diào)試 Vivado Simulator提供了在仿真過程中debug設(shè)計(jì)的特性,通過為源代碼添加一些可控制的執(zhí)行條件來檢查出問題的地方??偟膩碚f有三種調(diào)試
    的頭像 發(fā)表于 12-29 15:57 ?1.5w次閱讀
    Vivado使用技巧:<b class='flag-5'>debug</b>仿真設(shè)計(jì)的三種<b class='flag-5'>調(diào)試</b><b class='flag-5'>方法</b>

    shell腳本常用調(diào)試方法介紹

    軟件、配置編譯環(huán)境,可以說使用起來非常的方便,但是它在調(diào)試方面常常令人頭大,本文主要介紹shell腳本常用調(diào)試方法
    的頭像 發(fā)表于 09-01 10:43 ?3168次閱讀

    FPGA調(diào)試中常用的TCL語法簡介

    使用Jtag Master調(diào)試FPGA程序時(shí)用到tcl語言,通過編寫tcl腳本,可以實(shí)現(xiàn)對FPGA的讀寫,為調(diào)試FPGA程序帶來極大的便利,下面對FPGA調(diào)試過程中常用的tcl語法進(jìn)行介紹
    的頭像 發(fā)表于 02-19 19:44 ?2616次閱讀

    Fusion Debug調(diào)試系統(tǒng)的各項(xiàng)技術(shù)、指標(biāo)介紹

    ,極大地提升了工作效率。 下面我們將詳細(xì)介紹昭曉Fusion Debug ? 多種強(qiáng)大的技術(shù),包含提供快速源代碼解析、波形查看、設(shè)計(jì)原理圖探索和覆蓋率數(shù)據(jù)分析,并展示各項(xiàng)性能指標(biāo)。 ? 1、完整的波形調(diào)試解決方案 ? ? ? ?
    的頭像 發(fā)表于 05-23 17:06 ?1149次閱讀

    FPGA設(shè)計(jì)過程中常用的FIFO

    無論何時(shí),在復(fù)雜的 FPGA 設(shè)計(jì)過程中,都不可避免地需要在模塊之間發(fā)送數(shù)據(jù),實(shí)現(xiàn)這一點(diǎn)的常用的是 FIFO。
    的頭像 發(fā)表于 09-20 09:10 ?2346次閱讀

    單片機(jī)常用調(diào)試方法

    在單片機(jī)程序調(diào)試過程中,串口打印調(diào)試方法是非常重要的手段,在使用串口調(diào)試時(shí),我們更多的是使用printf。但是下面我們不介紹printf,
    的頭像 發(fā)表于 04-04 14:58 ?4603次閱讀

    封裝過程中常用的檢測設(shè)備

    程序的質(zhì)量和穩(wěn)定性。本文將詳細(xì)介紹在封裝過程中常用的檢測設(shè)備及其作用。 第一、編譯器 編譯器是將源代碼翻譯成目標(biāo)代碼的軟件程序,編譯器在封裝過程中是不可或缺的。在編寫代碼時(shí),編譯器會(huì)檢查代碼的語法和邏輯錯(cuò)誤,防
    的頭像 發(fā)表于 08-24 10:42 ?797次閱讀

    gis中常用的空間分析方法

    將詳細(xì)介紹GIS中常用的空間分析方法,包括空間插值、緩沖區(qū)分析、空間統(tǒng)計(jì)、領(lǐng)域分析、網(wǎng)絡(luò)分析和多標(biāo)準(zhǔn)決策等。 一、空間插值 空間插值是一種將有限數(shù)量的點(diǎn)數(shù)據(jù)轉(zhuǎn)換為連續(xù)表面的方法。常見的
    的頭像 發(fā)表于 02-25 13:44 ?4123次閱讀