操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    摘要:與其他硬件驗證語言( ,HVL)(例如 e)不同,在 (SV)模擬中是不原生支持交互調試功能的。在本文中,我們將介紹利用直接編程接口(SVDPI)[2]實現針對UVM [1]的交互式調試庫。從根本上講,這實現了模擬運行時的高級交互式調試。該庫的功能包括:1)通過UVM寄存器抽象層寫入或讀取寄存器,2)在任何序列發生器上創建,隨機化,初始化和啟動UVM序列,以及3)調用用戶定義的SV函數或任務從交互式調試提示符。我們還將介紹一種調試和回歸方法,概述了如何加快調試速度并最大程度地減少回歸運行時間的最佳實踐方式。初步結果表明,使用交互式調試庫可顯著減少調試周轉時間和回歸運行時間。用戶可以在幾秒鐘內重新測試不同的場景,而無需等待幾分鐘或幾小時讓測試臺從零時開始重新編譯,制作和重新運行仿真。庫作為開源項目可在 [3]中獲取。關鍵詞:, , UVM, SV-DPI, 交互(), 調試(debug),開源 (open )1.引言使用其他編程語言(例如 e [4]和 / [5])實現驗證框架的用戶已經習慣了運行時靈活的交互式調試。

    用戶可以將模擬運行到某個時間點,暫停模擬,激活調試提示符,然后調用任何中的函數來更改測試方案的行為,然后再繼續運行。在中,由于語言的限制,一旦編譯了一個測試平臺,用戶在仿真過程中幾乎無法控制測試場景。當前,在仿真運行期間,用戶僅能在仿真環境中使用差異種子或poke/force信號。設想以下情形:用戶需要運行長達幾小時的長時間模擬。在模擬過程中,測試平臺檢查器會報告錯誤。如果用戶需要更改激勵以調試問題,則他們必須更新SV代碼,重新編譯測試平臺,并等待很長時間才能再次發現錯誤。借助交互式調試庫,用戶可以嘗試不同的調試方案而無需重新啟動模擬。他們可以通過寄存器讀取來查詢設備狀態,可以通過寄存器寫入來嘗試新的設備配置,通過執行更高優先級的新UVM序列來更改由測試平臺產生的激勵,或者可以調用任何測試平臺的函數來幫助診斷問題。他們可以嘗試數十種不同的情況,并在幾分鐘而不是幾小時內找出錯誤。調試周轉時間的大幅度減少可提高生產率,并且將時間用于隔離錯誤,而不是等待模擬編譯/運行。M. 編寫了 [6]進行了較早的嘗試,以通過引入命令行調試接口來支持UVM中的交互式調試。

    的最大缺點是,每個序列都需要一個包裝器類。每個包裝器類都是手動創建的,或者由預處理腳本在兩個階段中生成的-解決方案既繁瑣又容易出錯。此外,作者沒有提供的源代碼,并且本文中的描述沒有包含足夠的詳細信息,以使用戶可以輕松地重新實現該軟件包。J. 和B. 編寫了RESSL [7]進行另一種嘗試,以實現讀取,評估,啟動序列循環。它的實現對現有的測試平臺具有很高的侵入性。RESSL需要UVM的被黑版本。讀取,評估循環中支持的所有序列必須派生自公共基類并手動注冊到測試臺中的序列注冊表中。這些要求使得在大規模生產項目中采用非常困難,除非管理層強烈要求在整個項目中推動這些變化。本文介紹的UVM交互式調試庫()是獨立開發的,沒有[6] [7]的先驗知識。庫支持的所有函數,并間接支持RESSL的所有函數,但功能更多。作者希望將的強大調試功能和靈活性引入SV-UVM,以便多個SV測試平臺環境可以從中受益。庫可從 [3]作為開源項目獲得。設置庫很容易且無干擾:只需下載代碼,然后將.sv和.c文件與一起編譯即可。

    用戶不必經歷復雜的測試臺連接過程或UVM源代碼中的任何補丁。只需調用一個簡單的函數即可初始化對象。2.UVM交互式調試庫綜述a.核心邏輯交互式調試庫的核心非常簡單。模擬器運行時,SV缺少任何語言語法來讀取用戶的輸入。幸運的是,SV可以通過SV-DPI接口調用C代碼,因此可以在C代碼的域中讀取用戶輸入嘗試還原程序包出錯,然后將其傳遞回SV域。在SV代碼中,中的()函數將提示打印到屏幕上,等待用戶輸入行,然后將輸入的行作為字符串返回。在C代碼中,最簡單的實現是從調用C內置的()函數,以從標準輸入中讀取一行。在模擬器以GUI模式運行的情況下,在Shell和GUI之間來回切換以輸入調試命令非常不方便。或者,可以編譯C代碼以通過模擬器的Tcl提示符讀取用戶輸入。SV代碼

    C代碼

    一旦測試平臺可以讀取模擬中的用戶輸入,其余的操作就非常簡單了。在UVM中創建的所有對象和組件都可以通過其名稱(即文本字符串)來訪問。調試庫實現了命令行解析器,以處理用戶輸入,使用全名查詢對象指針,然后使用用戶提供的參數調用指定的任務或函數.b. 啟動調試提示符有兩種方法可以激活交互式調試提示符。第一種是在SV代碼中嵌入函數調用對象。對象是單例類,因此可以在測試平臺或測試用例中的任何位置使用它,而不必擔心需要跟蹤不同的實例。用戶可以將()函數包裝在if-else語句中,以指定任何觸發條件,例如在測試平臺檢測到DUT錯誤或接收到某些事件標志時觸發調試提示符。()函數帶有一個調試級別的參數,該參數允許用戶通過UVM命令行參數+ = 來控制何時激活調試提示符。僅當仿真中的調試級別高于()函數中指定的調試級別時,調試提示符才會激活,這與UVM報告的詳細程度類似。觸發調試提示符的第二種方法是暫停模擬,然后從Tcl提示中調用的VPI系統函數。SV代碼

    Tcl命令

    c. 內務調試命令調試提示符支持以下內置調試命令,以提供基本的內務管理功能。

    表1 內務調試命令

    命令

    描述

    help []

    顯示幫助信息。不帶參數,則列出所有可用指令;否則,顯示指定指令的幫助信息。

    離開調試指示并繼續模擬。

    pause

    暫停模擬并切換到模擬器的Tcl腳本。

    還原nuget程序包出錯_嘗試還原程序包出錯_戰網嘗試創建目錄出錯

    run

    模擬器運行指定的時間,隨后返回調試指示。

    . [list]|clear|save

    列出用戶之前輸入的全部指令;清除歷史記錄;保存歷史記錄到指定文件。

    #

    重復指令歷史記錄里的指定行。

    read

    讀取一個指令文件。

    [-path

    ]

    保存檢查點的快照。

    d. 寄存器調試命令在執行寄存器操作之前,用戶必須通過傳入的根來初始化庫,以設置調試命令使用的相對分層全名。SV代碼

    調試提示符支持以下內置的相關調試命令。

    表2 寄存器調試命令

    命令

    描述

    嘗試還原程序包出錯_戰網嘗試創建目錄出錯_還原nuget程序包出錯

    通過地址寫寄存器。

    通過地址讀寄存器。

    通過的全名寫寄存器。

    通過的全名讀寄存器。

    通過的全名寫寄存器的一個域。

    通過的全名讀寄存器的一個域。

    e. 序列調試命令調試提示符支持下表中列出的與內置相關的調試命令。調試提示符會跟蹤用戶在關聯數組中創建的所有序列和序列項。用戶始終可以使用在創建過程中指定的名稱來引用創建的序列或序列項。序列調試命令在UVM序列基類上運行-沒有動態類型檢查。如果序列或序列項與序列發生器的所需數據類型不匹配,則模擬器可能會出現致命錯誤。調試提示符使用的序列發生器路徑是序列發生器相對于的完整層次結構名稱。序列或序列項可以在阻塞模式下或在新線程中運行。在阻塞模式下,模擬時間會提前直到序列或序列項完成,然后返回調試提示符。在新線程中運行時,序列或序列項將在fork..塊內的后臺運行。分派命令后,它將返回到調試提示符。

    表3 序列調試命令

    命令

    描述

    列出在調試提示符中創建的序列。

    還原nuget程序包出錯_嘗試還原程序包出錯_戰網嘗試創建目錄出錯

    創建新的序列。

    隨機化調試指示符中創建的序列。

    [=...]

    設置調試指示符中創建序列中的域值。

    [-

    ] [- ]

    在序列發生器中啟動序列。

    終止一個運行的序列。

    列出調試指示器中出創建的所有序列項。

    創建一個新的序列項。

    隨機化調試指示符中創建的序列項。

    [=...]

    設置調試指示符中創建序列項的值

    嘗試還原程序包出錯_還原nuget程序包出錯_戰網嘗試創建目錄出錯

    停止序列發生器中的全序列。

    [- ]

    在序列發生器中執行一個序列項。

    f. 用戶自定義調試命令除了庫附帶的內置調試命令之外,用戶還可以通過創建調試命令回調函數來創建自定義調試命令,用戶可以在其中調用測試平臺中的任何函數或任務。用戶不必顯式注冊自定義調試命令。唯一需要的設置是創建調試命令回調對象。debug命令回調類的內置構造函數會自動將調試命令注冊到單例對象。在調試命令回調基類的構造函數中處理到調試提示的命令注冊。以下代碼片段顯示了如何定義自定義調試命令的示例。SV代碼

    調試提示符中的輸入參數作為字符串列表傳遞到回調對象中。為了幫助用戶在調用函數/任務之前解析參數列表,庫帶有內置的參數解析器。參數解析器支持兩種參數格式,tcl中用破折號選項格式(-值)和SV命令行中用加參數格式(+ = value)。在SV中,它還支持用'b /'o /'h表示指定的bin,oct或hex值從字符串轉換為整數值。下表列出了參數解析器文本處理功能。表4 序列調試命令

    命令

    描述

    (ref args[$], ref [])

    從參數列表中提取破折號選項和加號選項,并將它們存儲在關聯數組中。

    ( args[$], flag)

    檢查參數列表中是否存在選項標志或沒有值的選項。

    ( args[$], ref vals[]

    在參數列表中提取鍵-值對, = 。

    int ( s)

    將字符串轉換為整數(支持SV bin / dec / oct / hec表示法)。

    qint ( s)

    還原nuget程序包出錯_戰網嘗試創建目錄出錯_嘗試還原程序包出錯

    將字符串轉換為整數列表。整數列表由逗號分隔。它還支持 .. 格式的整數范圍。

    ( [], key, ="")

    獲取指定選項的值,并以字符串形式返回。如果找不到該選項,則返回默認值。

    int ( [], key, int =0)

    獲取指定選項的值,并以整數形式返回。如果找不到該選項,則返回默認值。

    qint ( [], key, qint ={});

    獲取指定選項的值,并以整數列表形式返回。如果找不到該選項,則返回默認值

    g. Tcl腳本整合調試提示符非常適合以交互方式嘗試不同的測試方案。如果多次使用同一組調試命令嘗試還原程序包出錯,則加載命令文件可以節省鍵入時間。但是,調試提示符沒有任何內置的編程元素-它只能順序執行一個接一個的命令。換句話說,調試提示符本身并不是圖靈完整的語言。幸運的是,我們已經在模擬器中以Tcl提示符的形式提供了功能齊全的編程環境。庫創建Tcl包裝函數,該函數調用調試提示符,傳入并執行一個調試命令,然后返回到Tcl提示調試命令的返回值。庫與模擬器的Tcl提示一起將UVM轉換為腳本語言。Tcl提示符

    請注意,Tcl腳本集成仍處于試驗階段。作者僅嘗試在簡單的if-else分支和控制循環中運行調試命令。Tcl提示符實際上是在單個線程下運行所有程序。如果有多個線程同時調用多個調試命令,那么庫的運行情況看起來將很有趣。但是,Tcl從未計劃成為一種嚴格的多線程安全編程語言,那么為什么我們不簡單地在本機SV代碼中實現那些復雜的場景呢?h. 測試平臺示例庫帶有一個測試平臺示例。我們選擇了每個UVM發行版附帶的 / / codec示例,以演示設置庫有多么容易。我們選擇此測試平臺作為示例,因為它很簡單,并且驗證社區可以很好地理解,但是它提供了功能齊全的測試平臺的框架。它具有APB寄存器接口和簡單的串行VIP序列。集成非常簡單。除了要在示例中添加額外的信息消息之外,以突出顯示當前正在運行的調試命令,它僅需要三行代碼。用戶可以在庫中運行demo.sh以查看實際的調試提示。該示例還具有以下簡單的調試命令文件,以演示最常用的功能。debug.cmd

    3.調試和回歸方法一旦我們建立了更改SV中已編譯模擬的行為的能力,就可以采用之前論文[8]中概述的經過驗證的調試方法,以加快調試周轉時間并最大程度地減少回歸運行時間。圖1說明了庫的三個最常用的模型。

    圖1 交互式調試方法示例

    首次使用模型類似于傳統的調試流程,即在模擬器的測試臺中設置斷點或在實驗室的后硅調試環境中設置軟裝中的斷點。一旦在測試平臺中檢測到錯誤,它將暫停模擬并觸發調試提示符。用戶可以交互地讀取或寫入寄存器和/或注入簡單的激勵來診斷問題。現在通過執行更高級別的調試命令來代替以前手動查看和peek/poke RTL信號所完成的工作,從而使驗證工程師免于在Tcl中處理RTL信號的繁瑣工作。有時,使用現有模擬中的波形并僅在故障點之后對設計進行調整可能無法提供足夠的信息來根源導致問題。可能需要工程師嘗試不同的極端情況來對錯誤進行定位。如果錯誤發生在模擬運行了幾個小時后,那么從零時開始重新運行模擬以重現錯誤可能會耗費工程師一整天的時間。典型的故障需要多次迭代才能隔離并正確識別錯誤,因此在每次迭代中重新運行仿真都是不可接受的,并且效率極低。我們需要復制故障條件,并在更短的時間內嘗試不同的激勵。第二個使用模型將庫與模擬器的快照保存/恢復功能結合在一起。在模擬運行中,測試臺將定期(例如每30分鐘)保存一個檢查點快照。其目標是,每當發生故障時,用戶就可以快速還原最后保存的檢查點,因為它最多需要30分鐘來復制發生故障場景。

    將模擬倒回保存的檢查點后,用戶可以使用庫通過啟動新序列修改現有激勵來交互地嘗試各種“假設”方案。用戶還可以加載命令文件并以批處理模式運行仿真,以并行測試不同的場景,而不必在交互式提示中手動鍵入調試命令。第三種使用模型采用批處理模式調試應用程序,并將其應用于例行回歸。我們觀察到,在我們的項目中,大多數測試用例花費了大量時間來配置設備并等待設備穩定下來,然后我們才能開始注入有趣的流量模式來加強不同極端情況的測試。如果我們必須使用相同的啟動順序來測試十種不同的流量模式,那么過去,我們必須從零時開始運行模擬十次。借助庫和命令文件,我們可以在設備穩定后保存檢查點,然后加載不同的命令文件以擴展基本測試用例并更改流量模式。例如,我們項目中的初始化序列平均至少消耗25%的模擬時間,因此使用命令文件將我們的回歸速度提高25%。4.未來的發展我們主要在 IES模擬器上實現并測試了庫。盡管我們從未嘗試過,但大多數代碼都與模擬器無關,并且可以在其他模擬器上進行部署。但是,有一小部分代碼依賴于對特定于模擬器的Tcl命令的函數調用。這些功能-例如從tcl提示符觸發調試提示符,tcl程序以獲取debug命令的返回值,保存模擬的檢查點快照以及在調試提示符創建的序列內設置UVM字段的值-在當前版本中不能在其他模擬器上使用。

    我們計劃在將來支持三大模擬器。 集成的基礎已經存在于現有代碼中-SV域可以通過SV-DPI C代碼與中的Tcl域進行通信。剩下的工作是用 Tcl命令替換ncsim Tcl命令。但是,作者無法訪問 VCS模擬器的Tcl提示符。如果VCS專家能夠分享他們對Tcl集成的知識并為該項目做出貢獻,將不勝感激。由于與IEEE合作將UVM 1.2改正為IEEE 1800.2標準,因此UVM的新發展目前處于擱置狀態。當UVM愿意接受新的開發時,作者希望將庫貢獻給,并將其納入UVM發行版。如果UVM帶有內置的交互式命令行解析器和一組標準的SV-Tcl接口,則將極大地有益于驗證社區。庫的當前實現側重于對現有測試平臺代碼不侵入,因此它將庫可訪問的數據結構限制為僅在樹層次結構下的以字符串命名的對象。如果庫被用作UVM的一部分,它將允許與帶有自省支持的UVM基類更緊密地集成,并開辟了許多新的可能性,例如用于控制運行階段域的調試命令,精細的序列線程管理和動態函數重載。

    理想情況下,用戶可以從調試提示中調用或中的任何函數。5.總結UVM交互式調試庫易于設置。它是非侵入性的-除了加載程序包文件和調用函數之外,無需更改測試臺。借助庫,我們將典型模擬故障的調試周轉時間減少了90%。運行回歸的總模擬時間減少了25%。交互式調試可增強現有的驗證方法,從而提高驗證工程師的工作效率,降低模擬器許可證的使用成本,并縮短項目進度。致謝作者要感謝他的雇主 對庫開發和本文撰寫的支持。他還要感謝開源項目 [9]提供了庫中使用的一些文本字符串處理代碼。參考文獻[1] , “ (UVM) 1.2 Class ,” 2014.[2] IEEE for – , , and , IEEE Std. 1800-2012, 2013[3] UVM Debug , : [4] IEEE for the e, IEEE Std. 1647-2011, 2011.[5] , , 2016, : [6] M. , “ Line Debug Using UVM ”, [7] J. and B. , “RESSL UVM to the Mat”, [8] H. Chan and B. , “Can You Even Debug a 200M+ Gate ?”,[9] K. , “ Class in Makes Fun Again”,

    原文來自:, 點擊閱讀原文去路科官網下載論文合集,還有更多資料等你來哦

    掃描上圖二維碼可直達課程頁面,馬上試聽

    往期精彩:

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有