聶同攀,譚 特,周 密
(1.中航工業第一飛機設計研究院,陜西 西安 710089;2.北京航空航天大學 計算機學院,北京 100191;3.北京中航瑞博航空電子技術有限公司,北京 100085)
在嵌入式系統設計中,有時需要兩個或多個嵌入式微處理器芯片之間交互信息。例如,在分布式傳感器網絡中,用于傳感器數據采集的處理器需要將數據傳送給用于數據集成﹑處理的主控制器。
目前,大多數微處理器都采用串行接口通信,如以太網[1]﹑RS232[2]﹑電力線[3]等。串行通信有數據線少﹑實現簡單﹑十分適合遠距離通信等優點。然而,串行通信方式也有諸多不利,其中一個主要的不足是串行通信協議普遍都引入了數據包頭部。在某些小數據包頻繁發送的應用中,數據包頭部的大小甚至大于真實負載數據的大小,大大降低了帶寬利用率。在基于IEEE1451.3[4]標準的智能變送器系統中,出于擴展IO引腳等原因,每個變送器網絡接口模塊(TNIM)連接多個變送器通道模塊(TCM)。如果TNIM和各個TCM之間通過串行總線通信,則TNIM每請求讀取某個TCM上的某個傳感器的數據,首先需要在總線廣播TCM通道號和傳感器號。事實上,絕大多數傳感器數據都可以通過一位﹑兩位或四位表示,而TCM通道號和傳感器號需要數位表示。這樣真實數據負載的帶寬利用率將很低。
如果TNIM和各個TCM共享同一RAM芯片,各個TCM的微處理器將采集到的傳感器數據寫到特定的內存單元,那么TNIM只需要讀取特定的內存單元,即可獲取特定TCM上的特定傳感器數據。這樣就避免了TNIM發送TCM通道號和傳感器號,從而提高了真實數據負載的帶寬利用率。
文獻[5]提出了一種基于PCI總線的共享內存多處理器通信方案。然而,由于PCI總線不支持TAS(Test And Set)原子操作,所以其自旋鎖的實現并不理想。
基于上述問題,本文提出一種支持多個微處理器通過共享RAM進行通信的硬件接口設計方案。該接口設計方案采用一種基于菊花鏈的仲裁方式解決總線競爭問題。
如引言中的分析及描述,本設計實現多個CPU通過共享的RAM通信。為實現這樣的通信機制,參與通信的每個CPU都應當和用作通信介質的共享RAM相連接。
一種可行的連接方案是將多個板卡通過“上行端口”和“下行端口”堆疊在一起。如圖1所示,主仲裁板卡的排孔向通信板卡提供連接到RAM芯片的接口。各個通信板卡除了擁有用于將本地CPU信號線和RAM信號線相連的“上行端口”外,還有一個“下行端口”。該端口可向下級板卡提供連接到RAM信號線的接口。圖1繪制了兩個通信板卡通過共享主仲裁器中的RAM芯片來相互通信。事實上,2號通信板卡的下行端口還可以堆疊更多的通信板卡。這樣的“堆疊設計”可以使系統有較好的硬件可擴展性。

