李小波 唐志敏 李 文
1(計(jì)算機(jī)體系結(jié)構(gòu)國家重點(diǎn)實(shí)驗(yàn)室(中國科學(xué)院計(jì)算技術(shù)研究所) 北京 100190) 2(中國科學(xué)院大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 北京 100049) 3(上海處理器技術(shù)創(chuàng)新中心 上海 200120)
近年來,伴隨著處理器應(yīng)用領(lǐng)域的不斷拓展,實(shí)際應(yīng)用對(duì)處理器應(yīng)對(duì)復(fù)雜場(chǎng)景的功能需求不斷提高,面向通用計(jì)算場(chǎng)景的傳統(tǒng)通用處理器逐漸不能適應(yīng)這些需求,因而面向復(fù)雜應(yīng)用需求的異構(gòu)多核處理器不斷涌現(xiàn).對(duì)于高性能的異構(gòu)多核處理器,由于其核組眾多,核內(nèi)架構(gòu)復(fù)雜,核間通信多樣,高速外設(shè)接口豐富,整體設(shè)計(jì)規(guī)模十分龐大.隨之而來的是待驗(yàn)證的狀態(tài)空間成倍的增長[1],對(duì)其進(jìn)行完備的功能驗(yàn)證已經(jīng)成為異構(gòu)多核處理器設(shè)計(jì)工作中的瓶頸.
傳統(tǒng)基于軟件模擬驗(yàn)證(simulation)[2]的方法具有靈活性強(qiáng),使用簡單的特點(diǎn),但隨著異構(gòu)多核處理器邏輯單元規(guī)模增大,全芯片系統(tǒng)級(jí)模擬驗(yàn)證速度下降明顯.雖然采用基于事務(wù)(transaction)[3]的驗(yàn)證方法可提高驗(yàn)證對(duì)象的抽象層次,從而加快驗(yàn)證的速度,但對(duì)于我們待驗(yàn)證的目標(biāo)設(shè)計(jì),其運(yùn)行速度也只能達(dá)到幾十赫茲(Hz),甚至幾赫茲,并時(shí)有軟件模擬EDA(electronic design automation)工具及環(huán)境崩潰,根本無法運(yùn)行大量廣泛的系統(tǒng)級(jí)測(cè)試程序,更別提進(jìn)行復(fù)雜的軟硬件混合驗(yàn)證.
基于硬件仿真加速器(emulator)的仿真驗(yàn)證[4],其運(yùn)行速度可達(dá)幾百千赫茲(kHz),甚至優(yōu)化后能到兆(MHz)級(jí).但其運(yùn)行環(huán)境要求高[5],維護(hù)成本高[6],價(jià)格十分昂貴;另一方面雖然其運(yùn)行速度比模擬速度提升幾百到幾千倍,但其仍然達(dá)不到運(yùn)行操作系統(tǒng)、編譯器、系統(tǒng)級(jí)軟件應(yīng)用和性能、壓力測(cè)試程序等的要求.
現(xiàn)場(chǎng)可編程門陣列(field programmable gate array, FPGA)原型驗(yàn)證通過使用商用FPGA實(shí)現(xiàn)處理器設(shè)計(jì)的大部分功能(PHY,(phase locked loop, PLL))等模擬定制電路無法在FPGA上實(shí)現(xiàn)),可以進(jìn)行高速的原型驗(yàn)證[7].由于其運(yùn)行速度通常可達(dá)幾十到百兆級(jí),可用可以運(yùn)行更多更廣泛的真實(shí)的測(cè)試程序和系統(tǒng)軟件,經(jīng)??梢园l(fā)現(xiàn)許多軟件模擬驗(yàn)證難于發(fā)現(xiàn)的問題.不僅如此,模擬驗(yàn)證和硬件仿真等手段,一般只能連接測(cè)試模型或者虛擬設(shè)備,這可能帶來驗(yàn)證環(huán)境與真實(shí)物理設(shè)備行為之間的差異,而FPGA平臺(tái)卻可以直接連接外圍真實(shí)的物理設(shè)備,用于系統(tǒng)級(jí)軟件開發(fā)、測(cè)試和性能分析等方面,從而廣泛被采用于處理器的開發(fā)驗(yàn)證中,并發(fā)揮著十分重要的作用.
目前,F(xiàn)PGA驗(yàn)證平臺(tái)和驗(yàn)證方法在不同架構(gòu)的處理器驗(yàn)證中也都有成功應(yīng)用[8].英特爾(Intel)公司[9]基本在其每一代處理器[10-11]設(shè)計(jì)驗(yàn)證、性能分析中都有采用FPGA平臺(tái),以彌補(bǔ)傳統(tǒng)模擬驗(yàn)證的不足.國內(nèi)龍芯團(tuán)隊(duì)[12]采用了多FPGA驗(yàn)證平臺(tái)完成了龍芯-2G的FPGA驗(yàn)證工作.這些FPGA驗(yàn)證平臺(tái)主要側(cè)重于單一架構(gòu),單一處理器核心在FPGA上的原型驗(yàn)證,而對(duì)于多晶粒(Die)的異構(gòu)多核高性能處理器芯片如何進(jìn)行FPGA平臺(tái)的構(gòu)建和及其FPGA調(diào)試驗(yàn)證方法暫未涉及.此外,這些原型驗(yàn)證平臺(tái),并沒有涉及系統(tǒng)級(jí)的FPGA驗(yàn)證環(huán)境實(shí)現(xiàn),大部分解決方案是將FPGA連接到已有主板上[11].但是如果是第1代芯片的研發(fā),主板系統(tǒng)不可能在芯片驗(yàn)證階段準(zhǔn)備就緒,這就需要我們獨(dú)立構(gòu)建基于FPGA的系統(tǒng)級(jí)驗(yàn)證平臺(tái).
本文提出的基于同構(gòu)對(duì)稱FPGA平臺(tái)對(duì)異構(gòu)多核高性能處理器的FPGA驗(yàn)證、調(diào)試方法,有效地利用了異構(gòu)多核處理器的架構(gòu)特征,同構(gòu)FPGA的對(duì)稱特點(diǎn),以層次化的方法自頂向下劃分FPGA功能,自底向上構(gòu)建FPGA平臺(tái).采用差速橋(speed bridge)和自適應(yīng)時(shí)延(adaptive delay)調(diào)整采樣等技術(shù),結(jié)合內(nèi)嵌的虛擬邏輯分析儀(virtual logic analyzer, VLA)調(diào)試工具可以快速地完成FPGA平臺(tái)的點(diǎn)亮和部署.運(yùn)用多核互補(bǔ),核間替換模擬的調(diào)試SHELL等驗(yàn)證方法可以有效地完成對(duì)目標(biāo)高性能異構(gòu)多核處理器及整個(gè)SOC芯片系統(tǒng)級(jí)的FPGA驗(yàn)證.
Fig.1 The architecture of heterogeneous multi-core processor
本文的貢獻(xiàn)主要有6個(gè)方面:
1)結(jié)合目標(biāo)處理器架構(gòu),采用了層次化靈活可配置的方法,以子功能模組、功能模組、異構(gòu)多核模組、晶粒(Die),自底向上、逐級(jí)遞進(jìn)的方法,最后擴(kuò)展到全芯片,完成了FPGA平臺(tái)的構(gòu)建;
2)針對(duì)高速I/O接口協(xié)議速度快、頻率高,且全系統(tǒng)FPGA實(shí)現(xiàn)時(shí)FPGA頻率較難達(dá)到實(shí)際協(xié)議速率等問題,運(yùn)用了差速橋方案,成功實(shí)現(xiàn)了高速I/O速率匹配,完成了系統(tǒng)級(jí)的高速I/O互聯(lián),從而實(shí)現(xiàn)了大量高速I/O接口的FPGA驗(yàn)證和軟件驅(qū)動(dòng)的提前開發(fā);
3)對(duì)于多晶粒的FPGA平臺(tái)互聯(lián),由于每個(gè)FPGA平臺(tái)獨(dú)立配置,它們上電順序和時(shí)鐘相位無法保證同步對(duì)齊等問題,通過插入可配置的自適應(yīng)時(shí)延控制邏輯,有效地解決了信號(hào)跨多個(gè)FPGA平臺(tái)同步采樣問題;
4)在FPGA調(diào)試過程中,通過構(gòu)建VLA,有效地解決了FPGA平臺(tái)調(diào)試難題,加速了平臺(tái)點(diǎn)亮和后續(xù)驗(yàn)證調(diào)試進(jìn)程;
5)在FPGA驗(yàn)證過程中,根據(jù)異構(gòu)多核處理器的特點(diǎn),提出了大小核互換、多核間模擬替代、內(nèi)嵌調(diào)試SHELL等方法,可以方便快速地進(jìn)行軟硬件協(xié)同驗(yàn)證,巧妙地解決了軟件任務(wù)如何在核間劃分,負(fù)載均衡等工作;
6)應(yīng)用該FPGA驗(yàn)證平臺(tái),可極大加速異構(gòu)多核處理器驗(yàn)證進(jìn)程,明顯縮短硅前(pre-silicon)FPGA驗(yàn)證時(shí)間,有效地保證芯片一次性流片成功,同時(shí)在芯片設(shè)計(jì)階段就為軟件開發(fā)提供了一個(gè)高效的開發(fā)調(diào)試硬件平臺(tái),可提前在這個(gè)硬件原型系統(tǒng)平臺(tái)上進(jìn)行軟件開發(fā)測(cè)試,及早發(fā)現(xiàn)軟硬件協(xié)同設(shè)計(jì)問題,并且可以為硅后驗(yàn)證(post-silicon validation),及后續(xù)項(xiàng)目的架構(gòu)設(shè)計(jì)提供有效可靠的平臺(tái)保障.
本文需要進(jìn)行FPGA驗(yàn)證的目標(biāo)處理器是一款異構(gòu)多核高性能處理器,其總體結(jié)構(gòu)如圖1所示.該處理器由若干個(gè)晶粒互聯(lián)組合封裝而成,單個(gè)晶粒約10億門,規(guī)模十分巨大,設(shè)計(jì)復(fù)雜度高.該處理器既包含負(fù)責(zé)初始化啟動(dòng)和安全管理的精簡指令集(reduced instruction set computer, RISC)處理器核(簡稱小核),也包括用于各種復(fù)雜計(jì)算處理的通用復(fù)雜指令集(complex instruction set computer, CISC)處理器核(簡稱大核),還包括用于Die間互聯(lián)切換控制、功耗能效管理的數(shù)字信號(hào)(digital signal process, DSP)處理器核(簡稱控核).同時(shí)還包括多通道最高速率可達(dá)3 200 Mbps支持ECC的DDR4(double data rate 4)內(nèi)存控制器,及大量高速外設(shè)接口,比如多個(gè)16 Gbps的PCIe4.0、若干6 Gbps的SATA3.0,10 Gbps的USB3.1,10 Gbps Ethernet等高速I/O接口,此外還有各種低速的調(diào)試、維護(hù)管理接口等.
圖1處理器架構(gòu)中從功能的角度出發(fā),可以將整個(gè)處理器按功能劃分為復(fù)雜指令集(CISC)處理器核組,精簡指令集(RISC)處理器核組,數(shù)字信號(hào)(DSP)處理器核組,多路內(nèi)存(DDR4)存儲(chǔ)控制器組,各種高速互聯(lián)接口組,低速調(diào)試接口組.接下來,從各個(gè)功能組團(tuán)中選取具有代表性的一個(gè)核(模塊)進(jìn)行FPGA驗(yàn)證,最終我們選擇了1個(gè)CISC核心,1個(gè)RISC核心,1個(gè)DSP核心,1個(gè)DDR4.0通道,1個(gè)PCIe4.0接口,1個(gè)SATA3.0接口,1個(gè)USB3.1接口,1個(gè)Ethernet接口和一些低速調(diào)試管理接口作為一個(gè)典型的最小配置.這樣做有2方面原因:1)每個(gè)功能模組都有一個(gè)完備的功能模塊,可以有效驗(yàn)證單個(gè)核/模塊正確性;2)避免大量同質(zhì)的復(fù)制,增大了FPGA規(guī)模,導(dǎo)致容量、成本、時(shí)間等一系列問題.
待最小配置的FPGA平臺(tái)成功完成點(diǎn)亮并穩(wěn)定運(yùn)行后,再根據(jù)測(cè)試需求,可以添加更多核心和功能模塊.比如當(dāng)需要測(cè)試同構(gòu)多核通信和緩存一致性,就可以添加2個(gè)或更多的處理器核心,讓多個(gè)核心并發(fā)訪問緩存頁面,在測(cè)試?yán)虣z查結(jié)果同時(shí),還可以通過后續(xù)第4節(jié)介紹的VLA記錄總線上的訪存序列,查看是否符合預(yù)期.如果需要并發(fā)壓力測(cè)試多個(gè)I/O的吞吐率,可以集成更多的I/O模塊,并通過調(diào)試SHELL驅(qū)動(dòng)多個(gè)模塊測(cè)試?yán)滩l(fā)運(yùn)行,以更真實(shí)地模擬實(shí)際芯片的工作情況,提高驗(yàn)證覆蓋率.
雖然經(jīng)過2.2節(jié)的功能核(模)組劃分裁剪后,待驗(yàn)證處理器規(guī)模已經(jīng)縮減了很大一部分,但其規(guī)模仍然很大,內(nèi)部結(jié)構(gòu)復(fù)雜,高速接口種類繁多,對(duì)其進(jìn)行FPGA驗(yàn)證及軟硬件協(xié)同開發(fā)調(diào)試等依然面臨諸多挑戰(zhàn),主要包括:
1)目標(biāo)異構(gòu)多核處理器架構(gòu)內(nèi)部互聯(lián)復(fù)雜,邏輯規(guī)模龐大,高速I/O較多,如何劃分映射到多片F(xiàn)PGA上,并滿足目標(biāo)芯片在模塊級(jí)/系統(tǒng)級(jí),單核/多核,單模塊/多模塊,單晶粒/多晶粒及全芯片等不同規(guī)模配置下的靈活快速點(diǎn)亮并實(shí)施有效驗(yàn)證,是一個(gè)巨大挑戰(zhàn);
2)FPGA驗(yàn)證平臺(tái)相比傳統(tǒng)模擬驗(yàn)證和硬件加速器驗(yàn)證,信號(hào)可觀察性、可控制性更差,調(diào)試十分困難,迭代周期長,如何設(shè)計(jì)一個(gè)模塊化,靈活易用的虛擬邏輯分析儀,是一個(gè)亟待解決的問題;
3)目標(biāo)異構(gòu)多核處理器,不同于傳統(tǒng)同構(gòu)多核處理器,如何進(jìn)行異構(gòu)核間協(xié)同、軟件任務(wù)劃分、負(fù)載均衡、系統(tǒng)調(diào)度,如何有效利用異構(gòu)多核的架構(gòu)進(jìn)行更有效快速驗(yàn)證,也是一個(gè)值得探討方向.
本文后續(xù)章節(jié)將分別介紹如何應(yīng)對(duì)這些挑戰(zhàn),解決本節(jié)提到的各種問題,最終完成該異構(gòu)多核處理器的FPGA平臺(tái)構(gòu)建、調(diào)試、軟硬件協(xié)同驗(yàn)證及硅后問題在FPGA平臺(tái)上的復(fù)現(xiàn).
本節(jié)將詳細(xì)介紹如何根據(jù)目標(biāo)異構(gòu)多核處理器架構(gòu),構(gòu)建靈活可擴(kuò)展的FPGA平臺(tái).具體工作包括:設(shè)計(jì)裁剪及容量預(yù)估,F(xiàn)PGA平臺(tái)選型、邏輯分片及時(shí)分復(fù)用、差速橋集成、時(shí)鐘等比縮放、多平臺(tái)互聯(lián)等.
如2.2節(jié)所述,由于待驗(yàn)證異構(gòu)多核處理器規(guī)模巨大,現(xiàn)有最大的FPGA容量也相去甚遠(yuǎn),如何裁剪設(shè)計(jì)的規(guī)模成為FPGA平臺(tái)能否構(gòu)建的前提.具體方法為:
1)同質(zhì)核心空殼(empty shell),由于本處理器采用了異構(gòu)多核架構(gòu),每種架構(gòu)處理器可能有一個(gè)或若干個(gè),在不改變系統(tǒng)頂層情況下,最靈活方法是每種架構(gòu)的核組只保留一個(gè)核心,其他同質(zhì)核心全部替換為空殼(shell).在設(shè)計(jì)時(shí)我們經(jīng)過精心考慮,在空殼核心輸出信號(hào)連接合適初始化值(tie0/tie1)的狀況下可以保證整個(gè)全片仍然能正常工作.
2)保留必不可少模塊,分步集成各核心和高速I/O模塊,自底向上策略逐步擴(kuò)大驗(yàn)證規(guī)模.待最小配置點(diǎn)亮后,再根據(jù)驗(yàn)證需求添加更多的處理器核心和功能模塊.
3)資源預(yù)估,對(duì)每個(gè)功能子模塊進(jìn)行面積、引腳、時(shí)鐘等資源評(píng)估.
圖2展示了待驗(yàn)證目標(biāo)系統(tǒng)的最小配置下各功能模塊的面積,在小餅圖中我們可以注意到單個(gè)CISC核心面積(大核)是RISC核心(小核)和DSP核心(控核)的20倍以上,相差很大,這給FPGA資源分配和規(guī)劃帶來新的挑戰(zhàn),同時(shí)也是本文第5節(jié)中使用大小核模擬替換協(xié)同驗(yàn)證的重要原因.
根據(jù)不同芯片架構(gòu)對(duì)FPGA驗(yàn)證需求的不同,會(huì)選適合待驗(yàn)證芯片架構(gòu)的FPGA驗(yàn)證平臺(tái),有FPGA平臺(tái)基于其自身架構(gòu)的特點(diǎn)和驗(yàn)證的需要選取了子母板架構(gòu)[13].而基于我們待驗(yàn)證的處理器,其異構(gòu)多核對(duì)稱多晶粒架構(gòu)的特點(diǎn)以及為了滿足本文第4節(jié)介紹的通用調(diào)試接口需求,經(jīng)過多種權(quán)衡考量,最終采用了統(tǒng)一架構(gòu)的FPGA平臺(tái).這樣做有利于驗(yàn)證平臺(tái)的層次化、模塊化,具有靈活易擴(kuò)展等特性,方便多個(gè)晶粒級(jí)聯(lián),并具有統(tǒng)一的外部接口.FPGA型號(hào)方面,由于設(shè)計(jì)規(guī)模巨大,選擇Xilinx公司[14]目前較大容量的XCVU440芯片,每個(gè)驗(yàn)證板上包含4顆該芯片,引腳數(shù)為1 456,分別連接到24個(gè)連接頭上,每個(gè)連接頭可以傳送50個(gè)有效信號(hào),其邏輯示意如圖3所示.
Fig.2 The area pie of the each function module
Fig.3 FPGA board connection logic
對(duì)于單顆XCVU440雖然其等效ASIC達(dá)到了約2 600萬門左右,但是相對(duì)于我們需要進(jìn)行FPGA驗(yàn)證的目標(biāo)復(fù)雜異構(gòu)多核處理器規(guī)模,仍然相距甚遠(yuǎn),不可避免需要使用多片F(xiàn)PGA才能完成.對(duì)于待驗(yàn)證目標(biāo)處理器到多片F(xiàn)PGA的邏輯分片,如果使用純手工對(duì)設(shè)計(jì)劃片,雖然可以得到比FPGA劃分工具更好的結(jié)果,但這需要有對(duì)設(shè)計(jì)十分了解的有經(jīng)驗(yàn)的工程師和較長的時(shí)間迭代;如果嘗試使用EDA工具的自動(dòng)分片,較難得到期望的理想結(jié)果,而且從資源預(yù)估結(jié)果看需要使用80多片F(xiàn)PGA才能實(shí)現(xiàn),目前現(xiàn)有的FPGA工具難于處理如此大規(guī)模的設(shè)計(jì).
為了解決這個(gè)難題,結(jié)合芯片架構(gòu)特征我們采取了人工深度干預(yù)FPGA工具的混合劃片方法:
1)自頂向下,對(duì)稱邏輯劃片以晶粒為第1層次進(jìn)行切割劃分以減少綜合、布局布線FPGA數(shù)量;
2)晶粒內(nèi)部,結(jié)合3.1節(jié)預(yù)估信息,裁剪部分同質(zhì)核心/模塊,減小規(guī)模后,同時(shí)根據(jù)芯片互聯(lián)數(shù)據(jù)通路及微架構(gòu),首先人工固定部分需要外接到I/O引腳的功能片(tile)和需要特殊處理的功能模塊后,再引入自動(dòng)劃片工具對(duì)其他剩余邏輯進(jìn)行劃分;
3)基于文獻(xiàn)[15]介紹的K-L劃分方法,調(diào)整部分功能片,讓緊耦合互聯(lián)信號(hào)多的模塊盡量放在同一片F(xiàn)PGA內(nèi),盡量前期減少互聯(lián)信號(hào)總數(shù);
4)采用時(shí)分復(fù)用方法[15],以高頻時(shí)鐘傳輸接口信號(hào)來滿足FPGA片間傳輸較多信號(hào)超過連接引腳(pin)數(shù)的需求.
通過這4個(gè)方法,可以將一個(gè)經(jīng)典配置劃分在12顆FPGA中,而純FPGA工具需要19顆FPGA,得到一個(gè)相對(duì)較優(yōu)的劃分結(jié)果.此外,根據(jù)FPGA板拓?fù)湮恢茫瑢DR4和低速調(diào)試I/O接口放在一個(gè)FPGA板中(圖4Board1),高速I/O接口統(tǒng)一劃分在另一個(gè)FPGA板中(Board3),跨晶?;ヂ?lián)全部位于Board2,形成非常規(guī)整的對(duì)稱結(jié)構(gòu),這十分易于多FPGA平臺(tái)互聯(lián)實(shí)現(xiàn).
由于目標(biāo)驗(yàn)證異構(gòu)多核處理器內(nèi)集成了DDR4存儲(chǔ)控制器,PCIe4.0,SATA3.0,USB3.1,萬兆Ethernet等眾多高速I/O外設(shè)接口,為了驗(yàn)證它們的邏輯正確性,需要在FPGA平臺(tái)上實(shí)現(xiàn)這些高速I/O接口.
如果根據(jù)標(biāo)準(zhǔn)協(xié)議,PCIe4.0和SATA3.0等高速接口真實(shí)速度較快,對(duì)FPGA工作頻率要求非常高.而目標(biāo)芯片在劃分互聯(lián)后,芯片內(nèi)部控制邏輯需要跨越多個(gè)FPGA板和多顆FPGA芯片,其頻率已經(jīng)很難達(dá)到諸如PCIe4.0的全速率要求,這就需要通過差速橋來匹配FPGA和真實(shí)接口之間的速率,使PCIe4.0,SATA3.0等高速接口能在FPGA平臺(tái)上以低速的形式實(shí)現(xiàn).最終平臺(tái)整體架構(gòu)如圖4所示:
Fig.4 The overall architecture of FPGA platform for target processor(single Die view)
目標(biāo)驗(yàn)證異構(gòu)多核芯片,采用了多晶粒封裝架構(gòu),需要將圖1的多晶粒組合起來,進(jìn)行多晶?;ヂ?lián)驗(yàn)證和性能分析等.如果增加一個(gè)新的頂層,完全交給FPGA工具劃分,由于工具處理能力有限,會(huì)導(dǎo)致FPGA工具崩潰;另一方面效率低下,我們以4晶粒互聯(lián)為例,需要完成多達(dá)48顆FPGA的劃分、綜合、布局布線、生產(chǎn)下載文件的全流程,迭代一次需要一周以上.鑒于此,如果能利用到晶粒之間功能對(duì)稱以及FPGA規(guī)整互聯(lián)的特性,就可以極大簡化這項(xiàng)工作.
由于晶粒內(nèi)部邏輯功能完全一致,如果不需要考慮晶粒間的上電順序和信號(hào)時(shí)鐘同步(后面將介紹如何解決上電順序和時(shí)鐘采樣同步),只需要通過改變FPGA引腳在啟動(dòng)時(shí)的上下拉高低值,就可以區(qū)分主晶粒(master)和從晶粒(slave).引腳上拉的主晶粒在系統(tǒng)啟動(dòng)過程中,固件(firmware, FW)會(huì)根據(jù)當(dāng)前晶粒的主從情況,選擇不同初始化執(zhí)行路徑,在等待主從晶粒完成數(shù)據(jù)通路建立后(Step5),主晶粒固件就可以完成對(duì)其他從晶粒的配置工作.另一方面由于FPGA平臺(tái)選取了統(tǒng)一的架構(gòu)和相同型號(hào)的FPGA,就可以所有晶粒都采用一樣的FPGA配置文件,這樣只需要完成單晶粒的12顆FPGA平臺(tái)實(shí)現(xiàn)以后就可以同時(shí)支持多晶粒的互聯(lián)部署,這極大地提高了工作效率,縮短調(diào)試時(shí)間.
而多晶粒(多FPGA平臺(tái))的上電順序和互聯(lián)的信號(hào)和時(shí)鐘如何同步,也是一個(gè)亟待解決難題.結(jié)合Die間互聯(lián)協(xié)議和采樣的要求,我們引入了自適應(yīng)與軟件可配置的時(shí)延控制機(jī)制,成功實(shí)現(xiàn)了接口采樣的準(zhǔn)確互聯(lián)和信號(hào)同步,具體原理如圖5所示:
Fig.5 Adaptive delay synchronized logic
自適應(yīng)延遲電路嵌入接收端(RX),通過寄存器修正接收到信號(hào)延遲,本設(shè)計(jì)中根據(jù)延遲需求,采用800 MHz高頻時(shí)鐘(clk_hi)控制采樣時(shí)延,每個(gè)時(shí)延步長1.25 ns,共4 b控制,延遲區(qū)間范圍0~20 ns,可以覆蓋接口傳輸信號(hào)的全周期.
自適應(yīng)時(shí)延調(diào)整主要分6個(gè)步驟:
1)FPGA平臺(tái)系統(tǒng)上電完成,各平臺(tái)時(shí)鐘啟動(dòng)、Reset等釋放;
2)發(fā)送端復(fù)位完成后,自動(dòng)發(fā)送訓(xùn)練序列;
3)接收端狀態(tài)機(jī)根據(jù)采樣結(jié)果,不斷修正控制選擇寄存器,控制輸入信號(hào)以1.25 ns為步長持續(xù)滑動(dòng),以調(diào)整接收數(shù)據(jù)和采樣時(shí)鐘rx_clk之間相位;
4)當(dāng)接收信號(hào)符合預(yù)期后,控制狀態(tài)機(jī)結(jié)束時(shí)延修正,并通知發(fā)送端停止發(fā)送訓(xùn)練序列;
5)固件在啟動(dòng)序列中,會(huì)輪詢(polling)控制寄存器值,進(jìn)行軟硬件同步,確認(rèn)FPGA平臺(tái)間數(shù)據(jù)采樣同步完成;
6)軟件進(jìn)入下一步,控制FPGA平臺(tái)接口間進(jìn)行正常的數(shù)據(jù)傳輸,多晶粒FPGA平臺(tái)同步完成.
如何提高FPGA的調(diào)試能力,是FPGA平臺(tái)能否快速點(diǎn)亮部署和定位硬件/軟件問題的關(guān)鍵.基于傳統(tǒng)的FPGA自帶工具抓取信號(hào)的方法,常常受限于FPGA內(nèi)部存儲(chǔ)(memory)容量限制,不能觀察較多信號(hào),較長時(shí)間(信號(hào)深度).另一種方法是將信號(hào)外接到引腳(pin)借助邏輯分析儀等調(diào)試設(shè)備,也受限于可用引腳限制和采樣深度,只能選取一些關(guān)鍵信號(hào).而對(duì)于目標(biāo)驗(yàn)證芯片,其內(nèi)部數(shù)據(jù)總線的位寬較大,需要觀察信號(hào)也非常多,利用FPGA的I/O管腳做調(diào)試引腳常常會(huì)I/O數(shù)量不足.另一方面,在多核處理器芯片調(diào)試過程中,常常由于異構(gòu)多處理器架構(gòu)疊加多核多線程和分支預(yù)測(cè)、推測(cè)執(zhí)行等復(fù)雜技術(shù),導(dǎo)致問題表現(xiàn)得一定隨機(jī)性,有時(shí)候測(cè)試進(jìn)行幾個(gè)小時(shí)就能發(fā)現(xiàn)問題,有時(shí)候需要幾十個(gè)小時(shí)才能碰到問題,這就需要記錄多個(gè)處理器核的多個(gè)線程的長時(shí)間運(yùn)行指令序列(PC值),以進(jìn)一步分析和定位問題.針對(duì)這些調(diào)試難題,我們自研了基于以太網(wǎng)口的虛擬邏輯分析儀(VLA),其基本結(jié)構(gòu)如圖6所示.其主要分為3個(gè)功能模塊:信號(hào)獲取、信號(hào)傳輸、信號(hào)解析.
Fig.6 Basic architecture of VLA
VLA信號(hào)獲取是一個(gè)標(biāo)準(zhǔn)化的模塊,只需要實(shí)例化在設(shè)計(jì)中,然后將需要獲取信號(hào),或者調(diào)試總線等連接到該模塊頂層端口上,并連接上一致性的時(shí)鐘,復(fù)位和控制信號(hào)就可以完成信號(hào)的獲取,使用起來十分簡潔.
此外,還可以通過軟件配置寄存器來靈活控制VLA的觸發(fā)(trigger),可以在任意時(shí)刻或者軟件發(fā)現(xiàn)錯(cuò)誤時(shí)開始信號(hào)獲取、暫停、再獲取.結(jié)合軟件配置選擇調(diào)試信號(hào)的輸出,靈活地控制需要獲取時(shí)間段,信號(hào)深度等參數(shù).
最終的獲取信號(hào)會(huì)通過一個(gè)或多個(gè)以太網(wǎng)(Ethernet)硬件控制器自動(dòng)封包成符合Ethernet包(packet)格式的以太網(wǎng)包,并通過FPGA上以太網(wǎng)控制器發(fā)送出去,通過網(wǎng)絡(luò)傳輸給任意目標(biāo)主機(jī).由于調(diào)試信號(hào)是實(shí)時(shí)傳輸?shù)街鳈C(jī),幾乎不占有FPGA自身存儲(chǔ)空間,其信號(hào)的獲取深度理論上可以無限大(只要主機(jī)存儲(chǔ)空間足夠大),這成功地解決了FPGA自帶調(diào)試工具和外接邏輯分析儀等設(shè)備獲取調(diào)試信號(hào)深度有限的問題.
目標(biāo)主機(jī)可以通過常用的抓包程序(如Wire-shark,Sniffer等)捕獲以太網(wǎng)包,并存儲(chǔ)在特定文件中.結(jié)合信號(hào)的獲取順序和位寬,通過腳本簡單處理收到的以太網(wǎng)包中的數(shù)據(jù),再呈現(xiàn)給設(shè)計(jì)、驗(yàn)證及軟件人員.而且由于處理器系統(tǒng)級(jí)驗(yàn)證特殊性,在大部分情況下并不需要再看波形,只需要分析回放(replay)指令執(zhí)行序列,軟件工程師就可以直接定位出錯(cuò)的指令序列,十分易于調(diào)試,這極大地提高了工作效率.當(dāng)然,VLA不僅僅可以用于記錄程序執(zhí)行序列,根據(jù)調(diào)試驗(yàn)證模塊的不同,還可以記錄其他希望觀測(cè)調(diào)試的信號(hào).比如控制總線事務(wù),DDR讀寫序列(sequence),PCIe DMA序列等信息,這十分便于對(duì)相關(guān)模塊工作狀態(tài)的檢查和調(diào)試.
本節(jié)將介紹使用本文構(gòu)建完成的FPGA平臺(tái),結(jié)合異構(gòu)多核處理器的特點(diǎn),開展相關(guān)FPGA驗(yàn)證工作.
本目標(biāo)異構(gòu)多核處理器設(shè)計(jì)十分復(fù)雜,不同核組之間的規(guī)模和復(fù)雜度都相差較大,如圖2所示.其中尤以CISC核為甚,該大核需要占用較多的FPGA資源,且其初始化啟動(dòng)過程繁復(fù),用時(shí)較長,需要操作系統(tǒng)和驅(qū)動(dòng)軟件加載支持.如果在驗(yàn)證調(diào)試初期,希望能較快直接測(cè)試其他待測(cè)功能模塊(例如PCIe接口),這時(shí)可以利用異構(gòu)多核的特點(diǎn),使用另外的一個(gè)異構(gòu)的RISC核(簡稱小核)來完成PCIe的快速初始化和直接測(cè)試.此外,對(duì)于芯片的硅后問題定位,也可以在更簡單直接的小核系統(tǒng)中進(jìn)行復(fù)現(xiàn).
目標(biāo)異構(gòu)多核處理器,根據(jù)架構(gòu)設(shè)計(jì)情況,在正常工作時(shí),CISC,RISC,DSP核間各有任務(wù)分工.在FPGA驗(yàn)證過程中,為了更靈活地驗(yàn)證設(shè)計(jì),如圖1所示,這些核組都連接在芯片內(nèi)部的數(shù)據(jù)和控制總線上,因此可以完成異構(gòu)核間相互模擬替換,在更早階段,以更少的資源就可以開展其他各個(gè)高速外設(shè)模塊或處理器核間的交叉驗(yàn)證,這樣既節(jié)約了FPGA資源,又簡化平臺(tái)點(diǎn)亮,極大地加快了原型驗(yàn)證測(cè)試進(jìn)程.此外,采用大小核方式協(xié)調(diào)還十分有利于問題排除法定位,芯片硅后調(diào)試時(shí)也可以用于開展各個(gè)模塊(特別是各高速外設(shè))的問題復(fù)現(xiàn)(reproduce).為此我們引入了專用于FPGA原型驗(yàn)證和硅后驗(yàn)證的調(diào)試解釋外殼程序(調(diào)試SHELL).
調(diào)試SHELL是一組專用于FPGA原型驗(yàn)證和硅后問題復(fù)現(xiàn)的測(cè)試程序集合及其構(gòu)建的裸芯片(bare-metal)運(yùn)行環(huán)境,它可以靈活地內(nèi)嵌在異構(gòu)多核處理器正常啟動(dòng)流程的適當(dāng)階段.如圖7所示,調(diào)試SHELL作為工程開發(fā)模式一部分,在RISC處理器引導(dǎo)程序完成后,可以選擇是否進(jìn)入調(diào)試SHELL,調(diào)試SHELL一旦開啟,就可以以更靈活直觀方式對(duì)設(shè)計(jì)中的其他功能模塊或處理器核心進(jìn)行測(cè)試.
Fig.7 The flow of Debug SHELL
此外,調(diào)試SHELL由于不依賴于軟件庫(lib)和操作系統(tǒng)(operating system, OS),可以嵌入任何一種架構(gòu)的處理器核上執(zhí)行,使用起來非常靈活.除管理測(cè)試?yán)讨?,它還為測(cè)試?yán)烫峁┞阈酒?無BIOS,OS支持)的運(yùn)行環(huán)境,它主要有3方面重要功能:1)地址映射.CISC處理器、RISC處理器、DSP處理器數(shù)據(jù)通路差異,地址空間的映射不一樣,這需要調(diào)試SHELL來加載測(cè)試?yán)毯统跏蓟瘜?duì)應(yīng)處理器的堆??臻g等基本運(yùn)行環(huán)境.2)存儲(chǔ)管理.多個(gè)測(cè)試?yán)檀娣盼恢?、運(yùn)行地址、內(nèi)存和內(nèi)部SRAM空間分配和管理等.3)多測(cè)試?yán)毯唵尾l(fā).調(diào)試SHELL可以宏觀上“同時(shí)”啟動(dòng)多個(gè)測(cè)試?yán)蹋热鐪y(cè)試?yán)?主要測(cè)試PCIe,測(cè)試?yán)?測(cè)試USB,調(diào)試SHELL可以并發(fā)調(diào)度例程1和例程2執(zhí)行,讓PCIE,USB同時(shí)工作,從而能更真實(shí)模擬實(shí)際芯片工作場(chǎng)景,增加測(cè)試覆蓋率和測(cè)試壓力.
以調(diào)試SHELL工作在小核上為例,其主要工作劃分8個(gè)步驟:
1)FPGA平臺(tái)系統(tǒng)上電啟動(dòng);
2)管理處理器核組(小核)解復(fù)位,開始Bootcode管理程序執(zhí)行和系統(tǒng)初始化;
3)管理程序執(zhí)行完成,進(jìn)入是否開啟調(diào)試SHELL選項(xiàng),如果選擇開啟,進(jìn)入4),否則進(jìn)入正常啟動(dòng)執(zhí)行7);
4)調(diào)試SHELL初始化,并進(jìn)入交互界面,并選擇測(cè)試?yán)蘕進(jìn)入5),或選擇結(jié)束測(cè)試進(jìn)入1),重新啟動(dòng)系統(tǒng);
5)進(jìn)入測(cè)試?yán)蘕,并開啟對(duì)應(yīng)測(cè)試驗(yàn)證;
6)測(cè)試用例X執(zhí)行測(cè)試完成并反饋測(cè)試結(jié)果,返回4);
7)開啟引導(dǎo)程序流程,并解復(fù)位主處理器核(大核);
8)主處理器開始正常程序啟動(dòng)流程,完成系統(tǒng)啟動(dòng).
Fig.8 Stage of FPGA verification
通過構(gòu)建靈活可配置的FPGA平臺(tái),可以實(shí)現(xiàn)多核異構(gòu)處理器內(nèi)各核組、各模塊的FPGA原型驗(yàn)證,通過異構(gòu)處理器大小核互補(bǔ)迭代,可以方便實(shí)現(xiàn)芯片不同規(guī)模,不同研制階段,硅前、硅后驗(yàn)證及軟件開發(fā)測(cè)試需求,并為后續(xù)下一代項(xiàng)目提供快速評(píng)估平臺(tái).結(jié)合我們項(xiàng)目經(jīng)驗(yàn),主要分4個(gè)FPGA驗(yàn)證的不同階段,如圖8所示,參考每個(gè)階段發(fā)現(xiàn)的硬件設(shè)計(jì)問題、軟件問題及對(duì)項(xiàng)目的貢獻(xiàn)等因素可以計(jì)算FPGA在各個(gè)階段收獲的驗(yàn)證成果.
1)流片前驗(yàn)證階段(階段1).在流片前FPGA搭建、各個(gè)功能模塊點(diǎn)亮、后續(xù)固件(FW),主機(jī)BIOS、軟件驅(qū)動(dòng)的開發(fā),標(biāo)準(zhǔn)性能測(cè)試(SPEC)過程中,總共運(yùn)行了1 600多支測(cè)試(test cases),產(chǎn)出了一半的驗(yàn)證成果.由于該FPGA平臺(tái)最高可以運(yùn)行在14 MHz的頻率下,能夠進(jìn)行完整操作系統(tǒng)(OS)的啟動(dòng)全流程,同時(shí)可以對(duì)各功能模塊實(shí)施更多更廣泛的功能驗(yàn)證和全系統(tǒng)的性能測(cè)試.以O(shè)S啟動(dòng)為例,只需要40 min可以完成Linux啟動(dòng)過程,而這需要幾百億個(gè)時(shí)鐘周期,如果在傳統(tǒng)基于模擬驗(yàn)證的方式下幾乎無法在流片前完成.此外在這一階段,發(fā)現(xiàn)了一些嚴(yán)重的設(shè)計(jì)問題(bug),并得以在流片前及時(shí)修復(fù).
2)流片后到芯片回來階段(階段2).這一階段一般持續(xù)約9~16周.在這個(gè)階段雖然芯片已經(jīng)流片,但芯片并未回來,可以在這一段較短時(shí)間內(nèi)利用FPGA平臺(tái)完成軟件驅(qū)動(dòng)的開發(fā)測(cè)試、芯片壓力測(cè)試、性能分析等工作,并為芯片回來后的硅后驗(yàn)證做好準(zhǔn)備.在我們實(shí)際項(xiàng)目中,在這一階段內(nèi)雖然未曾發(fā)現(xiàn)芯片設(shè)計(jì)問題,但卻修復(fù)了多個(gè)系統(tǒng)軟件和I/O驅(qū)動(dòng)問題,整體貢獻(xiàn)了約10%驗(yàn)證成果.
3)硅后驗(yàn)證階段(階段3).這一階段芯片已經(jīng)回來,大量的軟硬件測(cè)試可以在芯片上直接進(jìn)行,F(xiàn)PGA平臺(tái)主要提供調(diào)試支持性工作.但從我們的項(xiàng)目經(jīng)驗(yàn)看,這一階段FPGA平臺(tái)卻提供了約25%的驗(yàn)證成果.在硅后驗(yàn)證發(fā)現(xiàn)的問題中,其中有3個(gè)極難在軟件模擬仿真中被復(fù)現(xiàn),最終都是通過FPGA平臺(tái)成功復(fù)現(xiàn),并采用第4節(jié)介紹的虛擬邏輯分析儀VLA,獲取到指令執(zhí)行序列和錯(cuò)誤波形,找出了問題的根源.并基于這些信息,才構(gòu)造了模擬仿真測(cè)試用例,用于芯片ECO(engineer change order)修復(fù)驗(yàn)證和后續(xù)項(xiàng)目的回歸測(cè)試集.
4)下一代芯片定義階段(階段4).由于同系列芯片的設(shè)計(jì)和驗(yàn)證天然具有繼承延續(xù)性,當(dāng)需要設(shè)計(jì)芯片下一代時(shí),架構(gòu)設(shè)計(jì)者經(jīng)常需要快速評(píng)估一些特性的價(jià)值,F(xiàn)PGA平臺(tái)由于其靈活可配置、迭代運(yùn)行速度快等優(yōu)勢(shì),能夠有效地用于下一代芯片的評(píng)估分析中.可以在FPGA平臺(tái)上快速修改部分處理器實(shí)現(xiàn)參數(shù),例如增大或減小處理器一級(jí)、二級(jí),三級(jí)緩存容量,調(diào)整發(fā)射隊(duì)、提交隊(duì)列深度、DDR訪存延遲、I/O延遲等,這對(duì)于架構(gòu)定義和性能優(yōu)化都十分有益.在我們的處理器研發(fā)過程中,這一階段在整個(gè)FPGA的生命周期中貢獻(xiàn)了約15%的成果.
本文針對(duì)一款高性能異構(gòu)多核處理器開展FPGA原型驗(yàn)證工作,選取了同構(gòu)對(duì)稱FPGA平臺(tái)對(duì)異構(gòu)多核高性能處理器的進(jìn)行FPGA驗(yàn)證.以層次化的方法自頂向下劃分FPGA功能,自底向上構(gòu)建FPGA平臺(tái),極大地簡化了FPGA構(gòu)建流程.采用差速橋和自適應(yīng)時(shí)延調(diào)整采樣等技術(shù),結(jié)合自研的內(nèi)嵌虛擬邏輯分析儀調(diào)試工具快速完成FPGA平臺(tái)的點(diǎn)亮和部署.運(yùn)用多核互補(bǔ)、核間替換模擬的調(diào)試SHELL等方法可以快速完成目標(biāo)高性能異構(gòu)多核處理器的FPGA驗(yàn)證.因此,本文提供針對(duì)異構(gòu)多核處理器的FPGA驗(yàn)證平臺(tái)搭建和驗(yàn)證方法是可行且十分高效的,經(jīng)過采用本文介紹的FPGA驗(yàn)證的目標(biāo)芯片,達(dá)到了預(yù)期設(shè)計(jì)目標(biāo).通過該FPGA原型驗(yàn)證平臺(tái),成功地完成了該芯片的硅前、硅后驗(yàn)證,軟硬件協(xié)同開發(fā)、測(cè)試、下一代芯片架構(gòu)評(píng)估等工作,為該系列芯片的全周期提供了有效的平臺(tái)保障,并可以推廣應(yīng)用于相類似的異構(gòu)多核處理器的FPGA平臺(tái)搭建和測(cè)試驗(yàn)證工作中.下一步我們將繼續(xù)結(jié)合異構(gòu)多核處理器架構(gòu)特征,研究更有效的FPGA平臺(tái)構(gòu)建和調(diào)試技術(shù),縮短平臺(tái)點(diǎn)亮?xí)r間,不斷提高FPGA平臺(tái)的調(diào)試和驗(yàn)證能力.