到目前為止,在本博客系列中,我們已經(jīng)討論了 Accellera 便攜式測試和刺激標(biāo)準(zhǔn) (PSS) 的一些基礎(chǔ)知識(shí),以及它如何增強(qiáng)通用驗(yàn)證方法 (UVM) 流程。這是一種非常有效的塊級(jí)驗(yàn)證策略,允許重復(fù)使用現(xiàn)有的驗(yàn)證 IP (VIP) 模型。然而,一旦幾個(gè)設(shè)計(jì) IP 模塊集成在一起,幾乎可以肯定一個(gè)或多個(gè)處理器將成為子系統(tǒng)的一部分。一旦發(fā)生這種情況,就需要一種新的驗(yàn)證策略。
軟件通常代表系統(tǒng)功能的一個(gè)重要方面,它的一部分可能需要包含在驗(yàn)證過程中。能夠按照 UVM 流程的要求直接操作總線,意味著可以進(jìn)行更徹底的測試,而不是在將多個(gè)模塊集成在一起之后的驗(yàn)證重點(diǎn)。您不會(huì)嘗試重復(fù)在每個(gè)塊上單獨(dú)進(jìn)行的驗(yàn)證。相反,您正在嘗試確保模塊之間正確通信并且可以執(zhí)行產(chǎn)品的更高級(jí)別功能。事實(shí)上,一旦處理器和總線協(xié)議在設(shè)計(jì)中固定下來,就不可能訪問連接到總線的每個(gè) IP 塊的所有功能。
在模擬環(huán)境中,每個(gè)處理器都可能由指令集模擬器 (ISS) 或某種其他形式的行為模型來表示。這些可從所有處理器供應(yīng)商和第三方處輕松獲得。這些模型提供了功能準(zhǔn)確性,雖然它們?cè)跁r(shí)間意義上并不完美,但它們通常足以滿足大多數(shù)目的。最重要的是,它們的運(yùn)行速度比寄存器傳輸級(jí) (RTL) 模型快幾個(gè)數(shù)量級(jí),并且已集成到您最喜歡的 RTL 仿真環(huán)境中。
您應(yīng)該在這些處理器上運(yùn)行什么軟件?過去,會(huì)編寫專用測試代碼來以一小套定向測試的形式來測試子系統(tǒng)。經(jīng)驗(yàn)豐富的驗(yàn)證工程師知道開發(fā)這些測試并在硬件發(fā)生變化時(shí)對(duì)其進(jìn)行維護(hù)需要多長時(shí)間。使用 PSS 和測試綜合,這個(gè)問題幾乎變得微不足道。
讓我們不要太快得意忘形了。僅僅因?yàn)槲覀冇幸粭l路徑可以自動(dòng)生成在這些處理器上運(yùn)行的軟件,問題并沒有完全解決,也沒有回答有關(guān)要使用的軟件級(jí)別的所有問題。
嵌入式處理器可以以實(shí)際運(yùn)行的軟件可以訪問的確切方式訪問設(shè)計(jì)中的所有內(nèi)容。我們?yōu)槭裁床恢苯舆\(yùn)行它?這有幾個(gè)原因。首先,生產(chǎn)軟件可能還沒有準(zhǔn)備好。雖然左移運(yùn)動(dòng)試圖推動(dòng)軟件開發(fā),但并不總是可以同時(shí)開發(fā)它們。其次,您不希望您的測試僅限于當(dāng)前版本的軟件對(duì)硬件所做的事情。如果預(yù)計(jì)稍后會(huì)通過軟件更新發(fā)布附加功能怎么辦?如果產(chǎn)品最初發(fā)布時(shí)尚未驗(yàn)證硬件,則可能會(huì)影響您將來添加更新的能力。
這并不意味著您永遠(yuǎn)不應(yīng)該使用任何生產(chǎn)軟件。當(dāng)您接近完成設(shè)計(jì)并且驗(yàn)證接近覆蓋目標(biāo)時(shí),您可能希望使用生產(chǎn)驅(qū)動(dòng)程序、協(xié)議棧的其他一些層,甚至操作系統(tǒng)的元素。例如,Breker 提供了一個(gè)可在測試綜合期間使用的函數(shù)庫。這些功能,例如內(nèi)存管理,構(gòu)成了我們將在以后的博客中討論的多層硬件/軟件接口抽象層的基礎(chǔ)。
在軟件運(yùn)行時(shí)讓測試臺(tái)運(yùn)行是另一個(gè)問題。您如何協(xié)調(diào)子系統(tǒng)或芯片的外部輸入的活動(dòng)?必須有一種方法在處理器和 VIP 之間進(jìn)行通信,以便協(xié)調(diào)活動(dòng)。我們?cè)?Breker 使用 TrekBox 完成了這項(xiàng)工作(參見圖 1)。
圖 1 標(biāo)題:在此示例中,工具協(xié)調(diào)軟件和外部 VIP 之間的活動(dòng)。
TrekBox 使用模擬器的后門內(nèi)存 API 監(jiān)控模擬器中的內(nèi)存。當(dāng)處理器寫入某個(gè)地址時(shí),它表示要發(fā)送給特定 VIP 的命令。在該消息中可能包含有關(guān)所需確切操作的更多信息。因此,處理器可以協(xié)調(diào)外部活動(dòng)。如果您想測試,例如,當(dāng)軟件進(jìn)入中斷服務(wù)程序時(shí),將數(shù)據(jù)洪流到所有外部端口,這很有用。
在上一篇博客中,我們?yōu)閳D 2 所示的示例設(shè)計(jì)開發(fā)了一個(gè)測試平臺(tái)。VIP 為兩個(gè) UART 提供數(shù)據(jù)。處理器已被移除,取而代之的是由測試平臺(tái)驅(qū)動(dòng)的總線接口模型。一切都由測試臺(tái)控制。
圖 2 說明:示例設(shè)計(jì)說明了 VIP 如何為測試平臺(tái)驅(qū)動(dòng)的 UARTS 和總線接口模型提供數(shù)據(jù)。
圖 3 標(biāo)題:類圖突出顯示了如何通過圖形輸入工具輸入測試。它也可以使用便攜式刺激標(biāo)準(zhǔn) (PSS) 語言編寫。
在圖 3 中,顯示了測試平臺(tái)的三種配置tb_cfg_uart、tb_cfg_ss和tb_cfg_fc。第一個(gè)配置以前與一個(gè)處理器一起使用,運(yùn)行四個(gè)線程并通過事務(wù)級(jí)建模 (TLM) 進(jìn)行通信。TLM 名稱表明它們?cè)谠O(shè)計(jì)中不是真正的 CPU,而是為 TLM 接口生成流量。與此相關(guān)的代碼如下所示。
8 組件 tb_cfg_uart {
9
10 // 用戶代碼的開始 Component_tb_cfg_uart
11 處理器 cpu0 {“cpu0”, 4, Processor::TLM};
12 // 用戶代碼結(jié)束
我們可以修改配置,改為為兩個(gè)處理器生成測試,每個(gè)處理器運(yùn)行四個(gè)線程。這需要更改配置代碼,如下所示。
8 組件 tb_cfg_ss {
9
10 // 用戶代碼的開始 Component_tb_cfg_ss
11 處理器 cpu0 {“cpu0”, 4, Processor::TLM};
12 處理器 cpu1 {“cpu1”, 4, Processor::TLM};
13
14 memory_resource ddr0 {“ddr0”, 0x1000};
雖然沒有將處理器實(shí)例化到設(shè)計(jì)中,但仍為數(shù)據(jù)讀取和寫入以及行為檢查定義了一個(gè)內(nèi)存區(qū)域。為了切換到使生成的測試軟件驅(qū)動(dòng)而不是使用 UVM,我們?cè)俅胃呐渲么a,如下所示。
8 組件 tb_cfg_fc {
9
10 // 用戶代碼的開始 Component_tb_cfg_fc
11 處理器 cpu0 {“cpu0”, 4, Processor::SDV};
12 處理器 cpu1 {“cpu1”, 4, Processor::SDV};
13
14 memory_resource ddr0 {“ddr0”, 0x1000};
這是唯一需要做出的改變?,F(xiàn)在測試合成將輸出處理器代碼、加載到 TrekBox 的代碼以及執(zhí)行外部 VIP 協(xié)調(diào)的所有內(nèi)容,如圖 1 所示。
在下一篇博客中,我們將把這個(gè)例子轉(zhuǎn)移到模擬器上,產(chǎn)生一些新問題。正是這種模擬和仿真之間測試的可移植性是創(chuàng)建該標(biāo)準(zhǔn)的主要?jiǎng)訖C(jī)。
審核編輯:郭婷
評(píng)論
查看更多