圖1 總體設計
可以看出,上述方案中,各個參與通信的CPU實際上共享同一組連接到RAM芯片的總線。因此,必須提供仲裁機制,以防總線爭用的發生。
本設計應用一種集中式的仲裁方式。如圖1所示,系統中有且只有一塊“主仲裁器卡”。這塊板卡上有用于多CPU通信的RAM芯片,以及用于解決總線競爭的“主仲裁器”。系統中其余的板卡為參與通信的“通信板卡”。每一塊通信板卡上除了有參與通信的本地CPU外,還有用于搶占共享總線使用權的“本地仲裁器”。本地仲裁器根據主仲裁器和上一級板卡提供的仲裁信號,決定本地CPU是否可以占用總線。如果仲裁信號有效,本地仲裁器將使能本地CPU和上行端口之間的三態門。這樣本地CPU的地址﹑數據和控制總線就和用于通信的共享RAM的相應信號線建立了連接。
由于多個處理器共享總線,當本地仲裁器未取得總線使用權時,應當通知本地CPU進行等待(即在訪存指令的執行期間內加入若干個等待周期)。因此,如圖1所示,本地仲裁器有連接到本地CPU的wait信號線。
本地仲裁器內部提供若干個寄存器,本地CPU可以讀寫這些寄存器來配置或控制本地仲裁器。這些寄存器包括計時器以及其他用于實現特殊功能的寄存器。
為防止因多處理器共享總線而帶來的總線競爭問題,本設計必須引入一種仲裁機制。而基于“菊花鏈”的仲裁機制十分適合本系統的多級堆疊結構。
菊花鏈仲裁是一種集中式仲裁機制,核心思想是通過由多個板卡級聯形成的“仲裁鏈”逐級傳播總線授權信號。處在仲裁鏈第一級板卡的本地仲裁器擁有最高仲裁優先級。該最高優先級的本地仲裁器根據本地CPU是否有訪問共享RAM的事務來決定是否占用總線,并為下級通信板卡生成仲裁信號(Arb1信號)。其余的下級n號板卡的本地仲裁器根據上一級仲裁器輸入的仲裁信號判斷總線是否已經被前級高優先級的通信板卡占用,并根據該輸入信號﹑本地CPU是否有訪存請求,為更下級n+1號板卡生成輸入仲裁信號(Arbn信號)。當某塊通信板卡獲得總線使用權后,它通過連接到主仲裁器的hold信號,向主控制器指示總線是否仍被占用。
圖2顯示了本方案對這種仲裁機制的具體實現。主仲裁器向每一個本地仲裁器廣播state信號和CurrNum信號。每個本地仲裁器接收state和CurrNum信號,并逐級連接用于仲裁的Arb信號和Hold信號。這樣的設計使得系統可以十分方便地添加或刪除通信板卡。

圖2 總線仲裁機制
主仲裁器廣播的state信號標識總線狀態,該信號的值僅由主仲裁器改變。總線有兩種狀態:事務狀態和仲裁狀態。在每一個時鐘周期,總線處于且僅處于一種狀態。在仲裁狀態對應的時鐘周期內,各個通信板卡搶占總線使用權;而在事務狀態對應的時鐘周期內,獲得總線使用權的板卡執行訪問共享RAM的操作。
圖3反映了總線狀態的遷移過程。板卡上電或手動復位后,總線處于仲裁狀態。Hold信號是唯一影響總線狀態遷移的信號,由各個本地仲裁器輸出的Hold信號組合而成。在仲裁狀態對應的時鐘周期內,如果某個板卡有待處理的訪問RAM的操作并獲得了總線使用權,則將Hold信號置為有效。該板卡的訪存事務完成后,將Hold置為無效。

圖3 總線狀態遷移
主仲裁器除了廣播用于標識總線狀態的State信號,還廣播CurrNum信號。該信號是為了實現循環優先級。如果系統中各個板卡的優先級是固定的,即處于仲裁鏈上端的板卡總是優先于下端的板卡訪問共享的RAM,那么有可能出現下游板卡的數據率很低的情況。為了實現各個CPU可以公平訪問RAM,應當在系統運行過程中動態改變各個板卡的優先級。
本設計采用“優先級輪轉”的策略動態調整各個板卡的優先級,即每個通信板卡輪流獲得最高優先級。主仲裁器在仲裁狀態對應的時鐘周期內,通過CurrNum信號標識當前最高優先級板卡的編號。與CurrNum對應的板卡將作為仲裁鏈的第一級板卡,之后主仲裁器對CurrNum加1并取模。這樣就實現了最高優先級在各個通信板卡之間的輪轉。
利用VHDL語言實現本設計中的主總裁器和本地仲裁器,并構造了一個簡單的CPU,用于模擬真實嵌入式微處理器STM32f207芯片在訪問外接PSRAM時的時序。在此基礎上,構造了四個CPU共享RAM的仿真測試系統,并用xilinx的仿真工具ISim軟件進行了仿真驗證。
圖4是仲裁算法的行為仿真結果,時鐘周期為10 ns。在從第3 625 ns(如波形圖部分的長豎線所示)開始的時鐘周期開始處,由于標識總線是否仍被占用的hold_out信號無效,所以標識總線狀態的arbstate_out信號遷移到了0x0000,即仲裁狀態。同時,用于廣播最高優先級編號的currentnum_out信號加1,表示此時1號板卡的優先級最高。

