李凱亮,劉洋
(江南大學(xué),江蘇 無(wú)錫 214122)
作為可重復(fù)編程的半定制集成電路,F(xiàn)PGA 憑借其設(shè)計(jì)靈活、低時(shí)延低功耗、計(jì)算資源豐富等眾多優(yōu)點(diǎn)在越來(lái)越多的智能化設(shè)備中被應(yīng)用,無(wú)論是在傳統(tǒng)的軍工航天、移動(dòng)通信,還是在新興的人工智能、自動(dòng)駕駛、邊緣計(jì)算等領(lǐng)域均扮演著愈發(fā)重要的作用。
完整的FPGA 設(shè)計(jì)流程包括需求分析、邏輯設(shè)計(jì)、功能仿真、綜合優(yōu)化、門(mén)級(jí)仿真、實(shí)現(xiàn)、布局布線、時(shí)序仿真、生成比特、板機(jī)仿真、下載配置[1]。本文提出的仿真類(lèi)型屬于FPGA 功能仿真,主要用來(lái)驗(yàn)證電路功能是否符合設(shè)計(jì)要求,是最基礎(chǔ)最重要的一個(gè)仿真。當(dāng)下隨著FPGA 的應(yīng)用場(chǎng)景不斷拓展,其設(shè)計(jì)復(fù)雜度也快速上升,這就使對(duì)應(yīng)的功能仿真也面臨巨大挑戰(zhàn)。
已有的功能仿真方法主要有三種。第一種是基于EDA(Electronic design automation) 軟件做test bench 仿真,如Synopsys 公司的VCS(Verilog Compiled Simulator),Mentor 公司的Modelsim 等。仿真流程是確定要驗(yàn)證的功能點(diǎn)后,使用硬件描述語(yǔ)言編寫(xiě)定向測(cè)試激勵(lì),仿真軟件將測(cè)試激勵(lì)送入待測(cè)設(shè)計(jì)(Design Under Test,DUT),將DUT輸出信號(hào)與期望值進(jìn)行手動(dòng)比較[2,3],如通過(guò)觀察仿真波形的方式進(jìn)行確認(rèn)。這種仿真方法方便快捷,適用于小型設(shè)計(jì),但是對(duì)于中大型復(fù)雜設(shè)計(jì),采用人工觀察波形的方法不僅工作量大且極易出錯(cuò)。第二種是文章[4]提出的形式化驗(yàn)證,這種仿真方式不需要激勵(lì)文件,通過(guò)嚴(yán)密的邏輯方式和數(shù)學(xué)推理,去驗(yàn)證邏輯設(shè)計(jì)是否滿(mǎn)足規(guī)范。但這種方法無(wú)法觀察到DUT 內(nèi)部的仿真動(dòng)態(tài)行為,且需要大量的計(jì)算資源支持。第三種是文獻(xiàn)[5-7]提出的基于UVM(Universal Verification Methodology)的功能驗(yàn)證方法。UVM 是Accellera 組織推出的一種針對(duì)可編程邏輯的通用驗(yàn)證方法學(xué),這種驗(yàn)證方法學(xué)采用System Verilog 面向?qū)ο笳Z(yǔ)言,架構(gòu)清晰,代碼可讀性強(qiáng),兼容三大EDA 廠商(Synopsys、Mentor、Cadence)的仿真工具,可以最大程度的支持隨機(jī)化測(cè)試和代碼重用。但UVM 在仿真大型FPGA 設(shè)計(jì)時(shí)比較耗時(shí),稍微大一點(diǎn)的設(shè)計(jì)需要數(shù)十個(gè)小時(shí)才能完成一次功能仿真,如果仿真出現(xiàn)問(wèn)題修復(fù)后需要重新啟動(dòng),時(shí)間成本過(guò)大。
綜合分析現(xiàn)有仿真方法的缺陷,本文提出了一種針對(duì)大型FPGA 設(shè)計(jì)的硬件仿真平臺(tái)。該仿真平臺(tái)采用PC+XpressGXS10硬件板卡的架構(gòu),兩者通過(guò)PCIe(Peripheral Component Interconnect express)總線進(jìn)行數(shù)據(jù)交互。PC 用來(lái)生成測(cè)試激勵(lì)、參考模型,控制仿真流程,生成仿真報(bào)告等。XpressGXS10 用來(lái)實(shí)現(xiàn)仿真組件、映射DUT、比對(duì)仿真數(shù)據(jù)等。這種仿真架構(gòu)主要解決了目前已有FPGA 仿真平臺(tái)的4 類(lèi)問(wèn)題:
(1)人工比對(duì)仿真結(jié)果帶來(lái)的煩瑣不可靠、驗(yàn)證效率低的問(wèn)題。
(2)可編程邏輯映射成實(shí)際電路過(guò)程中帶來(lái)的時(shí)延不確定性問(wèn)題。
(3)大型FPGA 設(shè)計(jì)仿真帶來(lái)的時(shí)間過(guò)長(zhǎng)問(wèn)題。
(4)抽象層次低、通用性差、定向測(cè)試覆蓋率不全面問(wèn)題。
本文在第一部分主要描述了基于XpressGXS10 的FPGA硬件仿真平臺(tái)架構(gòu)及實(shí)現(xiàn),在第二部分提出了一種針對(duì)OFDM(Orthogonal Frequency Division Multiplexing)系統(tǒng)的仿真應(yīng)用案例。通過(guò)對(duì)仿真結(jié)果和速度的分析,進(jìn)一步驗(yàn)證了所提仿真平臺(tái)的可行性和高效性。
同時(shí)兼?zhèn)淇煽啃院涂旖菪允谴笠?guī)模FPGA 設(shè)計(jì)仿真的重點(diǎn)和難點(diǎn)。本文所提出的基于XpressGXS10 的硬件仿真平臺(tái)一方面基于MATLAB 生成完備靈活的場(chǎng)景模型和參考模型,保證仿真的可靠性,另一方面將運(yùn)算量大、耗時(shí)長(zhǎng)的仿真組件和DUT 映射到XpressGXS10 板卡進(jìn)行硬件仿真加速,進(jìn)一步提高FPGA 的仿真效率。
大型FPGA 設(shè)計(jì)在做硬件仿真加速時(shí)需要三類(lèi)資源做支撐,一是豐富的存儲(chǔ)資源用于存儲(chǔ)大量的測(cè)試激勵(lì)以及仿真比對(duì)結(jié)果;二是豐富的可編程邏輯資源用于實(shí)現(xiàn)仿真組件和映射DUT;三是大吞吐率的接口資源用于硬件加速板卡和其他設(shè)備進(jìn)行數(shù)據(jù)交互。本文選用REFLEX CES 公司推出的XpressGXS10 硬件加速板卡。該板卡中搭載一顆Stratix?10 GX SOC 芯片,這款系統(tǒng)級(jí)(System On Chip,SOC)芯片采用14 納米工藝,包含了兩片相同的FPGA 核心和一顆四核64-bit ARM Cortex-A53,總的核心面積為1 400 平方毫米,每個(gè)核心擁有500 萬(wàn)個(gè)邏輯單元以及相應(yīng)的I/O 單元。兩個(gè)FPGA 核心通過(guò)Intel 新的EMIB 技術(shù)進(jìn)行互聯(lián),數(shù)據(jù)帶寬高達(dá)6.5 TB/s。此外板載高速串行連接和高密度內(nèi)存,使得其適合于視頻處理、機(jī)器學(xué)習(xí)、基因組學(xué)研究、金融風(fēng)險(xiǎn)分析等密集計(jì)算、高并發(fā)、高帶寬場(chǎng)景,主要的板載資源有[8]:
(1)2x QSFP28 連接器,支持10 Gb/s、40 Gb/s、100 Gb/s 網(wǎng)絡(luò)接口。
(2)1x PCIe Gen 3 接口。
(3)2x 8 GB DDR4 存儲(chǔ)芯片。
(4)1x Stratix? 10 GX FPGA 芯片。
(5)1x Si5341 時(shí)鐘芯片,1x Si5344 時(shí)鐘芯片。
(6)1x DDR4 擴(kuò)展接口。
具體板卡資源分布如圖1所示。
圖1 XpressGXS10 板卡
基于UVM 的仿真方法已經(jīng)是比較完備的驗(yàn)證方法學(xué),本文的重點(diǎn)主要是放在如何提高大型FPGA 仿真速度的問(wèn)題上,即通過(guò)對(duì)仿真耗時(shí)的環(huán)節(jié)進(jìn)行硬件加速來(lái)解決。FPGA硬件仿真架構(gòu)如圖2所示,主要由PC 和XpressGXS10 組成,兩者通過(guò)PCIe(Peripheral Component Interconnect express)和JTAG(Joint Test Action Group)接口進(jìn)行數(shù)據(jù)交互。其中PCIe 最大吞吐率可以達(dá)到15.75 GB/s,用于導(dǎo)入測(cè)試用例的輸入數(shù)據(jù)以及仿真結(jié)果的讀取等。JTAG 接口用于燒錄仿真組件綜合成的比特流文件。
圖2 FPGA 硬件仿真架構(gòu)
PC 上包含有仿真主控器,基于MATLAB 軟件搭建的場(chǎng)景模型和參考模型。仿真主控器用于控制整個(gè)FPGA 的仿真流程,場(chǎng)景模型用于生成各種場(chǎng)景的測(cè)試激勵(lì),如功能測(cè)試和性能測(cè)試。功能測(cè)試主要是針對(duì)設(shè)計(jì)的功能特性做黑盒測(cè)試,生成對(duì)應(yīng)場(chǎng)景的測(cè)試激勵(lì)數(shù)據(jù),用于檢查功能錯(cuò)誤或者遺漏問(wèn)題;性能測(cè)試是生成多種正常、峰值以及異常負(fù)載的激勵(lì)數(shù)據(jù)來(lái)對(duì)設(shè)計(jì)的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試,確定各種環(huán)境負(fù)載下的設(shè)計(jì)性能變化情況,從而不斷提高設(shè)計(jì)穩(wěn)定性和可靠性。參考模型是與DUT 具備相同功能的行為級(jí)模型。大型FPGA 設(shè)計(jì)的開(kāi)發(fā)流程是設(shè)計(jì)團(tuán)隊(duì)和測(cè)試團(tuán)隊(duì)均基于需求說(shuō)明書(shū)的理解搭建兩套具備同樣功能的不同級(jí)別的系統(tǒng),設(shè)計(jì)團(tuán)隊(duì)基于Verilog 或者VHDL 語(yǔ)言搭建的系統(tǒng)就是正常需要投放市場(chǎng)的產(chǎn)品。測(cè)試團(tuán)隊(duì)基于高級(jí)語(yǔ)言如Python,System Verilog(本文采用MATLAB)搭建的系統(tǒng)稱(chēng)為行為級(jí)模型。當(dāng)兩套系統(tǒng)分別搭建好后,灌入相同的測(cè)試激勵(lì),比對(duì)相應(yīng)的輸出結(jié)果。如果兩套系統(tǒng)的輸出比對(duì)不上,則需要檢查是仿真平臺(tái)問(wèn)題或者設(shè)計(jì)系統(tǒng)問(wèn)題等,直至輸出完全相同,仿真結(jié)束。這種做法是避免某一方對(duì)需求說(shuō)明書(shū)理解偏差導(dǎo)致的功能設(shè)計(jì)問(wèn)題。
XpressGXS10 用來(lái)映射DUT,實(shí)現(xiàn)各個(gè)仿真組件。仿真組件主要有DDR4(Double Data Rate Synchronous Dynamic Random Access Memory)控制器、驅(qū)動(dòng)器、監(jiān)視器、檢驗(yàn)器、DUT 和仿真記錄器。DDR4 控制器用于讀取存儲(chǔ)在DDR4 的測(cè)試激勵(lì)、參考模型數(shù)據(jù)等;驅(qū)動(dòng)器用于做DDR4和DUT 之間的數(shù)據(jù)位寬轉(zhuǎn)換、跨時(shí)鐘處理等,并通過(guò)可定制接口如AXI4(Advanced eXtensible Interface 4.0),SPI(Serial Peripheral Interface)將激勵(lì)數(shù)據(jù)送進(jìn)DUT;監(jiān)視器用于采樣DUT 仿真節(jié)點(diǎn)的輸出,觸發(fā)DDR4 控制器讀取參考模型對(duì)應(yīng)仿真節(jié)點(diǎn)的數(shù)據(jù)并將兩路數(shù)據(jù)送進(jìn)檢驗(yàn)器。檢驗(yàn)器用于比對(duì)兩路仿真數(shù)據(jù)并將比對(duì)信息送進(jìn)仿真記錄器;仿真記錄器將比對(duì)信息處理成易于查看的仿真結(jié)果并存儲(chǔ),仿真結(jié)束后由主控器讀取。除此之外XpressGXS10 還包括存儲(chǔ)擴(kuò)展插槽、電源管理、時(shí)鐘生成器等。
基于上述提到的XpressGXS10 FPGA 硬件仿真平臺(tái),本文針對(duì)無(wú)線通信中OFDM(Orthogonal Frequency Division Multiplexing)系統(tǒng)進(jìn)行了硬件仿真實(shí)現(xiàn)。OFDM 系統(tǒng)包含上行接收和下行發(fā)送兩個(gè)處理流程。下行發(fā)送的流程是信道編碼、比特交織、比特加擾、星座圖調(diào)制、串并轉(zhuǎn)換、快速傅里葉逆變換。上行接收是下行發(fā)送的逆過(guò)程。對(duì)外接口主要有以太網(wǎng)口,AXI4 和CPRI(Common Public Radio Interface),其中AXI4 接口用于接收OFDM 系統(tǒng)的配置參數(shù),如比特交織長(zhǎng)度、傳輸帶寬、子載波頻率間隔等,以太網(wǎng)接口和CPRI 用于用戶(hù)業(yè)務(wù)數(shù)據(jù)的處理。針對(duì)上述OFDM 的處理環(huán)節(jié)均設(shè)置一個(gè)仿真節(jié)點(diǎn),每個(gè)仿真節(jié)點(diǎn)會(huì)輸出若干數(shù)據(jù)(由傳輸帶寬和仿真時(shí)長(zhǎng)決定),并拿去和參考模型的對(duì)應(yīng)輸出進(jìn)行比對(duì)。其他仿真組件設(shè)計(jì)細(xì)節(jié)。
基于需求說(shuō)明書(shū),采用MATLAB 開(kāi)發(fā)OFDM 系統(tǒng)的行為級(jí)模型。
需求說(shuō)明書(shū)的部分要求有:(1)支持?jǐn)?shù)據(jù)速率6、9、12、18、24、36 Mbps;(2)支持調(diào)制方式BPSK、QPSK、16QAM、64QAM;(3)支持編碼效率1/2、2/3、3/4;(4)每個(gè)OFDM 符號(hào)支持52 個(gè)子載波;(5)OFDM符號(hào)4 us 間隔;(6)保護(hù)間隔0.8 us;(7)導(dǎo)頻數(shù)4 個(gè)OFDM 符號(hào);(8)子載波間隔312.5 kHz。此外參考模型的交互接口、仿真節(jié)點(diǎn)位置和數(shù)量和FPGA 設(shè)計(jì)完全相同。當(dāng)參考模型設(shè)計(jì)完成后灌入測(cè)試激勵(lì),將每個(gè)仿真節(jié)點(diǎn)的輸出處理成文件并保存。
基于MATLAB 搭建,用于生成各種OFDM 應(yīng)用場(chǎng)景的模擬數(shù)據(jù)。
主要有用戶(hù)業(yè)務(wù)數(shù)據(jù)和OFDM 傳輸配置參數(shù),不同傳輸參數(shù)對(duì)應(yīng)的業(yè)務(wù)數(shù)據(jù)也不同,每一種測(cè)試場(chǎng)景即對(duì)應(yīng)一種傳輸參數(shù)和業(yè)務(wù)數(shù)據(jù)的組合。以一個(gè)功能測(cè)試場(chǎng)景為例,主要包含以下數(shù)據(jù):(1)同一時(shí)隙內(nèi)的三個(gè)用戶(hù)語(yǔ)音業(yè)務(wù)數(shù)據(jù)。(2)部分傳輸有:2 個(gè)天線流數(shù)據(jù);5 MHz 傳輸帶寬;子載波間隔312.5 kHz;三個(gè)用戶(hù)的業(yè)務(wù)塊比特?cái)?shù)分別為60 241,53 625 和49 681;比特交織長(zhǎng)度32;2 號(hào)加擾序列種子;調(diào)制等級(jí)16QAM 等。性能測(cè)試場(chǎng)景的數(shù)據(jù)多以峰值或者超范圍的參數(shù)組合為主,如需求說(shuō)明書(shū)要求保護(hù)間隔0.8 μs,則具體配置成0.8 μs 或者0.9 μs,觀察系統(tǒng)輸出是否發(fā)生紊亂。將場(chǎng)景模型的輸出數(shù)據(jù)處理成文件保存。目前針對(duì)該OFDM系統(tǒng)共開(kāi)發(fā)了56個(gè)功能測(cè)試場(chǎng)景和19個(gè)性能測(cè)試場(chǎng)景。
基于Linux C 語(yǔ)言開(kāi)發(fā),用于觸發(fā)仿真各個(gè)節(jié)點(diǎn)流程、讀取每個(gè)測(cè)試場(chǎng)景的仿真結(jié)果信息、生成仿真報(bào)告等。一次完整的FPGA 仿真需要跑完所有的測(cè)試場(chǎng)景,稱(chēng)為回歸測(cè)試?;貧w測(cè)試用以確保原設(shè)計(jì)在缺陷修復(fù)、配置改變、代碼更新后仍能符合要求正常的運(yùn)行?;貧w測(cè)試的流程為:
(1)讀取回歸測(cè)試列表,獲取測(cè)試場(chǎng)景名稱(chēng)。
(2)根據(jù)測(cè)試場(chǎng)景名稱(chēng),觸發(fā)場(chǎng)景模型,生成測(cè)試激勵(lì)。
(3)對(duì)參考模型施加測(cè)試激勵(lì),保存各仿真節(jié)點(diǎn)輸出。
(4)將仿真組件綜合成比特流,燒錄到XpressGXS10板卡。
(5)將測(cè)試激勵(lì)和參考模型輸出文件通過(guò)PCIe 接口導(dǎo)入到DDR4 存儲(chǔ)。
(6)配置寄存器,啟動(dòng)仿真。
(7)仿真結(jié)束,讀取仿真結(jié)果信息。
(8)檢查回歸測(cè)試列表是否讀完,未讀完則返回第一步,讀完則進(jìn)入下一流程。
(9)生成回歸測(cè)試仿真報(bào)告,回歸測(cè)試結(jié)束。
基于VHDL 語(yǔ)言開(kāi)發(fā),用于讀取DDR4 對(duì)應(yīng)區(qū)域的傳輸參數(shù)和業(yè)務(wù)數(shù)據(jù);并分別通過(guò)AXI4 接口和以太網(wǎng)接口將測(cè)試激勵(lì)送入DUT,其中AXI4 接口時(shí)序如圖3所示。寫(xiě)地址包含awaddr、awvalid、awready 三組線,當(dāng)awvalid 和awready 同時(shí)為高電平時(shí)awaddr 攜帶的地址數(shù)據(jù)有效,寫(xiě)數(shù)據(jù)包含wdata、wvalid、wready、wstrb 四組線,當(dāng)wvalid 和wready 同時(shí)為高電平時(shí),wdata 攜帶的寫(xiě)數(shù)據(jù)有效,wstrb用于指示wdata 有效字節(jié)數(shù),如當(dāng)wstrb 為“1001”時(shí),代表wdata 最高字節(jié)和最低字節(jié)有效。寫(xiě)回應(yīng)包含bready、bresp 和bvalid,當(dāng)bready 和bvalid 同時(shí)為高電平時(shí),bresp攜帶數(shù)據(jù)有效,當(dāng)bresp 為0 時(shí)代表這次寫(xiě)入成功,當(dāng)bresp為非1 時(shí)代表寫(xiě)入錯(cuò)誤[9]。此外AXI4 接口還可以用來(lái)讀取DUT 內(nèi)部寄存器,分析內(nèi)部仿真狀態(tài)。
圖3 AXI4 接口時(shí)序
基于VHDL 語(yǔ)言開(kāi)發(fā),用于讀取DDR4 對(duì)應(yīng)區(qū)域的參考模型仿真輸出文件;采樣DUT 仿真節(jié)點(diǎn)輸出,并實(shí)時(shí)將兩路數(shù)據(jù)送至檢驗(yàn)器。每個(gè)仿真節(jié)點(diǎn)均對(duì)應(yīng)一個(gè)監(jiān)視器和檢驗(yàn)器用于適配不同時(shí)鐘域和格式的比對(duì)數(shù)據(jù)。
基于VHDL 語(yǔ)言開(kāi)發(fā),用于比對(duì)監(jiān)視器送來(lái)的兩路仿真數(shù)據(jù),并記錄每個(gè)仿真節(jié)點(diǎn)的比對(duì)結(jié)果。當(dāng)所有仿真節(jié)點(diǎn)比對(duì)結(jié)束后,將比對(duì)結(jié)果送至仿真記錄模塊。比對(duì)時(shí)序細(xì)節(jié)如圖4所示,chk_ref_data 和chk_ref_req 來(lái)自參考模型,chk_ref_req 高電平時(shí)chk_ref_data 攜帶數(shù)據(jù)有效。chk_dut_valid 和chk_dut_data 來(lái)自DUT 對(duì)應(yīng)輸出。chk_counts 包含四個(gè)記錄器,當(dāng)chk_dut_data 和chk_ref_data 攜帶數(shù)據(jù)相同時(shí),word_good_counter 加一,否則word_bad_counter 加一,chk_err 電平拉高。當(dāng)這個(gè)仿真節(jié)點(diǎn)所有數(shù)據(jù)比對(duì)完后,chk_eof 電平拉高。
圖4 DUT 和參考模型數(shù)據(jù)比對(duì)時(shí)序
基于VHDL 語(yǔ)言開(kāi)發(fā),用于存放仿真的過(guò)程信息,仿真異常狀態(tài)標(biāo)志位,仿真節(jié)點(diǎn)比對(duì)結(jié)果等。仿真結(jié)束后,這些信息由仿真主控器通過(guò)PCIe 接口讀取[10]。
各仿真組件設(shè)計(jì)好后,通過(guò)仿真主控器配置寄存器啟動(dòng)仿真,當(dāng)所有仿真節(jié)點(diǎn)的數(shù)據(jù)比對(duì)正常則代表該測(cè)試場(chǎng)景仿真通過(guò),開(kāi)啟下一個(gè)測(cè)試場(chǎng)景的仿真。經(jīng)統(tǒng)計(jì)跑完75 個(gè)測(cè)試場(chǎng)景仿真總消耗時(shí)間在3 小時(shí)左右。對(duì)比基于UVM 的軟件仿真則需要20 小時(shí)左右,可見(jiàn)本文所提FPGA 硬件仿真平臺(tái)節(jié)省的時(shí)間是十分可觀的。
借助XpressGXS10 硬件加速板卡的算力,本文提出了一種針對(duì)大規(guī)模FPGA 設(shè)計(jì)的硬件仿真平臺(tái)。一方面參考模型,場(chǎng)景模型通過(guò)MATLAB 實(shí)現(xiàn),保證了生成測(cè)試激勵(lì)的靈活性,另一方面將運(yùn)算比較耗時(shí)的仿真組件和DUT 通過(guò)硬件加速,極大減少了仿真時(shí)間。此外文章最后針對(duì)OFDM系統(tǒng)設(shè)計(jì)了相應(yīng)的仿真流程,并介紹了該案例的仿真框架以及實(shí)現(xiàn)細(xì)節(jié)。本文提出的基于XpressGXS10 的硬件仿真平臺(tái)可應(yīng)用于各種大型FPGA 設(shè)計(jì)的仿真測(cè)試,也對(duì)未來(lái)實(shí)時(shí)快速仿真平臺(tái)的搭建提供了參考。