時序邏輯等效性檢查方法使設計風險降至最低
發布時間:2008/6/16 0:00:00 訪問次數:596
設計團隊一般采用系統模型進行驗證。就驗證來說,系統模型比rtl更具優勢,比如系統模型易于開發且具有優異的運行時性能。挑戰性在于如何在系統級驗證和生成功能正確的rtl間建立起橋梁。一種稱為時序邏輯等效性檢查的方法具有橋接兩者的能力,它是基于c/c++或systemc編寫的規范來對rtl實現進行形式驗證。
本文將討論商用圖形處理芯片所采用的從系統級到rtl的設計和驗證流程。在該流程中,先要開發出系統模型,然后用它來確認視頻指令的算術運算,然后再采用時序邏輯等效性檢查方法驗證rtl實現。
系統級流程
隨著設計復雜性的增加,為了仿真整個系統,系統級建模變得不可避免。伴隨功能劃分、模塊接口和硬件/軟件協同設計而來的設計復雜性呈指數形式增長,使得系統驗證勢在必行。目前常采用c/c++或systemc進行系統級設計和驗證。
本例采用了c/c++來建模視頻處理算法模塊。一旦系統模型完成了調整和驗證,rtl設計師就可以編寫verilog代碼。高層綜合工具可以從系統代碼生成rtl。但工程師更常見的做法是用rtl代碼手工重新編寫設計。它是設計的解釋而非轉換。即便已用多種驗證測試平臺對rtl實現進行了驗證,采用基于仿真的方法也無法測試全部可能的狀態。
在設計流程中有許多驗證工具和方法可以采用,它們包括:基于斷言的驗證,隨機激勵生成和以覆蓋率驅動的驗證等。上述方法在功能上也許是值得依賴的,但它們都沒有借助系統模型。時序邏輯等效性檢查方法可以將系統模型的這種信心直接轉換為rtl實現。
圖形處理器市場受成像質量、再現性能和用戶購買時機的影響很大。對負責研制最新圖形處理器芯片的項目團隊來說,上述因素要求他們迅速開發出新算法、拿出新設計。為了滿足這種要求,可以采用系統模型來彌合初始規范和出帶間的差距。當項目開始時,受控隨機rtl仿真已運行好幾天了,但驗證工程師仍擔心會有“遺漏”的缺陷。被測rtl設計可以實現視頻和非視頻指令,并用在建項目的算術模塊來創建下一代視頻處理芯片。
設計驗證
驗證工作主要集中在21條視頻指令,范圍從“并行轉移”到“具有縮小作用的絕對差”等操作。采用時序邏輯等效性檢查方法的目標是借助用c/c++編寫的原始系統模型在芯片級回歸前改進rtl驗證。時序邏輯等效性檢查可以用來發現仿真遺漏的缺陷,并改進rtl設計的調試工作。
算法模塊的系統模型是用2,391條c/c++語句實現的。該項目的第一步包含改進c/c++代碼使得時序邏輯等效性檢查器可讀懂它。因該模型最初并非是為等效性檢查編寫的,所以其中的一些設計構造不符合時序工具語言子集。該項目團隊使用“< ifdef >”語句,來濾析出沒有明顯硬件概念的構造,例如:“reinterpret cast”和“static cast”。通過修改c/c++代碼來實現這些改變。今后,遵循c/c++開發過程中的編碼指南后可以不再需要修改設計模塊。
設計團隊接下來的工作是設置驗證環境。時序邏輯等效性檢查需要在驗證前對復位狀態和諸如時序和接口差異等時序差異進行規定。時序差異被具體規定為i/o映射和設計延時。
針對用c/c++編寫的系統模型,可以通過添加一個薄的systemc“封裝器”來引入復位和時鐘,中間不用改變c/c++模型。
該視頻處理器算法塊的rtl實現用了4,559行rtl碼,延時是7個時鐘周期。c/c++系統模型的延時是1個時鐘周期,它是由systemc“封裝器”引入的。設計團隊隨后規定一組新輸入數據送至每個設計的頻率。因為rtl是管線結構,因此新數據是逐個時鐘周期輸入的。這樣,c/c++和rtl的吞吐量都是1。
時序邏輯等效性檢查采用時序分析和數學形式算法來驗證這兩個模型的全部輸入組合是否一直能得到相同的輸出。與仿真不同,它并行地驗證全部輸入條件。在該項目中,相當于同時驗證全部指令。因為每一條視頻指令實現一個具體算法功能,設計團隊可以決定一次驗證一條視頻指令來提升調試效率。
因為了解被測試的指令,所以與同時對全部指令進行調試相比,確認與任何缺陷相關的邏輯更加容易。另外,當一次只驗證一條指令時,時序邏輯等效性檢查器運行時運行得更快,從而進一步提升了調試效率。
當驗證第一條指令(vec4add)時,在rtl模型中發現了9個設計缺陷、在系統模型中找到1個缺陷。系統模型中發現的缺陷可以指導設計師如何在以后設計中消除c++代碼中的歧義。
時序邏輯等效性檢查能用10個或更少時鐘周期的精簡反例來確認設計差異。對每個反例波形來說
設計團隊一般采用系統模型進行驗證。就驗證來說,系統模型比rtl更具優勢,比如系統模型易于開發且具有優異的運行時性能。挑戰性在于如何在系統級驗證和生成功能正確的rtl間建立起橋梁。一種稱為時序邏輯等效性檢查的方法具有橋接兩者的能力,它是基于c/c++或systemc編寫的規范來對rtl實現進行形式驗證。
本文將討論商用圖形處理芯片所采用的從系統級到rtl的設計和驗證流程。在該流程中,先要開發出系統模型,然后用它來確認視頻指令的算術運算,然后再采用時序邏輯等效性檢查方法驗證rtl實現。
系統級流程
隨著設計復雜性的增加,為了仿真整個系統,系統級建模變得不可避免。伴隨功能劃分、模塊接口和硬件/軟件協同設計而來的設計復雜性呈指數形式增長,使得系統驗證勢在必行。目前常采用c/c++或systemc進行系統級設計和驗證。
本例采用了c/c++來建模視頻處理算法模塊。一旦系統模型完成了調整和驗證,rtl設計師就可以編寫verilog代碼。高層綜合工具可以從系統代碼生成rtl。但工程師更常見的做法是用rtl代碼手工重新編寫設計。它是設計的解釋而非轉換。即便已用多種驗證測試平臺對rtl實現進行了驗證,采用基于仿真的方法也無法測試全部可能的狀態。
在設計流程中有許多驗證工具和方法可以采用,它們包括:基于斷言的驗證,隨機激勵生成和以覆蓋率驅動的驗證等。上述方法在功能上也許是值得依賴的,但它們都沒有借助系統模型。時序邏輯等效性檢查方法可以將系統模型的這種信心直接轉換為rtl實現。
圖形處理器市場受成像質量、再現性能和用戶購買時機的影響很大。對負責研制最新圖形處理器芯片的項目團隊來說,上述因素要求他們迅速開發出新算法、拿出新設計。為了滿足這種要求,可以采用系統模型來彌合初始規范和出帶間的差距。當項目開始時,受控隨機rtl仿真已運行好幾天了,但驗證工程師仍擔心會有“遺漏”的缺陷。被測rtl設計可以實現視頻和非視頻指令,并用在建項目的算術模塊來創建下一代視頻處理芯片。
設計驗證
驗證工作主要集中在21條視頻指令,范圍從“并行轉移”到“具有縮小作用的絕對差”等操作。采用時序邏輯等效性檢查方法的目標是借助用c/c++編寫的原始系統模型在芯片級回歸前改進rtl驗證。時序邏輯等效性檢查可以用來發現仿真遺漏的缺陷,并改進rtl設計的調試工作。
算法模塊的系統模型是用2,391條c/c++語句實現的。該項目的第一步包含改進c/c++代碼使得時序邏輯等效性檢查器可讀懂它。因該模型最初并非是為等效性檢查編寫的,所以其中的一些設計構造不符合時序工具語言子集。該項目團隊使用“< ifdef >”語句,來濾析出沒有明顯硬件概念的構造,例如:“reinterpret cast”和“static cast”。通過修改c/c++代碼來實現這些改變。今后,遵循c/c++開發過程中的編碼指南后可以不再需要修改設計模塊。
設計團隊接下來的工作是設置驗證環境。時序邏輯等效性檢查需要在驗證前對復位狀態和諸如時序和接口差異等時序差異進行規定。時序差異被具體規定為i/o映射和設計延時。
針對用c/c++編寫的系統模型,可以通過添加一個薄的systemc“封裝器”來引入復位和時鐘,中間不用改變c/c++模型。
該視頻處理器算法塊的rtl實現用了4,559行rtl碼,延時是7個時鐘周期。c/c++系統模型的延時是1個時鐘周期,它是由systemc“封裝器”引入的。設計團隊隨后規定一組新輸入數據送至每個設計的頻率。因為rtl是管線結構,因此新數據是逐個時鐘周期輸入的。這樣,c/c++和rtl的吞吐量都是1。
時序邏輯等效性檢查采用時序分析和數學形式算法來驗證這兩個模型的全部輸入組合是否一直能得到相同的輸出。與仿真不同,它并行地驗證全部輸入條件。在該項目中,相當于同時驗證全部指令。因為每一條視頻指令實現一個具體算法功能,設計團隊可以決定一次驗證一條視頻指令來提升調試效率。
因為了解被測試的指令,所以與同時對全部指令進行調試相比,確認與任何缺陷相關的邏輯更加容易。另外,當一次只驗證一條指令時,時序邏輯等效性檢查器運行時運行得更快,從而進一步提升了調試效率。
當驗證第一條指令(vec4add)時,在rtl模型中發現了9個設計缺陷、在系統模型中找到1個缺陷。系統模型中發現的缺陷可以指導設計師如何在以后設計中消除c++代碼中的歧義。
時序邏輯等效性檢查能用10個或更少時鐘周期的精簡反例來確認設計差異。對每個反例波形來說