戴兆麟,趙啟林,李 超,劉 璐
(1.上海電力大學電子與信息工程學院,上海 201306;2.上海愛思爾教育科技有限公司,上海 200120)
近年來,我國集成電路行業發展迅速,隨著工藝制程水平和芯片需求的提高,為了提高設計效率,縮短產品設計周期,同時增強設計模塊的可移植性,片上系統(System-on-chip,SoC)成為芯片的主流形式。SoC通常集成有微處理器CPU、存儲單元(包括RAM、ROM、FLASH 等)以及各種I/O 接口(包括UART、SD 等),以完成命令處理、數據存儲、安全保護等功能。各個功能IP 通過系統總線連接,進行數據交互、功能控制響應。為了高效地協調不同IP 間的互聯交互關系,對整個SoC 系統進行控制,以達到硬件資源、芯片面積、能源功耗的統一。在SoC 系統內部總線端設有系統控制單元,通過該控制單元對集成在系統的各個IP 時鐘、復位以及特定的功能進行管理。文中介紹了SoC 芯片中系統控制單元的架構與功能,同時構建了基于SystemVerilog 的分層次驗證平臺,對該控制單元采用以覆蓋率為驅動的隨機化驗證策略進行功能驗證,在保證驗證準確性、完備性的同時,顯著提高驗證效率。
圖1 所示為系統控制單元架構,系統控制單元主要由兩大模塊組成:時鐘控制模塊(soc_clk_gating)和復位控制模塊(soc_rst_ctrl)。時鐘控制模塊和復位控制模塊主要向系統中各個IP 模塊輸出或停止不同頻率的時鐘信號以及復位信號。同時可以通過系統總線訪問其內置的控制寄存器(ctrl_register),通過讀寫控制寄存器內容,可以實現CPU 的復位、重映射,使能JTAG,Pflash 寫保護控制以及與系統掛載的模擬模塊如PLL、OSC 模塊進行調配與控制。

圖1 系統控制單元架構圖
SystemVerilog 作為驗證語言,提高了代碼的生成率、可讀性及可重用性。以其面向對象的編程、以覆蓋率驅動的驗證、受約束的隨機激勵、斷言驗證等特性,相比于其他編程語言,更容易實現高效率的以覆蓋率為驅動的分層次驗證平臺。
基于上述優點,文中采用SystemVerilog 完成驗證平臺的搭建,實現了驗證平臺層次化、控制功能自動化驗證以及各個IP 時鐘、復位信號的自動化監測等功能。
驗證平臺的架構共有五個基類,分別是驅動類(Driver class)、數據發生類(Generater class)、計分板類(Scoreboard class)、監控器類(Monitor class)、環境類(Environment class),并且提供了斷言、覆蓋率收集功能,可以更好地使測試用例覆蓋代碼邊角(Code corner),各個組件的數據信息通過郵箱(Mailbox)互通,如圖2 所示。

圖2 驗證平臺架構
驗證平臺可實現產生隨機激勵、對待測設計施加激勵、收集待測設計的響應、比對期望響應與實際響應結果,同時參考代碼覆蓋率、斷言覆蓋率等數據,對待測設計的各個功能點進行詳盡的驗證測試,消除待測設計中可能存在的邏輯錯誤。
在SoC 系統中,系統控制單元的功能可以分為兩個主體部分,其一是對系統中部分IP 模塊進行控制與數據交互,這依托于系統控制單元的APB 總線端口與其內部的控制寄存器;另一部分則是為掛載于總線的各個IP 模塊提供時鐘與復位信號。故而對于系統控制單元的功能驗證點也主要分為兩方面,一方面是驗證系統控制單元能否通過APB 總線對內部的控制寄存器進行正確的讀、寫操作,從而對掛載于總線上的各個IP 模塊進行配置與控制;另一方面則是驗證系統控制單元是否能準確地將時鐘與復位信號輸出到各個IP 模塊上。
控制寄存器功能的驗證流程如圖3 所示,數據發生器(Generater)依托于數據建模(Transcation),可以產生特定或隨機的數據,數據產生后首先傳送到數據代理器(Agent)中,數據代理器再將所得數據分別發送給驅動器(Driver)和計分板(ScoreBoard)中的參考模型(Reference model),采用數據代理器可以避免因發送時序等因素造成數據混亂或錯誤。數據傳給驅動器后,驅動器以符合APB 傳輸協議的方式將數據傳輸給系統控制單元。同時計分板將數據代理器發送與監測器(Monitor)接收的數據儲存在計分板內部控制寄存器參考模型中,計分板將完成“寫入數據”與“讀出數據”的自動化比對,打印比對錯誤的數據內容,并完成錯誤數據數量的統計,以此來驗證控制寄存器寫入、讀出數據的準確性。

