鄭 挺,李 勇
(國防科學(xué)技術(shù)大學(xué) 計算機學(xué)院,湖南 長沙,410073)
銀河飛騰-邁創(chuàng),簡稱 “飛騰-邁創(chuàng)”(英文YHFT-Matrix,簡稱FT-Matrix)是由國防科大計算機學(xué)院微電子與微處理器研究所研發(fā)的具有自主知識產(chǎn)權(quán)的面向無線通信、視頻和圖像處理的高性能浮點DSP軟核。數(shù)字信號處理器(DSP)的主要任務(wù)是完成大量實時數(shù)據(jù)計算,它強大計算能力的發(fā)揮離不開高效的數(shù)據(jù)供給,設(shè)計一個可高效搬移數(shù)據(jù)的部件——直接存儲器訪問控制器 (DMAC),對DSP性能的提升具有重要意義。
本文針對該DSP軟核的應(yīng)用特點,提出了一種靈活高效的DMAC方案。為保證設(shè)計的正確性,本文用兩種方法對設(shè)計進行了驗證:傳統(tǒng)的模擬驗證方法和目前國內(nèi)外研究熱點之一的基于SVA (system verilog assertion)的驗證方法。它們的驗證能力互補,將它們結(jié)合起來驗證,可充分發(fā)揮各自的優(yōu)點。
YHFT-Matrix內(nèi)核是基于超長指令字 (very long instruction word,VLIW)的單核與多核動態(tài)切換的體系結(jié)構(gòu)并運用了單指令流多數(shù)據(jù)流 (single instruction multiple data,SIMD)、單指令流多線程 (single instruction multiple threads,SIMT)技術(shù),其獨特的雙指令流多線程 (double instruction multiple threads,DIMT)模式支持操作系統(tǒng)和應(yīng)用算法的同時運行。
IP核的整體結(jié)構(gòu)如圖1所示,該結(jié)構(gòu)主要包括統(tǒng)一的取指、派發(fā)部件、標(biāo)量處理單元、向量處理單元、向量存儲及控制部件、指令緩沖器 (Icache)、數(shù)據(jù)緩沖器(Dcache)及直接存儲器訪問控制器 (DMAC)。其中,直接存儲器訪問控制器 (DMAC)是DSP的核心數(shù)據(jù)傳輸引擎,它的性能的高低對芯片的整體性能具有重要影響。
圖1 FT-Matrix IP核總體結(jié)構(gòu)
圖2 DMA控制器的整體結(jié)構(gòu)
為滿足以3G/4G無線通信為代表的高密集度計算對數(shù)據(jù)供給的要求,設(shè)計了兩個可快速在核內(nèi)外搬移數(shù)據(jù)的通用通道和用于與外部通信的4個AXI通道。為滿足對DSP仿真調(diào)試的需要,設(shè)計一個與ET (Emulation/Test)部件連接的通道。為加快數(shù)據(jù)的搬移速度,設(shè)計了多總線、集中式仲裁的結(jié)構(gòu)。
DMA控制器的結(jié)構(gòu)如圖2所示。DMA控制器包括通用通道1、通用通道2、AXI(advanced extensible interface)主機發(fā)送通道、AXI主機接收通道、AXI從機發(fā)送通道、AXI從機接收通道、ET專用通道7個物理通道和5套總線。
(1)通用通道:可將片外存儲器中的數(shù)據(jù)搬到片內(nèi)存儲器,再將運算結(jié)果由片內(nèi)存儲器搬到片外存儲器,同時可通過外設(shè)總線實現(xiàn)各部件參數(shù)的批量配置或讀取。
(2)AXI主機發(fā)送通道:DMAC作為AXI主機主動從VM、ASRAM (asynchronous RAM)或DDR (double data rate SDRAM)讀取數(shù)據(jù),并將讀到的數(shù)據(jù)轉(zhuǎn)發(fā)給AXI從機。
(3)AXI主機接收通道:DMAC作為AXI主機主動向AXI從機發(fā)出讀請求,并將從AXI從機接收到的數(shù)據(jù)寫至VM、ASRAM或DDR中。
(4)AXI從機發(fā)送通道:DMAC作為AXI從機被動接收AXI主機讀burst信息,并將從VM、ASRAM或DDR讀到的數(shù)據(jù)返回給AXI主機,本通道在與AXI主機進行burst信息握手成功后,自動進行數(shù)據(jù)的傳輸,因而需要使用本通道時,只需要配置AXI主機方,不需要配置DMAC方。
(5)AXI從機接收通道:DMAC作為AXI從機被動接收AXI主機寫burst信息,接收AXI主機寫數(shù)據(jù),并轉(zhuǎn)發(fā)給VM、ASRAM或DDR。本通道與AXI從機發(fā)送專用通道一樣,在與AXI主機進行burst信息握手成功后,自動進行數(shù)據(jù)的傳輸,因而需要使用本通道時,只需要配置AXI主機方,不需要配置DMAC方。
(6)ET專用通道:用于接收ET部件的請求,并對存儲空間進行讀寫操作。若為讀,它將讀到的數(shù)據(jù)返回給ET部件。若為寫,它將ET部件的寫數(shù)據(jù)寫往相應(yīng)部件。
(7)總線仲裁:DMAC可以訪問5套總線,分別為DMA總線、VM總線和外設(shè)總線、AXI主機總線和AXI從機總線。其中AXI主機總線和AXI從機總線為DMA和AXI主機之間的專用總線,DMA總線主要為EMIF(external memory interface)和ET部件服務(wù),VM總線為DMAC和VM之間的專用總線,而外設(shè)總線則是DMAC訪問片上存儲器映射寄存器空間的通道。
圖3 DMA控制器和其他部件的接口
IP核的全局地址空間分配方案見表1。其中,ASRAM、VM、I/O空間和DDR的大小均可自己定義,I/O空間又可分配許多小空間。由此導(dǎo)致地址不固定的問題,而DMAC是根據(jù)地址向相應(yīng)部件提供數(shù)據(jù)的,因此需要將地址進行參數(shù)化處理。
表1 全局地址分配
Verilog HDL語言提供了編譯預(yù)處理命令`define[1],宏定義`define的語法為:`define宏名 字符串`define命令可以定義在模塊里,也可定義在模塊外,它的作用范圍為定義命令之后到源文件結(jié)束。
參數(shù)化的DMAC需要定義的參數(shù)有:
`define ASRAMSpace
`define VM_Start_Addr
`define VMSpace
`define ETAddr_Start
`define DMAAddr_Start
`define DDRAddr_Start
`define DDRSpace
DMA控制器和其它部件的接口如圖3所示。
其中,向量數(shù)據(jù)流重整理緩沖器 (vector rearrange buffer,VRB)是為了解決DMAC (32位)和 VM (512位)之間帶寬不匹配而設(shè)計的存儲器,大大減少了DMAC訪問VM的次數(shù),使VM可以更好的為向量運算單元的數(shù)據(jù)訪問操作提供支持,提高了系統(tǒng)性能。DMAC可通過EMIF訪問片外存儲器 (ASRAM和DDR)。
DMAC的兩個通用通道和ET專用通道遵循內(nèi)部通信協(xié)議,AXI從機發(fā)送通道和AXI從機接收通道遵循標(biāo)準(zhǔn)的AMBA AXI協(xié)議,AXI主機發(fā)送通道和AXI主機接收通道遵循簡化的AMBA AXI協(xié)議。以下僅對AXI協(xié)議作簡要介紹。
AXI協(xié)議是ARM公司為適應(yīng)SoC技術(shù)的發(fā)展,面向高性能、高頻率的系統(tǒng)設(shè)計而適時推出的的新一代高速總線互連協(xié)議。
AXI協(xié)議[2]是基于突發(fā)傳輸?shù)?,讀寫分開的通道結(jié)構(gòu)降低了直接存儲器訪問的開銷。讀通道由讀地址通道和讀數(shù)據(jù)通道構(gòu)成,如圖4所示。寫通道由寫地址通道、寫數(shù)據(jù)通道和寫回復(fù)通道構(gòu)成,如圖5所示。這5個獨立的通道通過VALID和READY完成握手,當(dāng)這兩個信號同時為高才開始傳輸。
DMA控制器主要有如下特點:
(1)后臺操作:傳輸數(shù)據(jù)的過程中CPU不參與,提高了系統(tǒng)效率;
(2)多種啟動方式:CPU直接啟動、外部同步事件啟動、通道鏈接啟動;
(3)多種同步方式:單元同步、源幀同步、目的幀同步、塊同步;
(4)傳輸數(shù)據(jù)大小靈活:可按字節(jié)、半字、字傳輸;
(5)地址修改方式多樣:源和目的地址可按固定、自增、自減、索引 (有符號數(shù))方式修改;
(6)支持二維傳輸:如圖6所示,所需搬運的所有數(shù)據(jù)可以分成n幀,每幀幀內(nèi)的數(shù)據(jù)間隔為x(這可以看成第一維),任意緊挨著的兩幀中,前一幀的最后一個數(shù)據(jù)和后面一幀的第一個數(shù)據(jù)地址間隔為y(這是第二個維度)。一般地,所需搬運的數(shù)據(jù)有兩種地址間隔,就需要用到二維傳輸;
圖6 二維傳輸
圖7 測試平臺的結(jié)構(gòu)
3.1.2 模擬驗證驗證過程
驗證采用自底向上的驗證方法,選用Cadence公司的NC-Verilog模擬器,通過觀察波形和查看日志文件進行驗證。驗證流程如圖8所示,其中覆蓋率統(tǒng)計的是代碼覆蓋率。
(7)搬移數(shù)據(jù)能力強:配置一次,最大可搬移 (2n-1)*2n個數(shù) (n為計數(shù)器寬度)。
功能驗證是指證明設(shè)計實現(xiàn)的電路模塊的功能和設(shè)計規(guī)范中規(guī)定的功能是否一致的過程。在目前的SoC設(shè)計中,功能驗證占整個設(shè)計流程的50%~80%,并且隨著SoC規(guī)模和復(fù)雜度的增加,這個比例還可能增加,功能驗證已成為SoC設(shè)計流程的最大瓶頸。
目前的功能驗證方法主要有:模擬驗證、形式化驗證、基于斷言的半形式化驗證、仿真驗證、軟硬件協(xié)同仿真驗證等。本文只對模擬驗證和基于斷言的驗證進行研究。
模擬驗證是傳統(tǒng)的驗證方法,是動態(tài)驗證。它的優(yōu)點是簡單、使用靈活且不受設(shè)計規(guī)模的限制,目前仍然是主要的功能驗證方法。缺點是隨著設(shè)計規(guī)模的不斷增大和復(fù)雜度的不斷提高,要手工編寫的測試激勵非常龐大,驗證所耗費的時間越來越難以忍受并且只能證明設(shè)計有錯而不能證明無錯。
3.1.1 測試平臺的搭建
測試平臺 (Testbench):通常指用來為設(shè)計產(chǎn)生特定的輸入序列并觀察響應(yīng)的一段模擬代碼。
測試平臺的結(jié)構(gòu)如圖7所示:測試平臺為設(shè)計提供輸入信號,并監(jiān)視設(shè)計的輸出信號。其中輸入激勵在模塊級是用硬件描述語言Verilog編寫,在系統(tǒng)級是用匯編語言 (通過自主研發(fā)的開發(fā)環(huán)境將匯編語言轉(zhuǎn)化為機器碼)編寫。
圖8 模擬驗證流程
其中,由于4個AXI通道是為用戶預(yù)留的,可掛載遵循本設(shè)計協(xié)議的任何AXI設(shè)備,沒有連接特定的部件,故系統(tǒng)級的驗證成為了一大難點。為在系統(tǒng)級進行驗證,我們將DMAC自身的AXI主機發(fā)送通道和AXI從機接收通道對接,AXI主機接收通道和AXI從機發(fā)送通道對接。
在進行大批量的數(shù)據(jù)傳輸時,我們編寫了數(shù)據(jù)自動比較程序,大大提高了驗證效率。
3.1.3 代碼覆蓋率
代碼覆蓋率是一種評估選取的測試激勵好壞和執(zhí)行被測設(shè)計程度的方法,也是衡量驗證完備性的重要指標(biāo)。它包括塊 (block)覆蓋率、表達式 (expression)覆蓋率、翻轉(zhuǎn) (toggle)覆蓋率和有限狀態(tài)機 (FSM)覆蓋率。
各覆蓋率的作用如下:
塊覆蓋率:用于監(jiān)視源代碼的語句塊的執(zhí)行情況。
表達式覆蓋率:用于提供條件表達式怎樣執(zhí)行的信息。
翻轉(zhuǎn)覆蓋率:用于測量設(shè)計活躍性,如未用到的信號、常量信號等。
有限狀態(tài)機覆蓋率:用于監(jiān)視控制邏輯塊的執(zhí)行情況。
由于翻轉(zhuǎn)覆蓋率是度量設(shè)計活躍性的,與被測設(shè)計的功能無關(guān),因此不做統(tǒng)計。
主要模塊的代碼覆蓋率統(tǒng)計見表2。
表2 代碼覆蓋率
其中,表達式覆蓋率未達到100%是由于覆蓋率統(tǒng)計工具ICC列出的組合不存在。
斷言是對設(shè)計的行為的描述,是一段代碼。
基于斷言的驗證方法是半形式化驗證方法。半形式化驗證方法是一種混合形式驗證方法,即模擬和形式驗證相結(jié)合。模擬難以對整個狀態(tài)空間搜素,形式驗證不能處理大的設(shè)計。把兩者結(jié)合起來就可以彌補相互的不足之處。
3.2.1 斷言語言選擇
目前,在集成電路設(shè)計中廣泛使用的斷言語言有:開放驗證庫OVL(open verification library)、屬性描述語言PSL(property specification language)、SystemVerilog Assertion (SVA)[3,4]。
OVL是由Accellera組織推出的斷言庫,這個庫是由數(shù)量有限的參數(shù)化的斷言模板組成,用戶只能被動地選擇配置參數(shù)來實現(xiàn)自己想要的斷言,難以滿足實際中復(fù)雜多變的應(yīng)用需求[5]。PSL是從IBM開發(fā)的Sugar這門屬性語言演化而來的一種語言,驗證能力雖然強大,但驗證人員要使用它必須付出巨大的學(xué)習(xí)開銷。
SystemVerilog語言是業(yè)界新興的工程語言,它是對IEEE Std1364-2001Verilog Standard的一個擴展,其由Accellera標(biāo)準(zhǔn)組織維護并提交標(biāo)準(zhǔn)化,在2005年12月被標(biāo)準(zhǔn)化為IEEE P1800-2005。它作為統(tǒng)一的設(shè)計和驗證語言,提供強大的面向?qū)ο缶幊碳夹g(shù),支持約束隨機的產(chǎn)生,覆蓋率統(tǒng)計分析和斷言驗證,被譽為下一代芯片設(shè)計和驗證語言[6]。SystemVerilog作為一個IEEE標(biāo)準(zhǔn)語言,得到了Synopsys、Mentor Graphics和Cadence三大EDA工具提供商的一致支持,已成為設(shè)計和驗證工程師的首選語言[7]。SVA是SystemVerilog語言的子集,能夠滿足驗證需要,且簡單易用,因此,我們選用SVA作為本課題的斷言驗證語言。
3.2.2 斷言的優(yōu)缺點
斷言主要有以下優(yōu)點:
(1)復(fù)用性好:傳統(tǒng)驗證方法中模塊級驗證和系統(tǒng)級驗證所使用的激勵是用不同的語言編寫的,它們之間無法重用。而斷言即可用于模塊級,也可用于系統(tǒng)級,復(fù)用性好。若斷言是參數(shù)化的,則還可以在不同的項目中復(fù)用。
(2)增加了功能覆蓋率統(tǒng)計機制:傳統(tǒng)驗證方法的代碼覆蓋率可由覆蓋率統(tǒng)計工具自動完成,功能覆蓋率卻無法自動統(tǒng)計。而在基于斷言的驗證中,覆蓋率可通過和覆蓋率屬性 (cover property)或覆蓋率組 (covergroup)進行描述,當(dāng)斷言被執(zhí)行時,相應(yīng)的功能就被覆蓋到了。
(3)可縮短驗證時間:Verilog是一種過程語言,不能很好地描述時序,而要檢測時序,需要編寫大量代碼,而用SVA可用很短的代碼實現(xiàn),斷言減少了編寫代碼的時間。另外,當(dāng)設(shè)計有錯誤時,得花大量時間追溯錯誤發(fā)生的位置,而在基于斷言的驗證中,一旦斷言監(jiān)測到錯誤,工具就會報出出錯的具體位置,大大節(jié)省了調(diào)試時間。
SystemVerilog斷言 (SVA)雖可以完美的描述和控制與時序相關(guān)的問題,但卻不適用于檢測數(shù)據(jù)轉(zhuǎn)換、計算和順序錯誤[8]。
3.2.3 SVA的分類
SystemVerilog語言定義了兩種斷言:即時斷言 (immediate assertions)和并發(fā)斷言 (concurrent assertions)。
(1)即時斷言:即時斷言是基于模擬事件的語義,必須放在過程塊的定義中,它們本質(zhì)不是時序相關(guān)的,測試表達式被立即求值且只能用于動態(tài)模擬。
一個即時斷言的例子如下:
always_comb
begin
a1:assert(a|b);
end
(2)并發(fā)斷言:并發(fā)斷言是基于時鐘周期的,可以放到過程塊(procedural)、 模塊(module)、接口(interface),或者一個程序(program)的定義中[9],在時鐘邊沿根據(jù)調(diào)用的變量的采樣值計算測試表達式且可以在靜態(tài)(形式的)驗證和動態(tài)驗證 (模擬)工具中使用。
一個并發(fā)斷言的例子如下:
a2:assert property (@ (posedge clk)a|->b);
區(qū)別即時斷言和并發(fā)斷言的關(guān)鍵詞是 “property”。在驗證過程中,大多使用并發(fā)斷言,即時斷言很少使用。
3.2.4 基于斷言的驗證過程
SVA包含assume、assert和cover這3個指令[10]。其中assume用于對環(huán)境進行假定,形式化工具用它來產(chǎn)生帶約束的激勵;assert用于監(jiān)視它描述的設(shè)計的屬性;cover用于監(jiān)視覆蓋率屬性。SVA可以嵌入到設(shè)計代碼中,也可放在單獨的文件中。
我們選用Mentor Graphics公司的形式化驗證工具Questa Formal進行驗證,在驗證之前,估測待測設(shè)計的規(guī)模完全在工具高效運行的范圍 (25萬門)之內(nèi)?;跀嘌缘尿炞C流程如圖9所示,我們采用 “灰盒”的驗證方法,重點對控制邏輯、接口協(xié)議和總線仲裁進行了驗證。
圖9 基于斷言的驗證流程
3.2.5 驗證結(jié)果
在驗證過程中發(fā)現(xiàn)了一個功能缺陷和一個語法錯誤,對設(shè)計進行修改后,重新進行了驗證,未發(fā)現(xiàn)新錯誤,達到了預(yù)期目標(biāo)。
Questa Formal軟件最終統(tǒng)計的斷言屬性檢查結(jié)果如圖10所示。
圖10 斷言屬性檢查結(jié)果
DMAC的數(shù)據(jù)傳輸速率統(tǒng)計如表3所示,結(jié)果表明設(shè)計的DMAC完全能夠滿足內(nèi)核運算的需要。
表3 DMAC傳輸速率統(tǒng)計
本課題是在國家 “核高基”重大專項基金的支持下完成的。本文針對應(yīng)用需求設(shè)計了可高效搬移數(shù)據(jù)的部件——DMA控制器,除對傳統(tǒng)的模擬驗證方法進行研究外,還重點對先進的基于斷言的功能驗證方法進行了研究。
傳統(tǒng)的模擬驗證方法目前仍是功能驗證的主要方法,它能在設(shè)計的前期和早期發(fā)現(xiàn)大量和明顯的錯誤,但隨著設(shè)計規(guī)模的增大和復(fù)雜度的提高,已經(jīng)越來越不能滿足驗證需求。
基于斷言的驗證方法與傳統(tǒng)的驗證方法相比,復(fù)用性好,增加了功能覆蓋率統(tǒng)計機制,可縮短驗證時間,并且能夠發(fā)現(xiàn)傳統(tǒng)驗證方法無法發(fā)現(xiàn)的錯誤,提高驗證質(zhì)量。其缺點是能夠驗證的設(shè)計規(guī)模有限,得與模擬驗證方法結(jié)合使用。
[1]XIA Yuwen.Digital system design tutorial for verilog [M].2nd ed.Beijing:Beijing University of Aeronautics and Astronautics Press,2008:106-107 (in Chinese).[夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計教程 [M].2版.北京:北京航空航天大學(xué)出版社,2008:106-107.]
[2]ARM IHI 0022D,AMBA AXITMand ACETMprotocol specification [S].2011.
[3]LIANG Lihua.Assertion-based verifieation researeh and Application [D].Dalian:Dalian Maritime University,2008:11-12(in Chinese).[梁麗華.基于斷言的功能驗證方法研究及其應(yīng)用 [D].大連:大連海事大學(xué),2008:11-12.]
[4]LIU Xuheng.The research of system verilog assertion-based verification method for nand flash controller[D].Hefei:Anhui University,2011 (in Chinese).[劉旭恒.基于SVA的 NFC驗證方法研究 [D].合肥:安徽大學(xué),2011.]
[5]Software Version 2.6,Accellera standard OVL V2library refe-rence manual[S].2011.
[6]ZHONG Wenfeng.Design and verification language of next generation chip:SystemVerilog (verification)[DB].http://www.cnki.net,2008 (in Chinese).[鐘文楓.下一代芯片設(shè)計與驗證語言:SystemVerilog (驗證篇)[DB].http://www.cnki.net,2008.]
[7]ZHONG Wenfeng.SystemVerilog and functional verification[M].Beijing:China Machine Press,2010:20-35 (in Chinese).[鐘文楓.SystemVerilog與功能驗證 [M].北京:機械工業(yè)出版社,2010:20-35.]
[8]Janick Bergeron,Eduard Cerny,Alan Hunter,et al.Verification methodology manual for SystemVerilog[M].XIA Yuwen,YANG Lei,CHEN Xianyong,et al transl.Beijing:Beijing University of Aeronautics and Astronautics Press,2007:27-85 (in Chinese).[Janick Bergeron,Eduard Cerny,Alan Hunter.SystemVerilog驗證方法學(xué) [M].夏宇聞,楊雷,陳先勇,等譯.北京:北京航空航天大學(xué)出版社,2007:27-85.]
[9]CHENG Gang.Research of functional verification based on system verilog [D].Guangzhou:South China University,2010:28-29(in Chinese).[程剛.基于System Verilog的功能驗證方法研究 [D].廣州:華南理工大學(xué),2010:28-29.]
[10]IEEE Std 1800TM-2009,IEEE Standard for SystemVerilog-unified hardware design,specification,and verification language[S].2009.