?

硬件信號量在多核處理器核間通信中的應用

2015-09-12 06:42劉德保汪安民韓道文
單片機與嵌入式系統應用 2015年1期
關鍵詞:信號量間通信寄存器

劉德保,汪安民,韓道文

(1.同方電子科技有限公司研究所,九江332009;2.解放軍電子工程學院)

引 言

多核處理器由于片內集成多個處理器,在對處理能力要求較高的應用場合得到了大規模使用;同時多核處理器的超強處理能力,也推動了產品功能的多樣化。目前,多核處理器主要以片內集成多款不同類型的處理芯片為主,一般集成FPGA/DSP/ARM/CPU 以及專用的協處理器等,如TI公司的AK2系列,集成多個DSP和多個ARM 核。此外,也有集成單一型號的多個處理器,如多核DSP 芯片TMS320C66系列,集成了2、4或8個同樣的DSP核。

多核處理器中的多個單核一般需要聯合工作,聯合工作時它們之間的通信、握手、數據交換非常重要。尤其是在軟件復雜度較高,且對運行時序要求嚴格的情況下,核間通信成為整個軟件的關鍵。核間通信一般有3種方式:共享數據空間、硬件中斷和任務中斷。共享數據空間,是指兩個核都可以訪問相同的內存空間,根據其信息來交換數據和狀態。該方式一般需要逐個核去查詢,但采用查詢方法一般很難適用于實時性要求較高的場合。硬件中斷方式,是核之間通過硬件中斷方式來通知狀態,這種方式實時性最高,可以實時響應中斷,但引起的問題是:如果存在多個任務,核間中斷會打斷正在運行的較高優先級的事件;如果在高級事件中屏蔽中斷,在多次中斷中只會響應最后一次中斷,導致前面的中斷丟失。為了解決這兩個問題,多核處理器一般采用任務中斷方式來實現核間信息交互。在單核的軟件中,任務是實時運行的進程,由信號量來觸發。一個任務完成后退出,信號量會減1,直到該任務對應的信號量為0;觸發一個任務,就會給該任務的信號量加1。在多核處理器中,將信號量做成硬件信號量(Hardware Semaphore)來實現核間通信,硬件信號量具有硬件中斷的實時性,又具有任務的排隊機制,可以較好地解決核間通信問題。

本文以8核DSP 芯片TMS320C6678為例介紹了硬件信號量的應用。文中詳細介紹了硬件信號量模塊的結構和寄存器組合,以及實現核間中斷的原理,最后以實例介紹兩個核之間利用硬件信號量交互信息的方法和流程。

1 多核DSP及其結構

TMS320C6678(C6678)是TI公司多核處理器中的一款8核浮點型DSP,最高工作頻率達到1.25GHz,單核可以提供40GMAC定點計算或者20GFLOPS浮點計算能力,單個芯片可以提供320GMAC 或者160GFLOPS計算能力。C6678的片內結構如圖1所示。

圖1 TMS320C6678內部結構圖

C6678的每個核具有32KB的程序、32KB的數據以及512KB的二級Cache存儲空間,芯片片內具有一個4 MB的共享SRAM。C6678具有DDR3控制器接口,可以外接DDR3,直接尋址范圍達到8GB。C6678的片內設有RapidIO、PCIe、EMIF以及I2C/SPI等接口,這些接口通過片內的TeraNet總線和各個處理器交互數據。從圖1中可以看出,核訪問共享RAM 的速度最快,它們之間不通過TeraNet,而是有專用的數據總線,也不會和其他外設產生沖突,每個核訪問共享RAM 的速率大概在50Gb/s。

每個核訪問DDR3的速度僅次于訪問共享RAM,因為DDR3的數據需要通過共享RAM 過渡,其訪問速度讀寫有所差別,讀速率可以到10 Gb/s,寫速率可以到20Gb/s。核訪問其他片內和片外設備都要經過TeraNet,可能存在總線仲裁,但這些外設一般不會長時間占據TeraNet總線。各個核通過TeraNet訪問硬件信號量,也可以通過TeraNet和HyperLink接口實現兩個芯片之間的硬件信號量訪問。

2 硬件信號量模塊

硬件信號量模塊的組成如圖2所示,主要由信號量模塊、寄存器組和中斷模塊3部分組成。

硬件信號量模塊由64個獨立的信號量組成,這64個信號量和硬件資源以及核之間沒有必然聯系,由軟件根據每個核處理任務的多少分配,任務多的核獲得更多的信號量。對信號量的訪問有3種方式:直接訪問(圖中的SEM_Dir)、間接訪問(SEM_inDir)和查詢方式(SEM_Query)。這3種方式軟件上訪問的方法都一樣,就是對相應的寄存器進行讀寫操作,但不同訪問方式的硬件響應機制不同。

直接訪問方式下,如果該信號量空閑,訪問的核將馬上捕獲該信號量;如果該信號量被其他核占用,將返回,整個訪問工作結束。

