聶同攀,譚 特,周 密
(1.中航工業(yè)第一飛機(jī)設(shè)計(jì)研究院,陜西 西安 710089;2.北京航空航天大學(xué) 計(jì)算機(jī)學(xué)院,北京 100191;3.北京中航瑞博航空電子技術(shù)有限公司,北京 100085)
在嵌入式系統(tǒng)設(shè)計(jì)中,有時(shí)需要兩個(gè)或多個(gè)嵌入式微處理器芯片之間交互信息。例如,在分布式傳感器網(wǎng)絡(luò)中,用于傳感器數(shù)據(jù)采集的處理器需要將數(shù)據(jù)傳送給用于數(shù)據(jù)集成﹑處理的主控制器。
目前,大多數(shù)微處理器都采用串行接口通信,如以太網(wǎng)[1]﹑RS232[2]﹑電力線[3]等。串行通信有數(shù)據(jù)線少﹑實(shí)現(xiàn)簡單﹑十分適合遠(yuǎn)距離通信等優(yōu)點(diǎn)。然而,串行通信方式也有諸多不利,其中一個(gè)主要的不足是串行通信協(xié)議普遍都引入了數(shù)據(jù)包頭部。在某些小數(shù)據(jù)包頻繁發(fā)送的應(yīng)用中,數(shù)據(jù)包頭部的大小甚至大于真實(shí)負(fù)載數(shù)據(jù)的大小,大大降低了帶寬利用率。在基于IEEE1451.3[4]標(biāo)準(zhǔn)的智能變送器系統(tǒng)中,出于擴(kuò)展IO引腳等原因,每個(gè)變送器網(wǎng)絡(luò)接口模塊(TNIM)連接多個(gè)變送器通道模塊(TCM)。如果TNIM和各個(gè)TCM之間通過串行總線通信,則TNIM每請求讀取某個(gè)TCM上的某個(gè)傳感器的數(shù)據(jù),首先需要在總線廣播TCM通道號和傳感器號。事實(shí)上,絕大多數(shù)傳感器數(shù)據(jù)都可以通過一位﹑兩位或四位表示,而TCM通道號和傳感器號需要數(shù)位表示。這樣真實(shí)數(shù)據(jù)負(fù)載的帶寬利用率將很低。
如果TNIM和各個(gè)TCM共享同一RAM芯片,各個(gè)TCM的微處理器將采集到的傳感器數(shù)據(jù)寫到特定的內(nèi)存單元,那么TNIM只需要讀取特定的內(nèi)存單元,即可獲取特定TCM上的特定傳感器數(shù)據(jù)。這樣就避免了TNIM發(fā)送TCM通道號和傳感器號,從而提高了真實(shí)數(shù)據(jù)負(fù)載的帶寬利用率。
文獻(xiàn)[5]提出了一種基于PCI總線的共享內(nèi)存多處理器通信方案。然而,由于PCI總線不支持TAS(Test And Set)原子操作,所以其自旋鎖的實(shí)現(xiàn)并不理想。
基于上述問題,本文提出一種支持多個(gè)微處理器通過共享RAM進(jìn)行通信的硬件接口設(shè)計(jì)方案。該接口設(shè)計(jì)方案采用一種基于菊花鏈的仲裁方式解決總線競爭問題。
如引言中的分析及描述,本設(shè)計(jì)實(shí)現(xiàn)多個(gè)CPU通過共享的RAM通信。為實(shí)現(xiàn)這樣的通信機(jī)制,參與通信的每個(gè)CPU都應(yīng)當(dāng)和用作通信介質(zhì)的共享RAM相連接。
一種可行的連接方案是將多個(gè)板卡通過“上行端口”和“下行端口”堆疊在一起。如圖1所示,主仲裁板卡的排孔向通信板卡提供連接到RAM芯片的接口。各個(gè)通信板卡除了擁有用于將本地CPU信號線和RAM信號線相連的“上行端口”外,還有一個(gè)“下行端口”。該端口可向下級板卡提供連接到RAM信號線的接口。圖1繪制了兩個(gè)通信板卡通過共享主仲裁器中的RAM芯片來相互通信。事實(shí)上,2號通信板卡的下行端口還可以堆疊更多的通信板卡。這樣的“堆疊設(shè)計(jì)”可以使系統(tǒng)有較好的硬件可擴(kuò)展性。
圖1 總體設(shè)計(jì)
可以看出,上述方案中,各個(gè)參與通信的CPU實(shí)際上共享同一組連接到RAM芯片的總線。因此,必須提供仲裁機(jī)制,以防總線爭用的發(fā)生。
本設(shè)計(jì)應(yīng)用一種集中式的仲裁方式。如圖1所示,系統(tǒng)中有且只有一塊“主仲裁器卡”。這塊板卡上有用于多CPU通信的RAM芯片,以及用于解決總線競爭的“主仲裁器”。系統(tǒng)中其余的板卡為參與通信的“通信板卡”。每一塊通信板卡上除了有參與通信的本地CPU外,還有用于搶占共享總線使用權(quán)的“本地仲裁器”。本地仲裁器根據(jù)主仲裁器和上一級板卡提供的仲裁信號,決定本地CPU是否可以占用總線。如果仲裁信號有效,本地仲裁器將使能本地CPU和上行端口之間的三態(tài)門。這樣本地CPU的地址﹑數(shù)據(jù)和控制總線就和用于通信的共享RAM的相應(yīng)信號線建立了連接。
由于多個(gè)處理器共享總線,當(dāng)本地仲裁器未取得總線使用權(quán)時(shí),應(yīng)當(dāng)通知本地CPU進(jìn)行等待(即在訪存指令的執(zhí)行期間內(nèi)加入若干個(gè)等待周期)。因此,如圖1所示,本地仲裁器有連接到本地CPU的wait信號線。
本地仲裁器內(nèi)部提供若干個(gè)寄存器,本地CPU可以讀寫這些寄存器來配置或控制本地仲裁器。這些寄存器包括計(jì)時(shí)器以及其他用于實(shí)現(xiàn)特殊功能的寄存器。
為防止因多處理器共享總線而帶來的總線競爭問題,本設(shè)計(jì)必須引入一種仲裁機(jī)制。而基于“菊花鏈”的仲裁機(jī)制十分適合本系統(tǒng)的多級堆疊結(jié)構(gòu)。
菊花鏈仲裁是一種集中式仲裁機(jī)制,核心思想是通過由多個(gè)板卡級聯(lián)形成的“仲裁鏈”逐級傳播總線授權(quán)信號。處在仲裁鏈第一級板卡的本地仲裁器擁有最高仲裁優(yōu)先級。該最高優(yōu)先級的本地仲裁器根據(jù)本地CPU是否有訪問共享RAM的事務(wù)來決定是否占用總線,并為下級通信板卡生成仲裁信號(Arb1信號)。其余的下級n號板卡的本地仲裁器根據(jù)上一級仲裁器輸入的仲裁信號判斷總線是否已經(jīng)被前級高優(yōu)先級的通信板卡占用,并根據(jù)該輸入信號﹑本地CPU是否有訪存請求,為更下級n+1號板卡生成輸入仲裁信號(Arbn信號)。當(dāng)某塊通信板卡獲得總線使用權(quán)后,它通過連接到主仲裁器的hold信號,向主控制器指示總線是否仍被占用。
圖2顯示了本方案對這種仲裁機(jī)制的具體實(shí)現(xiàn)。主仲裁器向每一個(gè)本地仲裁器廣播state信號和CurrNum信號。每個(gè)本地仲裁器接收state和CurrNum信號,并逐級連接用于仲裁的Arb信號和Hold信號。這樣的設(shè)計(jì)使得系統(tǒng)可以十分方便地添加或刪除通信板卡。
圖2 總線仲裁機(jī)制
主仲裁器廣播的state信號標(biāo)識總線狀態(tài),該信號的值僅由主仲裁器改變??偩€有兩種狀態(tài):事務(wù)狀態(tài)和仲裁狀態(tài)。在每一個(gè)時(shí)鐘周期,總線處于且僅處于一種狀態(tài)。在仲裁狀態(tài)對應(yīng)的時(shí)鐘周期內(nèi),各個(gè)通信板卡搶占總線使用權(quán);而在事務(wù)狀態(tài)對應(yīng)的時(shí)鐘周期內(nèi),獲得總線使用權(quán)的板卡執(zhí)行訪問共享RAM的操作。
圖3反映了總線狀態(tài)的遷移過程。板卡上電或手動復(fù)位后,總線處于仲裁狀態(tài)。Hold信號是唯一影響總線狀態(tài)遷移的信號,由各個(gè)本地仲裁器輸出的Hold信號組合而成。在仲裁狀態(tài)對應(yīng)的時(shí)鐘周期內(nèi),如果某個(gè)板卡有待處理的訪問RAM的操作并獲得了總線使用權(quán),則將Hold信號置為有效。該板卡的訪存事務(wù)完成后,將Hold置為無效。
圖3 總線狀態(tài)遷移
主仲裁器除了廣播用于標(biāo)識總線狀態(tài)的State信號,還廣播CurrNum信號。該信號是為了實(shí)現(xiàn)循環(huán)優(yōu)先級。如果系統(tǒng)中各個(gè)板卡的優(yōu)先級是固定的,即處于仲裁鏈上端的板卡總是優(yōu)先于下端的板卡訪問共享的RAM,那么有可能出現(xiàn)下游板卡的數(shù)據(jù)率很低的情況。為了實(shí)現(xiàn)各個(gè)CPU可以公平訪問RAM,應(yīng)當(dāng)在系統(tǒng)運(yùn)行過程中動態(tài)改變各個(gè)板卡的優(yōu)先級。
本設(shè)計(jì)采用“優(yōu)先級輪轉(zhuǎn)”的策略動態(tài)調(diào)整各個(gè)板卡的優(yōu)先級,即每個(gè)通信板卡輪流獲得最高優(yōu)先級。主仲裁器在仲裁狀態(tài)對應(yīng)的時(shí)鐘周期內(nèi),通過CurrNum信號標(biāo)識當(dāng)前最高優(yōu)先級板卡的編號。與CurrNum對應(yīng)的板卡將作為仲裁鏈的第一級板卡,之后主仲裁器對CurrNum加1并取模。這樣就實(shí)現(xiàn)了最高優(yōu)先級在各個(gè)通信板卡之間的輪轉(zhuǎn)。
利用VHDL語言實(shí)現(xiàn)本設(shè)計(jì)中的主總裁器和本地仲裁器,并構(gòu)造了一個(gè)簡單的CPU,用于模擬真實(shí)嵌入式微處理器STM32f207芯片在訪問外接PSRAM時(shí)的時(shí)序。在此基礎(chǔ)上,構(gòu)造了四個(gè)CPU共享RAM的仿真測試系統(tǒng),并用xilinx的仿真工具ISim軟件進(jìn)行了仿真驗(yàn)證。
圖4是仲裁算法的行為仿真結(jié)果,時(shí)鐘周期為10 ns。在從第3 625 ns(如波形圖部分的長豎線所示)開始的時(shí)鐘周期開始處,由于標(biāo)識總線是否仍被占用的hold_out信號無效,所以標(biāo)識總線狀態(tài)的arbstate_out信號遷移到了0x0000,即仲裁狀態(tài)。同時(shí),用于廣播最高優(yōu)先級編號的currentnum_out信號加1,表示此時(shí)1號板卡的優(yōu)先級最高。
圖4 仿真結(jié)果
在該處于仲裁狀態(tài)的時(shí)鐘周期末,由于hold_out信號有效,所以arbstate_out又被遷移到了0x0001,即事務(wù)狀態(tài)。同時(shí),與具體訪存事務(wù)相關(guān)的數(shù)據(jù)﹑地址和控制信號出現(xiàn)在了相關(guān)總線上。
第3 705 ns時(shí),訪存事務(wù)結(jié)束。在第3 715 ns的時(shí)鐘上升沿處,hold_out信號變?yōu)闊o效。至此,總線仲裁算法的邏輯得到驗(yàn)證。
從時(shí)序圖可以看出,仲裁算法導(dǎo)致了兩個(gè)時(shí)鐘周期的浪費(fèi)。因此,總線的利用率U為:其中a表示一次完整的訪存事務(wù)所占的時(shí)鐘周期數(shù)。
本通信方案的吞吐量和主仲裁器的時(shí)鐘頻率內(nèi)存芯片的訪存延遲有關(guān)。如果主仲裁器的始終頻率為fclk,且內(nèi)存芯片的訪存時(shí)間折合a個(gè)主仲裁器周期,那么最大吞吐量為:
當(dāng)主仲裁器的始終周期為50 MHz,且內(nèi)存芯片的訪存時(shí)間折合3個(gè)時(shí)鐘周期時(shí),系統(tǒng)的最大吞吐量為10 MB。
本文為解決嵌入式系統(tǒng)多處理器通信中串行通信協(xié)議開銷較大的問題,提出了一種基于“共享RAM”的通信方案。這種通信方案幾乎不引入任何協(xié)議開銷,從而有效解決了串行通信傳輸?shù)托У膯栴}。此外,本文提出了一種“多級堆疊”的板卡連接結(jié)構(gòu),可使單個(gè)通信板卡十分方便地連接到通信系統(tǒng),從而使得系統(tǒng)有很好的可擴(kuò)展性。在“多級堆疊”的基礎(chǔ)上,本文提出了一種基于“菊花鏈”的總線仲裁機(jī)制,解決了由多塊板卡同時(shí)訪問共享RAM時(shí)的沖突問題。未來,將進(jìn)一步優(yōu)化此方案,并將此方案應(yīng)用到實(shí)際工程。
[1] 楊紫勝.嵌入式多功能接口轉(zhuǎn)換器的設(shè)計(jì)與實(shí)現(xiàn)[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的設(shè)計(jì)與實(shí)現(xiàn)[D].廈門:廈門大學(xué),2007.
YU Hai-xin.The Design and Implementation of Embedded Multifunction Hub[D].Xiamen:Xiamen University,2007.
[3] 鐘悠.基于VxWorks的嵌入式通信接口設(shè)備的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西北工業(yè)大學(xué),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] 徐恪,吳建平,喻中超等.一種基于總線的多處理器共享內(nèi)存機(jī)制[J].小型微型計(jì)算機(jī)系統(tǒng),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.