圖3 控制寄存器功能的驗證流程
時鐘以及復位信號的驗證方法如圖4 所示。通過在驗證平臺插入斷言以及監測器對接口信號進行監測可以快速準確地定位系統控制單元時鐘、復位信號的錯誤。對于復位信號,斷言首先監測輸入進系統控制單元的復位信號,隨后在IP 模塊使能復位后監測該復位信號是否如預期變化,最后統計斷言失敗的數量,以此來驗證復位信號的正確性。而對于時鐘信號,監測器保持對輸出時鐘信號的端口進行采樣,驗證平臺通過對仿真時間內采樣到的時鐘信號邊沿數量和系統仿真時間進行計算,得出該輸出時鐘的頻率,并與計分板中預設的標準時鐘進行自動化比對并打印對比結果,由此來驗證時鐘信號的準確性。
在驗證平臺中,APB 總線數據通過驅動器發送給待測設計,時鐘以及復位信號也是由驗證平臺輸入到系統控制單元,圖5 所示為在一隨機測試用例的驅動下系統控制單元的部分信號波形。

圖5 隨機測試下部分信號波形
圖5 所示波形為隨機數據測試用例,在APB 總線接口上采用地址隨機、數據隨機、讀寫隨機的測試方法,驗證平臺將隨機數據輸入到系統控制單元,同時不斷比對控制寄存器輸入與輸出的“寫數據”、“讀數據”。對于輸入時鐘采用同一頻率,對應的輸出時鐘信號受內部控制寄存器控制,決定輸出時鐘信號或輸出低電平,復位信號也是受不斷被讀寫的控制寄存器決定拉高或者拉低。通過這樣的隨機測試對直接測試未涉及的代碼部分或功能進行測試驗證,可以提高驗證的完備性,加快了驗證項目的進度。
代碼覆蓋率是衡量驗證平臺測試進度的一個重要指標,包括分支覆蓋率、語句覆蓋率、翻轉覆蓋率、條件覆蓋率以及狀態機覆蓋率,通過代碼覆蓋率這一指標可以直觀地衡量模塊驗證的進度。系統控制單元的驗證以覆蓋率為驅動,保證了驗證的完備性。經過各種直接測試與上述的隨機測試,同時去除掉涉及DFT 驗證和一些不影響設計、驗證結果的部分后,該系統控制單元的代碼覆蓋率達到100%,監測復位信號的斷言覆蓋率也達到了100%,如圖6所示。

圖6 系統控制單元覆蓋率
在保證自動化打印的時鐘功能驗證、控制寄存器功能驗證結果正確以及斷言全部成功執行的前提下,該驗證平臺完成了對系統控制單元充分的驗證,確定了該系統控制單元功能完備且準確,設計符合預期。
以系統控制單元模塊的驗證為核心,介紹了SoC 系統控制單元的架構與功能,同時建立了層次化的驗證平臺,采用基于覆蓋率驅動和斷言的隨機化驗證方法完成對該系統控制單元功能點的分類分層次驗證。相較于傳統驗證平臺,憑借驗證組件的高度模組化和以覆蓋率驅動、隨機化驗證的策略,該驗證平臺不僅可以移植應用于同一數據傳輸協議的不同類模塊驗證,提高了驗證平臺的復用性,還保證了待測設計的驗證完備性和較高的驗證效率,為SoC 系統模塊的驗證提供參考。