間接訪問方式和直接訪問的唯一差別就是當該信號量被占用時,訪問的事件被發布到隊列中排隊,一旦信號量被其他核釋放,隊列采用先進先出的方式給相應的核發出中斷,相應的核占用該信號量。

查詢方式是利用寄存器查詢信號量的狀態。這3種訪問方式的狀態如表1所列。

表1 三種硬件信號量訪問的狀態

圖2 硬件信號量模塊

硬件信號量有兩個中斷,其中一個為正常的捕獲中斷,該中斷由讀寫寄存器啟動,由信號量被釋放觸發,反映到EOI(End Of Interrupt)寄存器,該寄存器發送中斷到相應的CPU,CPU 根據中斷標志寄存器中(高32個信號量反映到FLAGH_0,低32個信號量反映到FLAGL_0)的標志位識別是來自哪個信號量的中斷。CPU 完成中斷服務程序,退出中斷時要通過FLAG_C 寄存器來清除標志位,為下一次中斷作準備;CPU 也可以通過FLAG_S寄存器人為設置一個中斷標志,產生一個中斷。

硬件信號量的另外一個中斷為錯誤中斷,當出現錯誤訪問時會產生該中斷,中斷響應及操作方法與捕獲中斷類似。產生錯誤的情況有:去釋放某個空閑信號量;去釋放其他核占用的信號量;捕獲一個自身占用的信號量;多次去捕獲一個被占用的信號量。

3 軟件設計

硬件信號量的軟件設計主要包括初始化、中斷響應和中斷服務程序。由于硬件信號量是用于核間通信,使得調試工作需要在多個核之間切換,查閱各自寄存器。

因為是核間通信,采用單核常用的斷點和單步這些調試方法將非常困難,需要軟件設計者非常清晰地了解多個核的程序運行情況。

下面是核0和核1之間通過硬件信號量10來實現通信的例子。軟件流程如圖3所示。

圖3 軟件流程

首先各個核進行各自寄存器的初始化,主要包括硬件信號量寄存器和中斷寄存器的初始化。

需要注意的是,由于每個核都進行初始化,而且每個核都可以訪問這些寄存器,所以不能出現配置的紊亂,也不能出現多個核同時對某個寄存器配置的情況,這樣可能會寫入錯誤數據(即使在寫入同樣數據情況下)。

為了避免核1首先搶占信號量10,程序中核0先鎖定核1,然后確保自己可以捕獲到信號量10,捕獲后釋放核1,此時核1可以請求硬件信號量10。

但此時,信號量10被核0占用,核1無法得到請求,核1的請求被放到請求隊列中,核1的請求任務結束,可以進行其他任務。一旦核0釋放了信號量10,核1會收到一個硬件中斷,因為中斷優先級高于任務,核1將響應該中斷,進入中斷服務程序,完成中斷服務程序后會繼續執行被打斷的任務。

硬件信號量的中斷服務程序一般用于共享RAM 的讀寫,因為共享RAM 只有一組數據總線,無法實現多個核同時讀寫。如果多個核同時讀寫該空間,會出現等待現象,使得處理器的使用效率降低。

如果時序處理不好,會出現總線互鎖現象,使得程序無法進行。采用硬件信號量后,可以按照優先排隊方法進行隊列管理,而且由于一個核不可能多次申請一個硬件信號量,所以在軟件上很容易管理。如果軟件功能較多、設計復雜,可以通過增加硬件信號量來區分,最多可以增加64個硬件信號量,基本能夠滿足當前處理器的要求。

結 語

硬件信號量是多核處理器中一種新模塊,它將單核的信號量硬件化,實現快速實時的操作,并和硬件中斷聯系在一起,實現了多核之間的握手協議。硬件信號量具有相應的隊列排隊機制,既不會出現中斷丟失問題,也不會出現多次訪問問題。硬件信號量解決了常規硬件中斷中多次中斷不響應會丟失的問題,實現了軟件和硬件的相結合,在多核軟件編程中,是比較好的一種核間通信機制。

[1]李巖,谷萍萍.硬件實時操作系統信號量管理的設計與實現[J].電子技術應用,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]丁有源,汪安民.基于多核任務并行處理的DSP軟硬件設計[J].單片機與嵌入式系統應用,2012(5).

猜你喜歡
信號量間通信寄存器
STM32和51單片機寄存器映射原理異同分析
Lite寄存器模型的設計與實現
綜合航電分區間通信元模型設計研究
Nucleus PLUS操作系統信號量機制的研究與測試
一種適用于遠距離星間鏈路通信的設計
linux下多值信號量的操作探討
工信部:未來1到2年增設七個國家級骨干直聯點
μC/OS- -III對信號量的改進
Linux操作系統信號量機制的實時化改造
高速數模轉換器AD9779/AD9788的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合