姜欣寧 桂小林 姜晨煒
摘 要: 為了解決高校學(xué)生多核處理器的設(shè)計(jì)與實(shí)現(xiàn)困難的問題,介紹了一種多核處理器的設(shè)計(jì)思想和實(shí)現(xiàn)方法。該方法利用了面向?qū)ο蠹夹g(shù)將多核處理器的工作原理抽象出來,在ISE平臺上通過高級編程語言完成從模型設(shè)計(jì)到HLS編碼,再到具體硬件布局實(shí)現(xiàn)的完整過程。該方法和硬件描述語言(VHL)設(shè)計(jì)方法相比較,大大降低了FPGA設(shè)計(jì)的復(fù)雜度,提高了系統(tǒng)的開發(fā)效率,并且對于從事軟件設(shè)計(jì)的編程人員也可以通過C/C++進(jìn)行FPGA的設(shè)計(jì)。它為高校學(xué)生進(jìn)行多核處理器(模型機(jī))的開發(fā)提供了一種新型的、實(shí)用的、高效的設(shè)計(jì)思路和方法。
關(guān)鍵詞: 多核處理器; FPGA; HLS; ARM; 高效率
中圖分類號:TP332 文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2015)09-47-04
Multi-core processor design with C/C++
Jiang Xinning, Gui Xiaolin, Jiang Chenwei
(Xi'an Jiaotong university institute of telecommunications, Xi'an, Shanxi 710049, China)
Abstract: In order to solve the problem of the design and implementation of the multi-core processor for college students, this paper introduces a design idea and implementation method of multi-core processor. The method uses object-oriented technology to abstract the work principle of multi-core processor, and on the ISE platform, the complete process from the model design to the HLS encoding and then to the specific hardware layout realization, is completed through the advanced programming language. Comparing with the design method of hardware description language (VHL), this method greatly reduces the complexity of FPGA design, improves the development efficiency of the system, and ensures that the software programmer can also use C/C++ to achieve the design of FPGA. It provides a new, practical and efficient design method for college students to develop multi-core processor (model machine).
Key words: multi-core processor; FPGA; HLS; ARM; high efficiency
0 引言
學(xué)習(xí)和掌握一個(gè)計(jì)算機(jī)模型機(jī)的設(shè)計(jì)和實(shí)現(xiàn)方法,對于培養(yǎng)學(xué)生理論聯(lián)系實(shí)際、創(chuàng)新能力及培養(yǎng)計(jì)算機(jī)系統(tǒng)的設(shè)計(jì)人才,都有著十分重要的意義。目前在高校的計(jì)算機(jī)專業(yè)課程實(shí)驗(yàn)教學(xué)中,基本上是以單處理器為教學(xué)對象,而現(xiàn)實(shí)的應(yīng)用中,主流處理器均是多核的處理器,它相對于單核處理器具有更高的指令并行執(zhí)行能力,它能大大提高指令執(zhí)行效率,進(jìn)而提高整個(gè)系統(tǒng)的效率。所以開展多核處理器的研究和設(shè)計(jì)是我們教學(xué)改革的一個(gè)有益嘗試。
我們開展單核處理器設(shè)計(jì)的實(shí)驗(yàn)教學(xué)已有八年多了。利用硬件描述語言(如VHDL,Verilog HDL等)在FPGA上實(shí)現(xiàn)單核處理器的的功能設(shè)計(jì)是目前國內(nèi)外比較通用的方法,相比于微處理器,它具有功耗低,設(shè)計(jì)周期短,開發(fā)費(fèi)用低等特點(diǎn)。隨著計(jì)算機(jī)技術(shù)的迅猛發(fā)展,雙(多)核處理器被廣泛應(yīng)用在各個(gè)領(lǐng)域,讓計(jì)算機(jī)、電子等相關(guān)專業(yè)的學(xué)生掌握其中的設(shè)計(jì)思想是十分必要的。然而,在硬件電路上完成多核處理器系統(tǒng)設(shè)計(jì)并不是一件容易的事,因?yàn)樾枰喾矫娴目紤],如系統(tǒng)的邏輯結(jié)構(gòu)、復(fù)雜的接口等問題,以及較高的知識門檻和豐富的實(shí)際設(shè)計(jì)經(jīng)驗(yàn)。若在教學(xué)實(shí)踐中讓學(xué)生設(shè)計(jì),則難以在有限的時(shí)間內(nèi)完成它。另外,這相關(guān)的開發(fā)資料十分匱乏。為此,本文給出了一種新的設(shè)計(jì)思想及描述了完整的實(shí)現(xiàn)的過程;較好地解決了以上問題。
1 雙核/多核處理器系統(tǒng)設(shè)計(jì)
1.1 開發(fā)平臺
本項(xiàng)目采用了我們自己研制的“XJECA開放式計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)系統(tǒng)(開發(fā)板)”。開發(fā)板的核心部件是Xilinx公司的Zynq-7000 All Programmable SoC(Zynq-7020)器件,它在一個(gè)芯片內(nèi)將ARM雙核Cortex-A9 MPCore處理系統(tǒng)(PS)與可擴(kuò)展的可編程邏輯架構(gòu)(PL)完美地結(jié)合在一起。芯片內(nèi)部采用了業(yè)界事實(shí)標(biāo)準(zhǔn)的AMBA總線作為片上系統(tǒng)的互連總線;它可支持雙核Cortex-A9處理器系統(tǒng)作為主控部件以及可編程邏輯的定制和外設(shè)的并行開發(fā)[9]。軟件開發(fā)平臺采用Xilinx公司的ISE14.*(或Vivado)。
1.2 系統(tǒng)架構(gòu)的設(shè)計(jì)
本項(xiàng)目設(shè)計(jì)為同構(gòu)的處理模塊組成多核處理器結(jié)構(gòu),類似Intel的雙核處理器的設(shè)計(jì)思路,如圖1所示。每個(gè)處理模塊中有獨(dú)自的數(shù)據(jù)和指令cache,訪存操作則通過各自的內(nèi)存管理器進(jìn)行,而內(nèi)存管理器由統(tǒng)一的總線協(xié)調(diào)模塊管理,分配給不同的處理單元不同的訪存地址,并且解決各個(gè)處理器訪存沖突問題。這里處理單元CPU0,CPU1,CPU2…及其相對應(yīng)的數(shù)據(jù)指令cache通過FPGA(PL)設(shè)計(jì)實(shí)現(xiàn),而內(nèi)存管理器的總線協(xié)調(diào)模塊則用ARM(PS)來實(shí)現(xiàn)[1-8]。
1.3 單核處理模塊的設(shè)計(jì)
在“傳統(tǒng)”CPU(運(yùn)算器、寄存器和控制器)的基礎(chǔ)上,另加高速緩存cache單元,構(gòu)成新的單核處理模塊。
通過Cache機(jī)制進(jìn)行預(yù)測。預(yù)測數(shù)據(jù)主要是基于程序訪問的局部性原理。Cache的替換算法有很多種,本文采用了先入先出算法(FIFO)。
1.4 指令系統(tǒng)設(shè)計(jì)
采用自定義的定長精簡指令集。指令的長度為32位,指令格式分為6個(gè)段,各段分別表示:指令類型、尋找方式、操作碼、源操作數(shù)、目的操作數(shù)、立即數(shù)。如圖2所示。
為便于說明,我們對功能作了簡化,在ALU中只用到十種運(yùn)算,所以只用到前十個(gè)操作碼,后面22個(gè)操作碼用于以后拓展操作。而對于訪存操作來說,第24~29位代表了訪存操作的源和目的數(shù)據(jù)來源。其中第27~29位表示了源操作數(shù)的來源,第24~26位表示目的操作來源。一共有4種尋址方式,分別是寄存器尋址,直接尋找,寄存器間接尋址和立即數(shù)。
1.5 HLS的利用
在FPGA上進(jìn)行復(fù)雜的系統(tǒng)設(shè)計(jì),利用傳統(tǒng)的方法(硬件描述語言)設(shè)計(jì),在時(shí)間有限的情況下會(huì)有較大的困難;為解決這一局限性問題,我們利用了高級綜合工具(HLS)的特性;能夠大幅度提高設(shè)計(jì)效率,可以站在更高的層次、以一種全新的角度來設(shè)計(jì),即FPGA的設(shè)計(jì)更加重視“系統(tǒng)級”建模。設(shè)計(jì)的效率取決于設(shè)計(jì)者對傳統(tǒng)“軟件串行執(zhí)行”和“硬件并行執(zhí)行”的理解程度。特別適合從事傳統(tǒng)的“軟件”設(shè)計(jì)、編程人員通過HLS工具進(jìn)行FPGA的設(shè)計(jì)。HLS的主要功能,包括以下方面[12-13]。
⑴ 可以從C語言描述級的源代碼創(chuàng)建一個(gè)RTL級實(shí)現(xiàn)。從C源代碼提取出控制和數(shù)據(jù)流。
⑵ 實(shí)現(xiàn)多樣的設(shè)計(jì):較小的設(shè)計(jì),較快速的設(shè)計(jì),優(yōu)化的設(shè)計(jì)。可以比較方便進(jìn)行各種復(fù)雜系統(tǒng)的設(shè)計(jì)方法的“探索”。
⑶ 可以從C代碼提取硬件結(jié)構(gòu),包括:從C代碼中提取控制和數(shù)據(jù)通道(頂層)。在頂層控制流的一些點(diǎn),將控制傳遞到子程序中;能并行地執(zhí)行子程序。
⑷ 通過調(diào)度和綁定過程,HLS將C代碼映射到硬件。
⑸ HLS工具的優(yōu)勢在可移植性及實(shí)現(xiàn)設(shè)計(jì)和IP“重用”等。
1.6 設(shè)計(jì)步驟
⑴ 使用C++技術(shù)對設(shè)計(jì)好的處理器的每個(gè)部件進(jìn)行編碼,并且通過HLS工具來生成對應(yīng)的硬件描述語言以及對應(yīng)的RTL級視圖。
與傳統(tǒng)的硬件描述語言設(shè)計(jì)相比較,描述設(shè)計(jì)過程更抽象,它可以忽略器件的一些硬件細(xì)節(jié),相關(guān)的功能都可以交給HLS工具來自動(dòng)生成。
⑵ 對控制器的HLS編碼,包括了取指令、指令譯碼和指令跳轉(zhuǎn)等操作,由于指令是從外部存儲(chǔ)器中獲取,模塊所需的接口為外部數(shù)據(jù)總線和一些讀寫控制信號,以及一些標(biāo)準(zhǔn)接口的信號。外部數(shù)據(jù)總線應(yīng)該與實(shí)驗(yàn)板中的核心芯片Zynq-7020內(nèi)的ARM上的總線連接。
⑶ 多核控制器的HLS編碼,因?yàn)槭峭瑯?gòu)多核系統(tǒng),所以可以將設(shè)計(jì)的單核處理模塊作為一個(gè)類來使用,同時(shí)針對這個(gè)類生成多個(gè)實(shí)例,通過多核控制器來給每個(gè)實(shí)例分配對應(yīng)的內(nèi)存地址空間。
2 多核處理器的實(shí)現(xiàn)
一個(gè)完整的多核系統(tǒng)需要把設(shè)計(jì)的處理器模塊(FPGA)與ARM配合起來使用。通過ARM來實(shí)現(xiàn)我們所設(shè)計(jì)FPGA上的多核處理器核間任務(wù)調(diào)度工作和FPGA訪存工作。這些需要對ARM進(jìn)行程序開發(fā)[10-11]。
2.1 生成Pcore
首先需要生成處理器RTL級模型對應(yīng)的Pcore,然后將其添加到ARM的外設(shè)中,建立起ARM和FPGA之間的聯(lián)系。操作步驟如下:
使用指令創(chuàng)建Pcore;在HLS工具中選擇Directive標(biāo)簽,右鍵選擇Insert Directive,在下拉框內(nèi)選擇RESOURCE。RESOURCE是用于在一個(gè)RTL接口上,添加一個(gè)總線接口。這樣就為我們所需要的信號創(chuàng)建地址映射,然后就可以通過軟件訪問到。另一種方法是不在頂層模塊上使用RESOURCE命令,而是為各個(gè)信號創(chuàng)建一個(gè)單獨(dú)的接口。通過使用GPIO IP核,將這些端口連接到處理器系統(tǒng)中。最后,在HLS工具的主界面菜單下選擇Solution->Export RTL,生成Pcore核。
2.2 ARM的編程
⑴ 通過創(chuàng)建一個(gè)ARM處理器系統(tǒng)(過程略),用于對HLS生成的處理器進(jìn)行驗(yàn)證。
在Xilinx工具中打開Xilinx Platform Studio,創(chuàng)建一個(gè)新的設(shè)計(jì)工程。首先開始對外設(shè)參數(shù)進(jìn)行配置,然后將我們上面所生成的Pcore核導(dǎo)入到本設(shè)計(jì)中。
⑵ 使用SDK設(shè)計(jì)和實(shí)現(xiàn)應(yīng)用工程。
使用SDK生成新的應(yīng)用工程,導(dǎo)入應(yīng)用程序,并對應(yīng)用工程進(jìn)行驗(yàn)證。在SDK主界面中,創(chuàng)建一個(gè)新的應(yīng)用工程,并導(dǎo)入用HLS生成Pcore核時(shí)的一些頭文件和定義的操作函數(shù)。配置SDK開發(fā)環(huán)境后,進(jìn)行ARM模塊的編程。該模塊主要實(shí)現(xiàn)了對FPGA中的處理器進(jìn)行多核控制執(zhí)行操作。最終得到執(zhí)行結(jié)果。
3 測試結(jié)果與分析
3.1 處理器整體結(jié)構(gòu)圖
由各部件的HLS編碼后生成最終的處理器模型,其中關(guān)鍵性的多核器件的構(gòu)成十分復(fù)雜,如圖3所示(或圖略):
從圖3中可以大致看出,這個(gè)處理器由上百個(gè)小器件通過復(fù)雜的連接構(gòu)成,若單純用硬件描述語言來描述,將會(huì)是一個(gè)很大的工程;它生成的vhd文件代碼有1500多行,而用HLS來描述只需要約140行代碼。以此說明HLS技術(shù)從系統(tǒng)層面上來描述所需的應(yīng)用,大大的提高了設(shè)計(jì)的效率。
3.2 處理器的調(diào)試及仿真
我們可以用HLS工具對設(shè)計(jì)出來的處理器在C語言模式下進(jìn)行調(diào)試,以檢測設(shè)計(jì)的正確性,處理器調(diào)試程序代碼如下。
我們先分別賦給寄存器r0,r1的值為0×100(即十進(jìn)制的256),然后相加,并把結(jié)果放入內(nèi)存地址5單元,最后得到了正確的結(jié)果512,這說明我們所設(shè)計(jì)的處理器在邏輯上是正確的。
3.3 多核處理器運(yùn)行分析
本例對于不同數(shù)目的核,在處理器上運(yùn)行1萬次乘法所需要的時(shí)間來進(jìn)行性能比較。
⑴ 執(zhí)行如下代碼
⑵ 實(shí)驗(yàn)結(jié)果分析
不同數(shù)目核的處理器運(yùn)行,經(jīng)過四次實(shí)驗(yàn)后得到的結(jié)果如表1及圖4所示。
由表1和圖4中可以看出,從單核到雙核的過程,運(yùn)行效率提高的比較明顯,而從二核到四核并不是很明顯,到達(dá)八核以后,運(yùn)行的效率反而比四核的要慢一些, 其原因可能是當(dāng)核的數(shù)目增加時(shí),核間任務(wù)調(diào)度的時(shí)間會(huì)變得更長,還可能跟每個(gè)核啟動(dòng)的一些固有時(shí)間有關(guān),這樣導(dǎo)致了當(dāng)核數(shù)目增加到一定時(shí),繼續(xù)增加反而會(huì)導(dǎo)致效率降低。對于本次設(shè)計(jì)的處理器系統(tǒng),運(yùn)行在四核情況下能達(dá)到其最高的運(yùn)行效率。
通過在設(shè)計(jì)的處理器上分別調(diào)用其單核,雙核,四核和八核完成的實(shí)驗(yàn),得到了一些多核處理器性能方面的結(jié)論,同時(shí)也驗(yàn)證了本系統(tǒng)的正確性和可執(zhí)行性。
⑶ FPGA資源使用情況
從表2的FPGA資源使用情況可以看出,使用HLS工具生成的硬件電路資源利用率還是很高的。
4 結(jié)束語
本文利用ARM、C/C++及HLS技術(shù),從系統(tǒng)結(jié)構(gòu)框架、指令代碼系統(tǒng)、主要部件組成等方面進(jìn)行了完整而全面的設(shè)計(jì)并給予驗(yàn)證。闡明了該方法可以大大降低設(shè)計(jì)一個(gè)計(jì)算機(jī)(模型機(jī))系統(tǒng)的復(fù)雜度,也證明了這種設(shè)計(jì)思路和方法的可行性。它為今后高校計(jì)算機(jī)系統(tǒng)教學(xué)中進(jìn)行高效率、較復(fù)雜系統(tǒng)的設(shè)計(jì)及方法驗(yàn)證提供了一種新的途徑。
本項(xiàng)目仍有一些內(nèi)容有待改進(jìn)。例如,在HLS技術(shù)中,C對底層電路的內(nèi)在關(guān)系(時(shí)序方面)還需進(jìn)一步描述。今后需要在ARM中增加編譯器功能;可以將多核的任務(wù)調(diào)度功能直接加入FPGA的設(shè)計(jì);并且使FPGA和ARM完全的獨(dú)立工作,以便FPGA的移植。
參考文獻(xiàn):
[1] 彭曉明,郭浩然,龐建民.多核處理器——技術(shù)、趨勢和挑戰(zhàn)[J].計(jì)算機(jī)科學(xué),2012.11.14.
[2] 聶鵬程.多核處理器上的操作系統(tǒng)調(diào)度[D].西安電子科技大學(xué),2013.
[3] 朱丹.基于FPGA的多核處理器系統(tǒng)的研究與設(shè)計(jì)[D].燕山大學(xué),2013.
[4] 范曉亮.基于FPGA的雙核模型機(jī)CPU的設(shè)計(jì)與實(shí)現(xiàn)[D].東北大學(xué),2008.
[5] 章鳴嬛.基于可重構(gòu)技術(shù)的雙核微處理器系統(tǒng)的設(shè)計(jì)[J].微型電腦應(yīng)用,2011.7.20.
[6] 姑蘇飄雪.龍爭虎斗AMD_lntel雙核處理器技術(shù)解析[J].電腦迷,2006.4.15.
[7] 岳虹.嵌入式異構(gòu)多核處理器設(shè)計(jì)與實(shí)現(xiàn)關(guān)鍵技術(shù)研究[D] 國防科學(xué)技術(shù)大學(xué),2006.
[8] 英特爾亞太研發(fā)有限公司.多核多線程技術(shù)[M].上海交通大學(xué)出版社,2011.
[9] 何賓.Xilinx ALL Programmable Zynq-7000 SOC設(shè)計(jì)指南[M].清華大學(xué)出版社,2013.
[10] 張亮.基于Xilinx FPGA的多核嵌入式系統(tǒng)設(shè)計(jì)基礎(chǔ)[J].西安電子科技大學(xué),2011.
[11] 李寧.ARM Cortex-A8處理器原理與應(yīng)用[M].北京航空航天出版社,2012.
[12] xilinx.Introduction to FPGA Design with Vivado HLS[M/OL].www.xilinx.com,2013.
[13] John Curreri, Greg Stitt, and Alan D. George. High-Level Synthesis of In-Circuit Assertions for Verification, Debugging, and Timing Analysis[J]. International Journal of Reconfigurable Computing,2011.