新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > 一種可配置的EDA仿真驗證方法

        一種可配置的EDA仿真驗證方法

        作者: 時間:2018-07-27 來源:網絡 收藏

        仿真測試是設計過程中驗證邏輯功能正確性的重要手段.由于驗證的復雜度隨設計規模成指數增長,對于占用5000以上邏輯單元(約十萬等效門)以上的設計而言,其激勵信號的注人與仿真結果的分析難以手動進行.設計者通常需要借助開發環境外的其他工程工具,或結合其他高級程序設計語言來完成.

        本文引用地址:http://www.104case.com/article/201807/384168.htm

        然而,上述研究中的激勵數據雖具有可的特點,但注人這些數據的觸發方式卻缺乏可能力.例如龍芯2號的[41使用了可的隨機程序生成器 CPRG(Configurable Random Program Generator)來產生測試向量,從而大大提高了效率和測試覆蓋率.但由于僅使用了定時觸發的方式,該系統僅在仿真初始化階段進行注人,類似的案例還有.這種定時觸發的仿真方法與仿真過程缺少交互,因此與真實系統存在較大差別.特別是對于需要根據仿真過程中某個信號的狀態來注人故障或干擾信號,以檢測電路的容錯能力的案例,采用定時觸發方式往往難以達到所需的驗證效果.

        采用事件觸發方式可以解決定時觸發的種種弊端.然而要實現觸發事件的可配置,必須先實現測試臺代碼的可配置一 個典型的例子是信號處理系統.Husmann等采用了Perl腳本編寫的配置管理模塊來管理事先編寫的測試臺和測試向量,并維護仿真結果記錄.配置管理的引人使得該系統具有一定的靈活性.但由于測試臺仍需事先編寫,不能稱為完全的可配置系統.

        本文提出一種針對十萬門以上規模集成電路的可配置仿真測試方法,使用配置腳本作為輸入,通過CTG(Configurable Testbench Generator)自動產生測試臺代碼,實現了觸發事件的完全可配置.本方法生成的測試系統中注人邏輯與數據文件分離,仍然可以通過Matlab等工程軟件生成測試向量.實驗表明該方法可避免重復編碼帶來的低效率和可靠性的降低,并節省保存仿真狀態所需的存儲空間.

        1 可配置的系統

        1.1 基干CTG的仿真驗證環境

        基于可配置測試臺生成器 CTG的仿真驗證環境是實現可配置的事件觸發方式的前提,它包含信號庫、配置腳本、測試臺生成引擎、激勵數據庫和仿真驗證環境,如圖1所示.信號庫定義了待測系統的信號集合.配置腳本定義了激勵、觸發模式、事件與記錄點,這些信息構成測試臺生成規則,實現了觸發事件的可配置.測試臺生成引擎是系統的核心,它根據配置腳本指定的規則自動產生測試臺代碼,測試臺代碼中包含對被測電路的引用.激勵數據庫包含所需注人的數據以及其所對應的相對于觸發點的注人時間,激勵數據仍然可以按照上述的方法產生,對此本文不作深人討論.

        1.2 數據結構

        用于描述可配置測試臺產生規則的信息存儲在信號庫和配置腳本中,這些信息的邏輯結構如下.信號庫定義了信號集合,對于給定的被測電路C,信號庫中的信息固定不變.有如下定義:

        定義 1 信號集合

        定義2 激勵(Stimulation)

        定義3 觸發模式(Trigger)

        定義 4 時間觸發事件

        定義5 跳變觸發事件

        定義6 記錄點

        1.3 測試臺生成

        1.3.1 測試臺結構

        由CTG生成的測試臺具有如下結構,如圖 2所示

        對于待注人信號sig_i,或待存儲信號集合U_i,其觸發條件具有如下形式:

        對于待注人信號sig_i,其注人任務具有如下形式:

        對于待存儲信號集合U_i, 其存儲任務具有如下基本形式:

        為了便于分析所存儲的數據,實際保存數據時往往加人一些附加信息,如當前時間、信號編號等.具體格式取決于所使用的離線分析工具,本文對此不進行具體討論.

        1.3.2 注入事件解析

        由于不能在多個always塊中對同一信號賦值,因此必須遍歷激勵集合,并按照待注人信號提取觸發條件加人同一always塊中.激勵信號注人事件的解析圍繞激勵集合S展開,算法如下:

        在復位狀態,各激勵s未激活,此時s.i被驅動為指定的缺省值s.v,加人初始化任務.CTG對于S中給定的每個s=(i,v,c,P,Ts),生成如下集合:

        對于T1中的各觸發模式t1,CTG生成 t1.e對 應的計數器,將計數器的超時信號加人s.t觸發條件的if語句中,并在if程序體中按照t1.d的設定生成對應的注人任務.

        對于T2中的各觸發模式t2,CTG生成t2.e.u與t2.e.j比較的表達式,加人s.i觸發條件的if語句中.對于t2.e.m不為循環觸發方式時還需生成對應的計數器,同時將計數器未滿條件加人if語句.最后在if程序體中按照t2.d的設定生成對應的注人任務.

        1.3.3 存儲事件解析

        系統仿真狀態的保存同樣受事件觸發,但并不要求在同一塊語句中進行存儲,因此其結構相對簡單.算法如下:

        CTG對于R中給定的每個r=(Er,w,U1)生成如下集合:

        對于E1中的各事件e1,CTG生成對應的計數器,將這些計數器的超時信號組成邏輯與表達式。

        對于E2中的各事件e2,CTG生成e.u與e.j比較的表達式,并與超時信號與表達式一起組成邏輯與表達式.該表達式加人r.Ur觸發條件的if語句中,并在if程序體中生成對應的存儲任務.

        2 實驗驗證及分析

        2.1 測試對象與實驗環境

        可配置仿真測試框架被用于自主研發的1553B總線協議IP核、基于類EIA架構的雙核SIP處理器模型、可重構的ATPA處理器模型等仿真測試中.以1553B總線協議IP核為例:該IP核采用VerilogHDL編寫,由45個模塊組成.這些模塊經過編譯生成時序仿真庫,并被包含在仿真測試臺的頂層模塊中.需注人的激勵信號包括:來自外部處理器的讀、寫、片選信號、數據總線、地址總線、DMA響應信號、以及 1553B總線數據.

        需要保存的狀態信號包括:存儲器數據、1553B總線數據、關鍵寄存器數據(狀態字、命令塊指針、當前命令字)、以及系統主狀態機的狀態變化數據經過映射,該 IP核在 Altera的 Cyclone EPIC12器件中占用2882個邏輯單元,主時鐘頻率為12MHz.

        仿真試驗在使用IntelPentium42.6GHz處理器、512Mbyte內存的PC機上進行,使用Quartus115.0軟件進行綜合與映射,使用 ActiveHDL.6.2軟件進行仿真.

        2.2 實驗結果分析

        在IP核的每種典型配置下,BC模式和RT模式除了正常傳輸外,分別需要83套和60套故障激勵注人邏輯.在這145套激勵邏輯下分別注人1024組數據進行了實驗.實驗系統中測試臺生成引擎采用 C++語言編寫,代碼量約700行.僅需通過修改配置腳本便可使用CTG生成上述測試臺.其中配置腳本規模在50~70行,所生成的測試臺代碼約為250~350行.所需編寫的代碼量對比如圖 3所示.

        從圖3可以看出,隨著仿真次數的增加,使用基于CTG的仿真驗證系統所需編寫的代碼量遠小于不可配置的仿真驗證系統.

        使用基于CTG的事件觸發進行仿真狀態存儲可節省存儲空間.以實驗系統在BC模式下完成1024組正常數據傳輸為例,保存三種典型信號的仿真狀態所需的存儲空間對比如表 1所示(不包含存儲時戳所需的空間.)

        表1中的數據表明,對于不需要頻繁存儲的仿真信號,采用事件觸發機制可大大減少存儲空間的開銷.值得注意的是,動態產生測試臺后需要重新編譯仿真庫,從而產生了額外的時間開銷 在2.1節介紹的實驗環境中,仿真庫的編譯用時小于1s,仿真初始化需17s,每仿真100組數據約用時700 900由此可知仿真過程累計用時約289.2~369.8h,其中編譯仿真庫的開銷小于145s,可忽略不計.

        3 結論

        本文提出的可配置仿真驗證方法適用而不僅限于十萬門以上的超大規模 EDA設計,相對于已有研究具有下列特點:

        (1)基于事件的觸發機制,更接近真實系統

        (2)可配置,自動產生測試臺代碼,減少編碼量提高可靠性

        (3)節省保存仿真狀態所需的存儲空間同時,由于具有可配置能力,一旦完成測試臺生成引擎僅需修改信號庫和配置腳本就能用于不同電路設計的仿真驗證.



        關鍵詞: 仿真驗證 EDA 配置

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大港区| 台北市| 万年县| 文水县| 丰台区| 德格县| 桦南县| 丰镇市| 定安县| 台安县| 社会| 叙永县| 郯城县| 苍梧县| 邵阳市| 高要市| 乐安县| 文成县| 无锡市| 汾阳市| 门头沟区| 江城| 弥勒县| 衡阳县| 阳城县| 石屏县| 六安市| 大埔区| 兴宁市| 兴城市| 江口县| 和平区| 濉溪县| 城市| 奉贤区| 钟山县| 泸水县| 海兴县| 阿荣旗| 土默特左旗| 滨海县|