雙向飛碟射擊與設計調(diào)試
縱觀歷史,電路內(nèi)仿真 (ICE) 模式是使用硬件仿真器的第一種方式,也是迄今為止最為流行的方法。在這種模式中,需將硬件仿真器插入物理目標系統(tǒng)上的插孔,以此代替待開發(fā)的芯片,從而利用實時數(shù)據(jù)支持運用和調(diào)試硬件仿真器內(nèi)部映射的待測設計(DUT)。
然而,這種公認的能夠引人注目的驗證方法卻存在一系列問題,其中最嚴重的問題便是它的隨機性。也就是說,當調(diào)試DUT時,它缺少確定性或者可重復性。為了更好地理解這一點,我們可以做個形象類比。
讓我們來看看雙向飛碟射擊。這是一種射擊運動,在這項運動中,會將碟靶從靶場上扔出以模擬鳥類的飛行狀態(tài)。我們可以增加碟靶的扭轉(zhuǎn)方向,增加它的難度。讓射手戴副眼鏡,以限制他的視野范圍,這樣射手必須“猜測”碟靶的軌跡,因為碟靶的每一次軌跡都不一樣。而驗證工程師在 ICE 模式中調(diào)試芯片設計時,恰恰也會遇到這樣的難題。要在 ICE 模式中找出一個錯誤就像在狹窄的視野中試圖擊中碟靶一樣困難。
圖 1 要在視野受限的情況下進行雙向飛碟射擊對射手來說是一項巨大的挑戰(zhàn)。
我們不斷總結(jié)過去的經(jīng)驗,持續(xù)改進。這二十多年來,不斷有調(diào)查發(fā)現(xiàn)設計驗證消耗的時間大約占了設計周期的 70% 左右。往好的方面看,設計驗證是一項活動,它或多或少地可以根據(jù)預測事先進行安排。但是設計調(diào)試則是一項追擊,您無法事先對其進行規(guī)劃。理由很簡單,錯誤往往會因為未知的原因出其不意地出現(xiàn),而且您也無法預測它出現(xiàn)的時間和位置。
可以想象,在利用大量嵌入式軟件和硬件進行片上系統(tǒng) (SoC) 設計時,總有些錯誤會隱藏在設計的某個未知角落里,無論是在硬件中還是在軟件中,而且這些錯誤可能只有在長期執(zhí)行后方能被發(fā)現(xiàn)。在一個錯誤被發(fā)現(xiàn)之前,很有可能已歷經(jīng)了數(shù)十億的時鐘周期。
更讓人沮喪的是,調(diào)試具有隨機性,這就要求在發(fā)現(xiàn)錯誤之前要不斷地重復運行。如果錯誤不具備確定性,也就是說,其可能不會在后續(xù)運行中重復出現(xiàn),那么尋找錯誤的過程將會是一場噩夢。
關(guān)鍵未知因素
如果將其應用于數(shù)億門級的設計,而這些設計需要經(jīng)過數(shù)十億個長序列驗證周期的調(diào)試,那么可能存在三個關(guān)鍵未知因素:地點、時間和事由。這三個因素足以延誤整個測試計劃的進度,即便該計劃已經(jīng)過深思熟慮。在一個競爭激烈的市場中,若一項新產(chǎn)品延期三個月上市,那么它將造成 33% 的潛在總收益損失。這就足以說明驗證解決方案的價值所在了。這時我想到了硬件加速仿真。硬件仿真器憑借其極速性能加快執(zhí)行和調(diào)試的速度。事實上,它們的快速執(zhí)行速度便是它們的設計初衷。
這個概念很簡單,即對照需要插入待開發(fā)芯片的實際物理目標系統(tǒng)來檢查 DUT。無需再編寫測試矢量或者測試激勵。趕緊在實際應用中全面施行這一流程吧。想必,要在模糊的設計區(qū)域里尋找令人厭煩的隱匿錯誤,實際應用比任何軟件測試平臺都更為有效,對吧?
在線調(diào)試問題
結(jié)果證明,閃閃發(fā)光的并非都是金子。盡管它的功能非常誘人,但要在 ICE 模式中調(diào)試芯片設計會顯得過于繁瑣而又令人沮喪,究其原因,主要有兩點。第一點,硬件仿真器必須要與目標系統(tǒng)相連。就此而言,由于硬件仿真器的速度可能比物理目標系統(tǒng)慢上三個數(shù)量級,因此就需要有一個速度適配器,可以調(diào)解物理目標系統(tǒng)較快的時鐘速度,使之與硬件仿真器的相對較慢的速度相匹配?;旧?,該適配器是一個先進先出 (FIFO) 的寄存器,它通常會通過犧牲部分功能和準確性來換取性能。同時,PCIe 或以太網(wǎng)等高速協(xié)議也將會減少,以應對 FIFO 內(nèi)在能力的局限性。
適配器和連接電纜增加了設置的物理關(guān)聯(lián)性和弱點,同時也對系統(tǒng)的可靠性產(chǎn)生了不利影響。此外,設置僅局限于每個協(xié)議一個測試實例,且不允許存在特殊用例測試或任何“假設”分析。最后,如果沒有人在現(xiàn)場提供幫助,將仿真器插入和拔出目標系統(tǒng),則無法遠程訪問ICE 模式。
第二點,也是最容易被人低估的一個缺點,便是它缺少確定性行為。這一特性會使目標系統(tǒng)用以驗證設計的方法變得折中,還會延長在ICE模式下發(fā)現(xiàn)錯誤的時間。在 ICE 模式中,使用硬件仿真器追蹤 DUT 的錯誤,需要在特定事件被觸發(fā)后,以最高速捕捉設計中每個寄存器的行為。在基于定制硅的硬件仿真器中,無需編譯連接程序,就可將每個設計寄存器連接到追蹤存儲器中。在運行時間方面,驗證工程師可進行權(quán)衡折衷,即使用追蹤時鐘周期的數(shù)量來交換需要追蹤的設計寄存器的數(shù)量。
在商用的、基于FPGA的硬件仿真器中,只有少量的設計寄存器可以通過編譯程序連接到追蹤存儲器上。增設或者更換追蹤寄存器就要求重新編譯設計,同時大幅減少設計/迭代時間。利用這兩種硬件仿真器,用戶可以通過減少被追蹤的寄存器的數(shù)量來增加追蹤深度,反之則亦然。
圖 2 追蹤窗口(周期 X 信號)受邏輯分析儀中內(nèi)存容量的限制。
因此,用戶可以不再為了找到自己感興趣的調(diào)試窗口和轉(zhuǎn)儲正確的波形而進行多輪——很可能是數(shù)百次的運行。但是真正的問題是,每次運行都可能會在不同的時間點發(fā)現(xiàn)錯誤——相同的錯誤;甚至更糟糕的是,還可能因為不可預測的行為而發(fā)現(xiàn)不了任何錯誤。還記得雙向飛碟射擊的例子嗎?
來看下使用第三方 IP 填充 SoC的例子。屢次測試表明,當 IP 核單獨工作時,其能起到作用;但當它內(nèi)嵌于 SoC時,卻變得完全無效。利用 ICE 模式對深埋于 DUT 的 IP 進行調(diào)試可能會導致驗證團隊沒日沒夜地加班。
圖 3 連續(xù)運行時,會在不同的時間/區(qū)域內(nèi)顯示相同的設計錯誤或者根本不顯示任何設計錯誤。
值得高興的是,隨著基于事務處理的協(xié)同建模技術(shù)的出現(xiàn),硬件仿真領(lǐng)域也發(fā)生了翻天覆地的變化。通過移除物理目標系統(tǒng),并使用虛擬測試環(huán)境進行代替,所有問題都消失不見了。這種虛擬測試環(huán)境是通過 C++/SystemVerilog 從高抽象層次進行描述,并通過事務處理器與 DUT 相連。
測試平臺可用性
可以在很短的時間內(nèi)通過 SystemVerilog 創(chuàng)建高層次測試平臺,這樣不僅符合傳統(tǒng)的 Verilog 的要求而且錯誤也較少。事務處理器都有現(xiàn)貨可買,無需定制。還有,整個測試環(huán)境將目標鎖定在多媒體、網(wǎng)絡和存儲等特定的市場應用程序上,涵蓋了虛擬測試程序和事務處理器,而這些都可在 Mentor Graphics 旗下支持其 Veloce2 硬件仿真平臺的 VirtuaLAB 品牌中找到。
更重要的是,如今的設計激勵是具確定性的,因此可以更快完成調(diào)試。事務處理器可以實現(xiàn)從HDL軟件仿真到硬件仿真的平穩(wěn)過渡。時鐘可以停止,也可以進行單步調(diào)試;可以進行情境“假設”分析;還可以對特殊用例進行建模。如今,工程師可以通過編寫寄存器傳輸級 (RTL) 代碼來設計芯片,而不需要利用實驗室設備來測試他們的設計。目前,遠程訪問已經(jīng)實現(xiàn)了而且會越來越普及。
將 SystemVerilog 斷言與事務處理器結(jié)合,驗證工程師們可以利用無限的調(diào)試功能監(jiān)控他們的設計,并且不會降低速度。如此,工程師們就可以盡情設計,不再會受到內(nèi)存空間或者時間的限制,然后盡快消除錯誤。自此以后,工程師與視野受到限制的雙向飛碟射擊比賽的選手將無任何共通之處。