圖4 仿真結果
在該處于仲裁狀態的時鐘周期末,由于hold_out信號有效,所以arbstate_out又被遷移到了0x0001,即事務狀態。同時,與具體訪存事務相關的數據﹑地址和控制信號出現在了相關總線上。
第3 705 ns時,訪存事務結束。在第3 715 ns的時鐘上升沿處,hold_out信號變為無效。至此,總線仲裁算法的邏輯得到驗證。
從時序圖可以看出,仲裁算法導致了兩個時鐘周期的浪費。因此,總線的利用率U為:其中a表示一次完整的訪存事務所占的時鐘周期數。

本通信方案的吞吐量和主仲裁器的時鐘頻率內存芯片的訪存延遲有關。如果主仲裁器的始終頻率為fclk,且內存芯片的訪存時間折合a個主仲裁器周期,那么最大吞吐量為:

當主仲裁器的始終周期為50 MHz,且內存芯片的訪存時間折合3個時鐘周期時,系統的最大吞吐量為10 MB。
本文為解決嵌入式系統多處理器通信中串行通信協議開銷較大的問題,提出了一種基于“共享RAM”的通信方案。這種通信方案幾乎不引入任何協議開銷,從而有效解決了串行通信傳輸低效的問題。此外,本文提出了一種“多級堆疊”的板卡連接結構,可使單個通信板卡十分方便地連接到通信系統,從而使得系統有很好的可擴展性。在“多級堆疊”的基礎上,本文提出了一種基于“菊花鏈”的總線仲裁機制,解決了由多塊板卡同時訪問共享RAM時的沖突問題。未來,將進一步優化此方案,并將此方案應用到實際工程。
[1] 楊紫勝.嵌入式多功能接口轉換器的設計與實現[J].福建電腦,2008,24(06):154-155.
YANG Zi-sheng.The Design and Implementation of Embedded Multi-purpose Connection Switch[J].FuJian Computer,2008,24(06):154-155.
[2] 于海昕.嵌入式多功能Hub的設計與實現[D].廈門:廈門大學,2007.
YU Hai-xin.The Design and Implementation of Embedded Multifunction Hub[D].Xiamen:Xiamen University,2007.
[3] 鐘悠.基于VxWorks的嵌入式通信接口設備的設計與實現[D].西安:西北工業大學,2007.
ZHONG You.The Design and Implementation of Embedded Communication Interface Device Base on VxWorks[D].Xi’an:Northwestern Polytechnical University,2007.
[4] The Institute of Electrical and Electronics Engineers.Standard for a Smart Transducer Interface for Sensors and Actuators-Transducer to Microprocessor Communication Protocols and Transducer Electronic Data Sheet (TEDS)Formats for Distributed Multi-drop Systems,IEEE STD 1451.3-2003,IEEE Instrumentation and Measurement Society,TC-9[S].2004-03-31.
[5] 徐恪,吳建平,喻中超等.一種基于總線的多處理器共享內存機制[J].小型微型計算機系統,2003,24(03):321-326.
XU Ke,WU Jian-ping,YU Zhong-chao,et al.Multiprocessor Shared Memory Mechanism based on Bus[J].Small Microcomputer System,2003,24(03):321-326.