專利名稱:軟硬件協(xié)同仿真通信方法
技術領域:
本發(fā)明涉及集成電路設計技術領域,特別涉及SOC(system-on-a-chip片上系統(tǒng))的設計驗證技術。
背景技術:
傳統(tǒng)的SOC設計中,其過程一般是系統(tǒng)的預研,劃分各功能模塊(包括軟件、硬件),具體模塊的實現(xiàn),然后是各個模塊的集合、驗證。按照傳統(tǒng)的方法,硬件模塊和軟件模塊各自分開驗證其功能是否正確,也就是說,它們的驗證不在同一個環(huán)境之下。這種方法存在很多缺點。首先,硬件和軟件模塊必須根據(jù)系統(tǒng)要求,建立各自的驗證環(huán)境,這必然導致兩個環(huán)境的不一致性;同時,額外增加了硬件模擬軟件環(huán)境和軟件模擬硬件環(huán)境的仿真模型;另外,仿真模型有別于實際的代碼,以至于最后整合時,容易產(chǎn)生不可預期的錯誤,導致整個設計的反復。軟硬件協(xié)同驗證,則在最大程度上解決了分開驗證的缺點,使軟件和硬件能夠盡早協(xié)同運作,讓軟件調(diào)試和硬件調(diào)試在同一時間進行,及時發(fā)現(xiàn)軟件和硬件的錯誤。
為了解決這個問題,目前業(yè)內(nèi)有一系列的方法最常見的一種是軟原型驗證,即將硬件設計由HDL仿真器在工作站上模擬,軟件模型與硬件仿真器之間通過API接口通信來實現(xiàn)整個系統(tǒng)的軟硬件部分的聯(lián)合仿真,即Co-simulation。這種方法的優(yōu)點在于整個仿真驗證過程的可控性和可監(jiān)測性很好,成本低;其缺點在于驗證能力有限,只能適用于早期測試、接口調(diào)試和代碼調(diào)試方面;且仿真運行速度很慢;此外它只能驗證模型在功能上的正確性,沒有精確至周期,也沒精確至引腳;并且它很難解決外圍設備數(shù)據(jù)同步的要求。另一中方法為快速原型系統(tǒng),實現(xiàn)途徑包括仿效(Emulation)、可重配置原型系統(tǒng)&專用原型系統(tǒng),它是一種將SOC系統(tǒng)快速映射到基于處理器陣列或基于FPGA器件而構建出來的可重配置的平臺來對設計進行驗證的方法。這種方法的優(yōu)點在于仿真速度很快,但仿真過程的可控性和可檢測性差,且成本很高。
因此,SOC軟硬件聯(lián)合驗證仍是個需要解決的問題。以下列舉已有專利及項目提出的一些解決方法。
國內(nèi)研發(fā)的SOC軟硬件驗證平臺的典型案例有浙江大學的媒體處理器軟硬件協(xié)同仿真驗證平臺(MPSP)、清華大學微電子所基于Celoxica的RC1000和RC200平臺提出了改進型SoC原型驗證電路板設計方案等。但是,浙江大學的MPSP專用性過強,可擴展性不能滿足SoC系統(tǒng)研發(fā)的實際需要,清華大學的SoC原型驗證方案還不成熟,不能提供完整的平臺。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術問題是,為SOC軟硬件聯(lián)合驗證提供一種軟硬件雙方數(shù)據(jù)通信機制,為聯(lián)合驗證提供通信支持。
本發(fā)明解決所述技術問題采用的技術方案是,軟硬件協(xié)同仿真通信方法,軟硬件協(xié)同仿真通信方法,其特征在于,在仿真初始化階段,軟件側和硬件側之間交換的數(shù)據(jù)包內(nèi)包括下列數(shù)據(jù)方向標識,用于標識本數(shù)據(jù)包在雙方傳送的方向;數(shù)據(jù)類型標識,用于標識本數(shù)據(jù)包是否為寄存器配置信息;第一數(shù)據(jù)標識,用于標識本數(shù)據(jù)包是否為信號使能位;寄存器地址,用于標識需要配置的寄存器的地址;寄存器數(shù)據(jù),即向寄存器送出的配置信息;時鐘;輸入信號使能標識;輸出信號使能標識;第一使能標識。
進一步的,數(shù)據(jù)包內(nèi)還包括仿真模式類型標識,用于標識屬于聯(lián)合仿真模式還是矢量仿真模式;第一長度標識,用于標識數(shù)據(jù)包中幀的個數(shù);第二長度標識,用于標識本次通信中數(shù)據(jù)包的個數(shù)。
在仿真運行階段,硬件側和軟件側之間交換的數(shù)據(jù)包內(nèi)包括下列數(shù)據(jù)時鐘用來定義時鐘的,總共可定義8個時鐘,最高位為第一個時鐘,次位為第二個時鐘,依此類推24位為第八個時鐘;輸入標記用來表述輸入信號的值;方向標記用來表述雙向信號輸入方向的值;第二使能標記輸入和雙向信號的使能位的值。
數(shù)據(jù)包是固定長度,如果長度不足,以填充位填滿。
本發(fā)明的有益效果是,為硬件加速器或仿效器和軟件仿真器正確高速的傳輸數(shù)據(jù)提供了支持,使軟硬件雙方協(xié)同工作,以完成對整個系統(tǒng)的驗證。
以下結合附圖和具體實施方式
對本發(fā)明作進一步的說明。
圖1為本發(fā)明的實現(xiàn)軟硬件協(xié)同仿真通信協(xié)議數(shù)據(jù)包的結構圖;圖2是本發(fā)明的數(shù)據(jù)包的包頭格式示意圖;圖3是初始化階段配置寄存器的包體中的一個幀的結構示意圖;圖4是使能位的包體格式示意圖;圖5是初始化階段詳細的包體組織格式;圖6是仿真運行階段軟件側傳遞給硬件側的包體的格式示意圖;圖7是仿真運行階段軟件側傳遞給硬件側的詳細包頭的格式示意圖。
圖8是由硬件側傳回軟件側的數(shù)據(jù)包體的格式示意圖;圖9是詳細的數(shù)據(jù)包體格式示意圖;圖10是仿真結束階段具體包體的格式示意圖。
圖11是本發(fā)明的通信方法的工作環(huán)境示意圖。
具體實施例方式
本發(fā)明的的通信方法是基于如下SOC驗證機制SOC軟硬件一體化設計驗證方法,包括以下步驟a、初始化;b、軟件側向硬件側發(fā)送激勵數(shù)據(jù)包;c、硬件側根據(jù)激勵數(shù)據(jù)包進行仿真處理,將處理結果發(fā)回軟件側,并為軟件側接收;d、循環(huán)步驟b-c直到仿真結束。
以Co-Simulation模式仿真為例。
Co-Simulation模式仿真的基本機理在仿真初始化之后,即可進入仿真運行階段。仿真運行時,軟件先向硬件發(fā)送一個激勵數(shù)據(jù)包,然后接收一個來自硬件的響應數(shù)據(jù)包;接著再發(fā)送一個激勵數(shù)據(jù)包,然后接收一個響應數(shù)據(jù)包;如此循環(huán)交替進行下去,直到仿真結束為止。
a)仿真的初始化階段在仿真的初始化階段,軟件側通過向硬件側發(fā)送兩個數(shù)據(jù)包,其中第一個數(shù)據(jù)包中包含硬件側寄存器的配置信息,通過對硬件側的寄存器寫入相應的值,第二個數(shù)據(jù)包中對每一個數(shù)據(jù)位的輸入輸出方向進行定義。從而完成對硬件側的初始化。
b)仿真運行階段在仿真的運行階段,軟硬件數(shù)據(jù)的通訊以數(shù)據(jù)包的形式進行傳送,數(shù)據(jù)包包括包頭(Packet Header)和包體(Packet Body,對于Co-Simulation模式,一個數(shù)據(jù)包體就對應一次協(xié)同仿真周期的數(shù)據(jù)),在仿真進行中,在每一個協(xié)同仿真周期由軟件環(huán)境發(fā)送一個數(shù)據(jù)包(由數(shù)據(jù)包頭緊跟著一個負載數(shù)據(jù)包構成),等待硬件方完成仿真后,將數(shù)據(jù)包(由數(shù)據(jù)包頭緊跟負載數(shù)據(jù)包構成)傳回后,進行處理后傳回給仿真器。在這里給出仿真運行階段的數(shù)據(jù)包和負載數(shù)據(jù)的格式。Co-Simulation模式的仿真過程軟件發(fā)送第一個激勵數(shù)據(jù)包,讀取硬件返回的第一個激勵數(shù)據(jù)包的響應數(shù)據(jù)包,發(fā)送第二個激勵數(shù)據(jù)包,讀取硬件返回的第二個激勵數(shù)據(jù)包的響應數(shù)據(jù)包,如此循環(huán)下去,直到仿真結束。即在仿真過程中,從軟件側發(fā)送到硬件側和從硬件側發(fā)送到軟件側的數(shù)據(jù)包的大小在初始化化完成后是確定的。在仿真期間不允許有變化長度的數(shù)據(jù)包出現(xiàn)。
c)仿真結束階段軟件側在仿真結束后,由軟件側向硬件側發(fā)送一個字長為17的32位數(shù)據(jù)包。通知硬件以結束仿真。其中負載數(shù)據(jù)包即是關斷聯(lián)合仿真卡所有I/O的方向使能信息(全為‘0’)。
附圖1為本發(fā)明的實現(xiàn)軟硬件協(xié)同仿真通信協(xié)議數(shù)據(jù)包的結構圖;圖中所取為數(shù)據(jù)流片斷,它是由數(shù)據(jù)包組成,數(shù)據(jù)包一個個32位的幀構成,幀的個數(shù)由具體的數(shù)據(jù)包類型決定;數(shù)據(jù)包由包頭和包體組成,包頭的長度是固定的為一幀,主要用來定義驗證模式、數(shù)據(jù)流的方向、指示數(shù)據(jù)包體類型、數(shù)據(jù)包的類型、包體的長度、包頭標記位和數(shù)據(jù)包的個數(shù)等,包體由若干個幀構成,它的個數(shù)是不固定的,幀的個數(shù)由具體的數(shù)據(jù)包類型決定。
整個軟硬件協(xié)同仿真過程分為三個階段仿真初始化、仿真運行和仿真結束;每個仿真階段的數(shù)據(jù)包的格式統(tǒng)一定義為圖1所示,其中每一格為一個幀,幀的大小是32bit;數(shù)據(jù)包的第一個幀是數(shù)據(jù)包的包頭,包頭后緊跟是包體,包體是由n個幀組成,n是由數(shù)據(jù)包的類型決定。
在軟硬件協(xié)同仿真通信協(xié)議中統(tǒng)一定義了數(shù)據(jù)包的包頭格式,如圖2所示;對于包體,針對不同的仿真階段有不同的定義格式;包頭中每一位的具體意義如下描述DIR方向位,包頭幀的第31位,0表示數(shù)據(jù)包從軟件側傳遞到硬件側,1表示數(shù)據(jù)包從硬件側傳遞到軟件側;Type類型位,包頭幀的第30位,1表示數(shù)據(jù)包為寄存器配置信息,0表示數(shù)據(jù)包為非寄存器配置信息;Mode仿真模式選擇位,包頭幀的第29位,1表示Co-Simulation模式(聯(lián)合仿真模式),0表示Vector仿真模式(矢量仿真模式);EN標記位,數(shù)據(jù)包頭的第28位,1表示數(shù)據(jù)包是信號使能位的信息,0表示數(shù)據(jù)包不是信號使能位的信息。
SHD關斷包位,數(shù)據(jù)包頭的第27位,1表示數(shù)據(jù)包為關斷包,0表示數(shù)據(jù)包為非關斷包;N/A保留位,數(shù)據(jù)包頭的第17位到16位和第26位到24位,留做以后擴展;Length包頭的第23到18位,表示數(shù)據(jù)包中幀的個數(shù)(包括包體和包頭),以32bit為一個計數(shù)單位;NO_FRA表示數(shù)據(jù)包的個數(shù);包頭標記位包頭的第9位到0位,為恒定值0x0A5;對于包體的格式定義,我們針對不同的仿真階段有不同的定義仿真初始化階段軟件側向硬件側發(fā)送數(shù)據(jù),對硬件側進行初始化;發(fā)送的數(shù)據(jù)含兩種類型的數(shù)據(jù)包,其中一種數(shù)據(jù)包中包含硬件側寄存器的配置信息,對硬件側的寄存器寫入相應的初始化值,另一種數(shù)據(jù)包是用來定義時鐘的個數(shù)和輸入輸出信號。根據(jù)不同的數(shù)據(jù)包類型定義不同的包體一種包體用來配置硬件側中的寄存器,一種用來配置時鐘和輸入、輸出與雙向信號信號的使能位。具體包體定義如下
配置寄存器的包體格式(如圖3所示為包體中的一個幀)。
ADDR1和ADDR2是要配置的寄存器的地址,DATA1和DATA2是要配置的寄存器的配置信息;對于不足32位的寄存器配置信息,以1作為填充;硬件的軟復位實現(xiàn)通過對0x00寄存器寫入FF值實現(xiàn)復位。復位的時間由地址為01H寄存器寫入的值確定。硬件在復位時間后自動恢復到正常的工作狀態(tài)。軟復位與配置寄存器采用不同的數(shù)據(jù)包進行發(fā)送。
在初始化階段,需配置的寄存器如下表1所列,地址為0x00~0x0B的12個寄存器
表1用來配置時鐘和輸入、輸出與雙向信號信號的使能位的包體格式,如圖4所示;包體中幀的數(shù)目是可變的,它是由輸入、輸出和雙向信號的個數(shù)決定,對于不滿32bit的幀以0作填充。詳細的包體組織格式如圖5所示。
CLOCK用來定義時鐘的,總共可定義8個時鐘,最高位為第一個時鐘,次位為第二個時鐘,依此類推24位為第八個時鐘;例如啟用編號為0和3的時鐘時,則clock段的八位為1001000。
INPUT’EN用來定義輸入信號的使能位,以1填充,1的個數(shù)由輸入信號的個數(shù)決定;OUTPUT’EN用來定義輸出信號的使能位,以1填充,1的個數(shù)由輸出信號的個數(shù)決定;INOUT’EN用來定義雙向信號的使能位,以1填充,1的個數(shù)由雙向信號的個數(shù)決定;Padding填充位,用來填充不滿32bit的幀;在初始化階段,發(fā)送完以上兩個數(shù)據(jù)包后,就認為硬件的初始化就已經(jīng)完成,在每一次仿真啟動的時候,軟件都要對硬件進行初始化。
仿真運行階段軟件側向硬件側發(fā)送數(shù)據(jù)對硬件側施加激勵信號,等待硬件側完成仿真后將數(shù)據(jù)通過PCI傳回軟件側。仿真運行階段的數(shù)據(jù)包的包體分為兩種一種是由軟件側發(fā)送給硬件側的,它是對硬件施加的激勵信號;另一種是由硬件側傳遞給軟件側的,它是從硬件讀回的仿真數(shù)據(jù)。具體數(shù)據(jù)包格式定義發(fā)送(由軟件側傳遞給硬件側)包體的格式如圖6所示。
CLOCK用來定義時鐘的,總共可定義8個時鐘,最高位為第一個時鐘,次位為第二個時鐘,依此類推24位為第八個時鐘;例如啟用編號為0和3的時鐘時,則clock段的八位為1001000。
INPUT用來存儲輸入信號的值;INOUT用來存儲雙向信號輸入方向的值;EN輸入和雙向信號的使能位的值,1表示使能信號,以1填充,1的個數(shù)由輸入信號或雙向信號的個數(shù)決定;Padding填充位,用來填充不滿32bit的幀;詳細的包頭格式如圖7所示。
對發(fā)送包體格式的幾點說明CLOCK時鐘位的長度恒為8位,對應于第一個32位數(shù)據(jù)的31,30....24位依次對應于時鐘通道的第0,1,2,3,4,5,6,7個時鐘通道。時鐘數(shù)據(jù)為時鐘信號當前的實際電平。未啟用時鐘始終以0填充,比如已啟用0通道時鐘,則8位CLOCK值為?000_0000(注?代表該已啟用時鐘信號為當前仿真數(shù)據(jù)下對應的實際電平)。
CLK,INPUT和INOUT的位數(shù)之和如果不為32的整數(shù)倍,則在其后面通過引入PADDING信息,將其擴展為32位的整數(shù)倍,如上圖所示。其中INPUT共有X位。INOUT共有Y位。如8+X+Y=55,則應在后面添加9個1,作為填充位。
EN位,作為發(fā)送數(shù)據(jù)(包括clock,input,inout)位的方向選擇信號,1表示對應位為輸入(軟件傳遞激勵信息硬件);0表示對應發(fā)送數(shù)據(jù)位為輸出信號(數(shù)據(jù)自硬件返回給軟件側)。EN位的每一位數(shù)據(jù)與發(fā)送數(shù)據(jù)的clock,input,inout位的每一位一一對應,不足32位的整數(shù)倍時,在后面添加PADIDNG信息。
關于時鐘信號對應的8位EN,當前數(shù)據(jù)包對應的時鐘信號如果發(fā)生了跳變,其對應位的EN為‘1’,否則為‘0’,比如,當前數(shù)據(jù)包是對應編號為3的時鐘跳變,則這8位EN編碼為0001000。
對于沒有INOUT雙向數(shù)據(jù)位時EN位的處理,即為本文檔中的Y=0的特殊情況。與Y?。?(有雙向數(shù)據(jù)位時)的處理方法一樣。
接收(由硬件側傳回軟件側的)數(shù)據(jù)包體的格式如圖8所示。
INOUT用來存儲雙向信號輸出方向的值OUTPUT用來存儲輸出信號的值;Padding1和Padding2填充位,用來填充不滿32bit的幀;詳細的數(shù)據(jù)包體格式參見圖9。
在自硬件側返回的數(shù)據(jù)中,包括有PADDING信息,和INOUT位和OUTPUT位。
在仿真過程中,從軟件側發(fā)送到硬件側和從硬件側發(fā)送到軟件側的數(shù)據(jù)包的大小在初始化化完成后是確定的。在仿真期間不允許有變化長度的數(shù)據(jù)包出現(xiàn)。
仿真結束階段仿真結束后,由軟件側向硬件側發(fā)送一個字長為17的32位數(shù)據(jù)包,以通知硬件以結束仿真。具體包體的格式如圖10所示。其中32個32位,全為‘0’。
本發(fā)明的工作環(huán)境參見圖11。采用C語言或硬件描述語言編寫的測試激勵以及硬件虛擬映射軟件(MVP)產(chǎn)生的管腳映射信息,經(jīng)由第三方仿真工具并通過PL API(HDL應用接口函數(shù))或直接通過文本文件發(fā)送到采用C語言編寫的基于事務級的打包解包應用程序模塊中,該模塊根據(jù)所述平臺的軟硬件通信協(xié)議將激勵信息打成規(guī)定格式的數(shù)據(jù)包,并通過PCI總線發(fā)送到硬件(PCI卡的FIFO中),然后硬件通過軟硬件通信雙握手協(xié)議將激勵傳送到聯(lián)合仿真板卡的FIFO中,隨后由仿真主控模塊(或BFM)模塊對激勵數(shù)據(jù)包進行解壓處理并轉換成具體的時鐘經(jīng)準的測試激勵信號加載到被測試模塊中,待相應仿真周期完成后被測試模塊(DUT)將所得的響應信號傳回仿真主控模塊(或BFM)模塊并由它按照軟硬件通信協(xié)議打包,然后將這些響應數(shù)據(jù)包存儲在聯(lián)合仿真子板的上行FIFO中,等其軟硬件通信模塊握手成功后,則將響應數(shù)據(jù)包傳送至PCI卡的FIFO中,最后通過PCI總線按原路傳回至采用C語言編寫的基于事務級的打包解包應用程序模塊中,該模塊將收到的響應數(shù)據(jù)包解壓后,通過相應API(Application Programming Interface)函數(shù)將響應信息傳回第三方仿真工具,或直接以文本形式保存。采用所述平臺的這種驗證方法的整個過程中用戶不會感覺到整個硬件仿真環(huán)境的存在,整個仿真操作過程與通常的軟件模擬仿真沒什么兩樣,但是仿真速度有極大的提高。
權利要求
1.軟硬件協(xié)同仿真通信方法,其特征在于,在仿真初始化階段,軟件側和硬件側之間交換的數(shù)據(jù)包內(nèi)包括下列數(shù)據(jù)方向標識,用于標識本數(shù)據(jù)包在雙方傳送的方向;數(shù)據(jù)類型標識,用于標識本數(shù)據(jù)包是否為寄存器配置信息;第一數(shù)據(jù)標識,用于標識本數(shù)據(jù)包是否為信號使能位;寄存器地址,用于標識需要配置的寄存器的地址;寄存器數(shù)據(jù),即向寄存器送出的配置信息;時鐘;輸入信號使能標識;輸出信號使能標識;第一使能標識。
2.如權利要求1所述的軟硬件協(xié)同仿真通信方法,其特征在于,數(shù)據(jù)包內(nèi)還包括仿真模式類型標識,用于標識屬于聯(lián)合仿真模式還是矢量仿真模式;第一長度標識,用于標識數(shù)據(jù)包中幀的個數(shù);第二長度標識,用于標識本次通信中數(shù)據(jù)包的個數(shù)。
3.如權利要求1或2所述的軟硬件協(xié)同仿真通信方法,其特征在于,在仿真運行階段,硬件側和軟件側之間交換的數(shù)據(jù)包內(nèi)包括下列數(shù)據(jù)時鐘用來定義時鐘的,總共可定義8個時鐘,最高位為第一個時鐘,次位為第二個時鐘,依此類推24位為第八個時鐘;輸入標記用來表述輸入信號的值;方向標記用來表述雙向信號輸入方向的值;第二使能標記輸入和雙向信號的使能位的值。
4.如權利要求1或2或3所述的軟硬件協(xié)同仿真通信方法,其特征在于,數(shù)據(jù)包是固定長度,如果長度不足,以填充位填滿。
全文摘要
軟硬件協(xié)同仿真通信方法,涉及集成電路設計技術領域,特別涉及SOC(system-on-a-chip片上系統(tǒng))的設計驗證技術。本發(fā)明在仿真初始化階段,軟件側和硬件側之間交換的數(shù)據(jù)包內(nèi)包括下列數(shù)據(jù)方向標識,用于標識本數(shù)據(jù)包在雙方傳送的方向;數(shù)據(jù)類型標識,用于標識本數(shù)據(jù)包是否為寄存器配置信息;第一數(shù)據(jù)標識,用于標識本數(shù)據(jù)包是否為信號使能位;寄存器地址,用于標識需要配置的寄存器的地址;寄存器數(shù)據(jù),即向寄存器送出的配置信息;時鐘;輸入信號使能標識;輸出信號使能標識;第一使能標識。本發(fā)明為硬件加速器或仿效器和軟件仿真器正確高速的傳輸數(shù)據(jù)提供了支持,使軟硬件雙方協(xié)同工作,以完成對整個系統(tǒng)的驗證。
文檔編號G06F17/50GK1928878SQ200610021609
公開日2007年3月14日 申請日期2006年8月17日 優(yōu)先權日2006年8月17日
發(fā)明者李平, 廖永波 申請人:電子科技大學