劉德保,汪安民,韓道文
(1.同方電子科技有限公司研究所,九江332009;2.解放軍電子工程學院)
引 言
多核處理器由于片內(nèi)集成多個處理器,在對處理能力要求較高的應(yīng)用場合得到了大規(guī)模使用;同時多核處理器的超強處理能力,也推動了產(chǎn)品功能的多樣化。目前,多核處理器主要以片內(nèi)集成多款不同類型的處理芯片為主,一般集成FPGA/DSP/ARM/CPU 以及專用的協(xié)處理器等,如TI公司的AK2系列,集成多個DSP和多個ARM 核。此外,也有集成單一型號的多個處理器,如多核DSP 芯片TMS320C66系列,集成了2、4或8個同樣的DSP核。
多核處理器中的多個單核一般需要聯(lián)合工作,聯(lián)合工作時它們之間的通信、握手、數(shù)據(jù)交換非常重要。尤其是在軟件復雜度較高,且對運行時序要求嚴格的情況下,核間通信成為整個軟件的關(guān)鍵。核間通信一般有3種方式:共享數(shù)據(jù)空間、硬件中斷和任務(wù)中斷。共享數(shù)據(jù)空間,是指兩個核都可以訪問相同的內(nèi)存空間,根據(jù)其信息來交換數(shù)據(jù)和狀態(tài)。該方式一般需要逐個核去查詢,但采用查詢方法一般很難適用于實時性要求較高的場合。硬件中斷方式,是核之間通過硬件中斷方式來通知狀態(tài),這種方式實時性最高,可以實時響應(yīng)中斷,但引起的問題是:如果存在多個任務(wù),核間中斷會打斷正在運行的較高優(yōu)先級的事件;如果在高級事件中屏蔽中斷,在多次中斷中只會響應(yīng)最后一次中斷,導致前面的中斷丟失。為了解決這兩個問題,多核處理器一般采用任務(wù)中斷方式來實現(xiàn)核間信息交互。在單核的軟件中,任務(wù)是實時運行的進程,由信號量來觸發(fā)。一個任務(wù)完成后退出,信號量會減1,直到該任務(wù)對應(yīng)的信號量為0;觸發(fā)一個任務(wù),就會給該任務(wù)的信號量加1。在多核處理器中,將信號量做成硬件信號量(Hardware Semaphore)來實現(xiàn)核間通信,硬件信號量具有硬件中斷的實時性,又具有任務(wù)的排隊機制,可以較好地解決核間通信問題。
本文以8核DSP 芯片TMS320C6678為例介紹了硬件信號量的應(yīng)用。文中詳細介紹了硬件信號量模塊的結(jié)構(gòu)和寄存器組合,以及實現(xiàn)核間中斷的原理,最后以實例介紹兩個核之間利用硬件信號量交互信息的方法和流程。
TMS320C6678(C6678)是TI公司多核處理器中的一款8核浮點型DSP,最高工作頻率達到1.25GHz,單核可以提供40GMAC定點計算或者20GFLOPS浮點計算能力,單個芯片可以提供320GMAC 或者160GFLOPS計算能力。C6678的片內(nèi)結(jié)構(gòu)如圖1所示。
圖1 TMS320C6678內(nèi)部結(jié)構(gòu)圖
C6678的每個核具有32KB的程序、32KB的數(shù)據(jù)以及512KB的二級Cache存儲空間,芯片片內(nèi)具有一個4 MB的共享SRAM。C6678具有DDR3控制器接口,可以外接DDR3,直接尋址范圍達到8GB。C6678的片內(nèi)設(shè)有RapidIO、PCIe、EMIF以及I2C/SPI等接口,這些接口通過片內(nèi)的TeraNet總線和各個處理器交互數(shù)據(jù)。從圖1中可以看出,核訪問共享RAM 的速度最快,它們之間不通過TeraNet,而是有專用的數(shù)據(jù)總線,也不會和其他外設(shè)產(chǎn)生沖突,每個核訪問共享RAM 的速率大概在50Gb/s。
每個核訪問DDR3的速度僅次于訪問共享RAM,因為DDR3的數(shù)據(jù)需要通過共享RAM 過渡,其訪問速度讀寫有所差別,讀速率可以到10 Gb/s,寫速率可以到20Gb/s。核訪問其他片內(nèi)和片外設(shè)備都要經(jīng)過TeraNet,可能存在總線仲裁,但這些外設(shè)一般不會長時間占據(jù)TeraNet總線。各個核通過TeraNet訪問硬件信號量,也可以通過TeraNet和HyperLink接口實現(xiàn)兩個芯片之間的硬件信號量訪問。
硬件信號量模塊的組成如圖2所示,主要由信號量模塊、寄存器組和中斷模塊3部分組成。
硬件信號量模塊由64個獨立的信號量組成,這64個信號量和硬件資源以及核之間沒有必然聯(lián)系,由軟件根據(jù)每個核處理任務(wù)的多少分配,任務(wù)多的核獲得更多的信號量。對信號量的訪問有3種方式:直接訪問(圖中的SEM_Dir)、間接訪問(SEM_inDir)和查詢方式(SEM_Query)。這3種方式軟件上訪問的方法都一樣,就是對相應(yīng)的寄存器進行讀寫操作,但不同訪問方式的硬件響應(yīng)機制不同。
直接訪問方式下,如果該信號量空閑,訪問的核將馬上捕獲該信號量;如果該信號量被其他核占用,將返回,整個訪問工作結(jié)束。
間接訪問方式和直接訪問的唯一差別就是當該信號量被占用時,訪問的事件被發(fā)布到隊列中排隊,一旦信號量被其他核釋放,隊列采用先進先出的方式給相應(yīng)的核發(fā)出中斷,相應(yīng)的核占用該信號量。
查詢方式是利用寄存器查詢信號量的狀態(tài)。這3種訪問方式的狀態(tài)如表1所列。
表1 三種硬件信號量訪問的狀態(tài)
圖2 硬件信號量模塊
硬件信號量有兩個中斷,其中一個為正常的捕獲中斷,該中斷由讀寫寄存器啟動,由信號量被釋放觸發(fā),反映到EOI(End Of Interrupt)寄存器,該寄存器發(fā)送中斷到相應(yīng)的CPU,CPU 根據(jù)中斷標志寄存器中(高32個信號量反映到FLAGH_0,低32個信號量反映到FLAGL_0)的標志位識別是來自哪個信號量的中斷。CPU 完成中斷服務(wù)程序,退出中斷時要通過FLAG_C 寄存器來清除標志位,為下一次中斷作準備;CPU 也可以通過FLAG_S寄存器人為設(shè)置一個中斷標志,產(chǎn)生一個中斷。
硬件信號量的另外一個中斷為錯誤中斷,當出現(xiàn)錯誤訪問時會產(chǎn)生該中斷,中斷響應(yīng)及操作方法與捕獲中斷類似。產(chǎn)生錯誤的情況有:去釋放某個空閑信號量;去釋放其他核占用的信號量;捕獲一個自身占用的信號量;多次去捕獲一個被占用的信號量。
硬件信號量的軟件設(shè)計主要包括初始化、中斷響應(yīng)和中斷服務(wù)程序。由于硬件信號量是用于核間通信,使得調(diào)試工作需要在多個核之間切換,查閱各自寄存器。
因為是核間通信,采用單核常用的斷點和單步這些調(diào)試方法將非常困難,需要軟件設(shè)計者非常清晰地了解多個核的程序運行情況。
下面是核0和核1之間通過硬件信號量10來實現(xiàn)通信的例子。軟件流程如圖3所示。
圖3 軟件流程
首先各個核進行各自寄存器的初始化,主要包括硬件信號量寄存器和中斷寄存器的初始化。
需要注意的是,由于每個核都進行初始化,而且每個核都可以訪問這些寄存器,所以不能出現(xiàn)配置的紊亂,也不能出現(xiàn)多個核同時對某個寄存器配置的情況,這樣可能會寫入錯誤數(shù)據(jù)(即使在寫入同樣數(shù)據(jù)情況下)。
為了避免核1首先搶占信號量10,程序中核0先鎖定核1,然后確保自己可以捕獲到信號量10,捕獲后釋放核1,此時核1可以請求硬件信號量10。
但此時,信號量10被核0占用,核1無法得到請求,核1的請求被放到請求隊列中,核1的請求任務(wù)結(jié)束,可以進行其他任務(wù)。一旦核0釋放了信號量10,核1會收到一個硬件中斷,因為中斷優(yōu)先級高于任務(wù),核1將響應(yīng)該中斷,進入中斷服務(wù)程序,完成中斷服務(wù)程序后會繼續(xù)執(zhí)行被打斷的任務(wù)。
硬件信號量的中斷服務(wù)程序一般用于共享RAM 的讀寫,因為共享RAM 只有一組數(shù)據(jù)總線,無法實現(xiàn)多個核同時讀寫。如果多個核同時讀寫該空間,會出現(xiàn)等待現(xiàn)象,使得處理器的使用效率降低。
如果時序處理不好,會出現(xiàn)總線互鎖現(xiàn)象,使得程序無法進行。采用硬件信號量后,可以按照優(yōu)先排隊方法進行隊列管理,而且由于一個核不可能多次申請一個硬件信號量,所以在軟件上很容易管理。如果軟件功能較多、設(shè)計復雜,可以通過增加硬件信號量來區(qū)分,最多可以增加64個硬件信號量,基本能夠滿足當前處理器的要求。
結(jié) 語
硬件信號量是多核處理器中一種新模塊,它將單核的信號量硬件化,實現(xiàn)快速實時的操作,并和硬件中斷聯(lián)系在一起,實現(xiàn)了多核之間的握手協(xié)議。硬件信號量具有相應(yīng)的隊列排隊機制,既不會出現(xiàn)中斷丟失問題,也不會出現(xiàn)多次訪問問題。硬件信號量解決了常規(guī)硬件中斷中多次中斷不響應(yīng)會丟失的問題,實現(xiàn)了軟件和硬件的相結(jié)合,在多核軟件編程中,是比較好的一種核間通信機制。
[1]李巖,谷萍萍.硬件實時操作系統(tǒng)信號量管理的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2010(11).
[2]Texas Instruments Inc.TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor Data Manual[EB/OL].(2013-04)[2014-07].http://www.ti.com/.
[3]Texas Instruments Inc.KeyStone Architecture Semaphore2 Hardware Module User Guide[EB/OL].(2012-04)[2014-07].http://www.ti.com/.
[4]丁有源,汪安民.基于多核任務(wù)并行處理的DSP軟硬件設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2012(5).