Vivado使用技巧(21):模擬中的Debug特性

FPGADesigner發表於2018-08-24

原始碼級別除錯

Vivado Simulator提供了在模擬過程中debug設計的特性,通過為原始碼新增一些可控制的執行條件來檢查出問題的地方。總的來說有三種除錯方法:

1.使用Step逐行除錯

Step命令一次只執行HDL程式碼中的一行,從而驗證和除錯設計。執行模擬後,點選Run->Step或工具欄中的Step可執行該命令。Restart可以將時間復位到TestBench的開始。當前執行的程式碼會高亮顯示並且前方有箭頭指示:
這裡寫圖片描述
執行Step後會開啟與頂層設計單元相關的HDL檔案視窗,在視窗名稱上右鍵->新建水平分組新建垂直分組即可同時檢視HDL和波形視窗。

2.使用斷點(breakpoint)除錯

Step除錯的缺點是在大型設計中很繁瑣且花費大量時間。設計者可以在原始碼中自行指定執行停止的點,稱為斷點。執行模擬時,模擬器遇到斷點就會暫停。可設定斷點的行前有一個空心圈,點選可設定斷點,轉變為實心圈。
這裡寫圖片描述
對應的Tcl命令為“add_bp file_name line_number”。模擬除錯過程中,斷點和Step除錯是可以一起使用的。在實心圈上右鍵,或Run選單中點選Delete All Breakpoints可以刪除所有斷點。

3.條件除錯

在設計中新增條件斷點,模擬器檢測到條件為真時就會暫停當前模擬。條件必須用Tcl命令新增,示例如下:

add_condition <condition> <message> #命令模板
add_condition {reset == 1 && clk == 1} {puts “Reset went to high”; stop}
#當clk與reset同時為高暫停模擬,控制檯列印訊息輸出

遇到條件斷點並暫停後,只有等到下一個模擬命令才會繼續執行模擬。


將物件強制到特定值

Vivado Simulator提供了Force功能將訊號、wire或reg強制為某一值,該操作會重寫訊號定義在HDL設計中的行為。考慮如下應用情況:

  • TestBench中沒有對某一訊號進行驅動,可以使用Force功能給予激勵;
  • Debug過程中使用Force糾正錯誤的值,以繼續進行模擬分析。

使用Force Constant、Force Clock、Remove Clock相關命令配置Force功能,而且模擬restart後仍然會保留已經設定了的Force特性。

1.Force Constant功能

該命令會將訊號固定為一個常數值,重寫了其HDL程式碼中的賦值。在Objects視窗或波形視窗中選中某一物件,右鍵->Force Constant,開啟如下視窗:
這裡寫圖片描述
Force value按照value radix選擇的基數設定常數值;設定的值開始於Starting after time offset設定的時間,如果不帶單位則預設為ns;Cancel after time offset設定的時間後會取消應用Force功能。

2.Force Clock功能

該命令會使訊號以一定速率在兩個值之間來回轉換,類似於時鐘訊號一樣(但不侷限於生成時鐘訊號,可以定義任意振盪的值)。在Objects視窗或波形視窗中選中某一物件,右鍵->Force Constant,開啟如下視窗:
這裡寫圖片描述
Leading edge valueTrailing edge value分別指定兩個振盪狀態的值;Duty cyclePeriod設定佔空比和週期。右鍵選單中的Remove Force用來清除設定。靈活使用Force特性可以加快設計模擬的除錯驗證,而不需要修改HDL程式碼。

相關文章