<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > NiosII多核處理器之間通信技術(shù)的研究

          NiosII多核處理器之間通信技術(shù)的研究

          作者:清華電工電子中心清華-Altera聯(lián)合實(shí)驗(yàn)室 高兵 秦儉 陳莉平 唐光榮 時(shí)間:2008-04-16 來(lái)源:電子產(chǎn)品世界 收藏

            引言

          本文引用地址:http://www.ex-cimer.com/article/81623.htm

            隨著應(yīng)用領(lǐng)域的擴(kuò)大,人們對(duì)微處理器系統(tǒng)的性能、功耗和成本提出了越來(lái)越嚴(yán)格的要求。單純依靠提升時(shí)鐘的方法已經(jīng)不能滿足需要,在移動(dòng)通信、軍事應(yīng)用、消費(fèi)電子、智能控制設(shè)備等領(lǐng)域,的解決方案成為一種主流趨勢(shì)。

            Altera公司在其FPGA中實(shí)現(xiàn)的處理器是一個(gè)用戶可配置的通用32位RISC軟核微處理器,Nios II 5.0及其以上版本支持多處理器系統(tǒng)的創(chuàng)建和調(diào)試。Nios II多處理器,除了軟核本身超過(guò)200DMIPS的高性能之外,Altera開發(fā)用于Nios/處理器的Avalon參數(shù)化接口總線具有友好的多主從仲裁能力,可以有效地實(shí)現(xiàn)系統(tǒng)資源共享。在清華-Altera聯(lián)合實(shí)驗(yàn)室的支持下,筆者對(duì)之間共享通信的幾種可行方案進(jìn)行研究,并且在自行設(shè)計(jì)的NiosII開發(fā)板上完成設(shè)計(jì)測(cè)試驗(yàn)證,分析比較各種方案的技術(shù)特點(diǎn)、優(yōu)勢(shì)與不足,提供給不同系統(tǒng)的應(yīng)用者參考。

            NiosII多核間幾種可行的通信方案

            雙口RAM和PIO核的多核中斷通信方案

            雙處理器可采用一個(gè)雙口RAM和中斷信號(hào)通過(guò)定義某種信息數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行通信。在NiosII雙處理器系統(tǒng),可以采用FPGA中實(shí)現(xiàn)的片上雙口RAM和通用IO組件PIO核來(lái)實(shí)現(xiàn)多核中斷通信。通信的中斷信號(hào)使用PIO組件產(chǎn)生和接收,雙核通信的連接如圖1所示。由于Avalon總線具有多主從仲裁能力,同一外設(shè)可以同時(shí)掛載在不同軟核上,有訪問(wèn)競(jìng)爭(zhēng)時(shí)由總線自己仲裁決定哪個(gè)主方取得從設(shè)備訪問(wèn)權(quán),雙口RAM和單口RAM均可以通過(guò)Avalon總線掛載在多個(gè)NiosII軟核上,二者的區(qū)別在于:雙口RAM設(shè)備有兩套從端口被Avalon總線當(dāng)作兩個(gè)設(shè)備,雙核可以同時(shí)對(duì)其進(jìn)行讀操作;單口RAM只有一套從端口被Avalon總線當(dāng)作一個(gè)設(shè)備,多核對(duì)其的讀寫操作是分時(shí)進(jìn)行的。

            這里設(shè)計(jì)雙核通過(guò)雙口RAM和PIO中斷進(jìn)行通信的例程。設(shè)計(jì)信息交換的數(shù)據(jù)結(jié)構(gòu)share_msg_buf如表1所示。安裝中斷程序及終端服務(wù)例程如圖2所示。

            通信的關(guān)鍵在于消息標(biāo)志flag狀態(tài)的定義:NO_DATA-內(nèi)存空閑、DATA_IN-有新消息寫入、DATA_OUT-新消息已送出,單個(gè)軟核處理器在存儲(chǔ)器空閑(NO_DATA狀態(tài))或者有消息進(jìn)入(DATA_IN狀態(tài))將新消息讀走之后才能在存儲(chǔ)區(qū)寫入新的消息數(shù)據(jù);在自己發(fā)的消息還未被對(duì)方接收(DATA_OUT狀態(tài))時(shí),不做處理,返回繼續(xù)等待對(duì)方接收消息。標(biāo)志狀態(tài)的定義從軟件上實(shí)現(xiàn)了雙核對(duì)雙口RAM的互斥訪問(wèn),有效防止雙核對(duì)共享數(shù)據(jù)的破壞。這種通信方案經(jīng)過(guò)筆者的NiosII雙核系統(tǒng)驗(yàn)證測(cè)試,消息接收正確。

            互斥硬核和共享存儲(chǔ)的多核查詢通信方案

            Altera在SOPC Builder工具箱中提供具有Avalon接口的互斥硬核Mutex組件來(lái)協(xié)調(diào)共享資源的訪問(wèn)。Mutex核提供一個(gè)基于硬件的原子測(cè)試和置位(test-and-set)操作,允許多處理器環(huán)境下決定軟核對(duì)Mutex核的使用權(quán),使用Mutex核就可實(shí)現(xiàn)多核對(duì)相應(yīng)共享資源(如存儲(chǔ)器)的互斥訪問(wèn)。這樣多核的通信就可以舍棄雙口RAM,使用片上RAM或者片外存儲(chǔ)器作為共享存儲(chǔ)器,采用查詢方式實(shí)現(xiàn)。雙核通信的設(shè)備連接如圖3所示,與雙口RAM不同,這里的片上RAM僅作為一個(gè)設(shè)備掛載到Avalon總線上。

            Altera提供NiosII HAL環(huán)境下對(duì)Mutex核訪問(wèn)的函數(shù):打開、加鎖、解鎖、判斷Mutex屬主等。使用Mutex核控制片上RAM,單個(gè)軟核每次對(duì)片上RAM操作之前都要首先取得Mutex核所有權(quán),操作完之后應(yīng)立即放棄對(duì)Mutex核的所有權(quán),避免單個(gè)軟核對(duì)Mutex核及共享資源的獨(dú)占。采用前面表所定義的數(shù)據(jù)結(jié)構(gòu)作為通信的消息,在查詢方式下,單個(gè)軟核需要有任務(wù)通過(guò)循環(huán)不斷檢查共享數(shù)據(jù)區(qū)標(biāo)志位flag,等待其它軟核送來(lái)消息,以便激活自身系統(tǒng)掛起的任務(wù),執(zhí)行下一步工作。整個(gè)流程如圖4所示。

            在循環(huán)中使用等待延時(shí),避免了多核對(duì)Mutex核資源的不停爭(zhēng)用,同時(shí)留給處理器一定的消息處理時(shí)間,但缺點(diǎn)是延長(zhǎng)了通信呼叫和應(yīng)答的時(shí)間,在實(shí)時(shí)設(shè)計(jì)中應(yīng)考慮到延時(shí)時(shí)長(zhǎng)對(duì)的影響。此方案在筆者的NiosII雙核系統(tǒng)工程中通過(guò)驗(yàn)證。

            郵箱內(nèi)核和共享存儲(chǔ)的多核阻塞通信方案

            Altera還提供帶Avalon接口的郵箱內(nèi)核mailbox組件在之間發(fā)送消息。郵箱內(nèi)核含有兩個(gè)互斥體:一個(gè)保證對(duì)共享存儲(chǔ)器的唯一寫訪問(wèn);另一個(gè)保證對(duì)共享存儲(chǔ)器的唯一讀訪問(wèn),它與獨(dú)立共享存儲(chǔ)器一起使用實(shí)現(xiàn)多核處理器間的消息隊(duì)列通信。郵箱內(nèi)核適于雙核間單方向的消息通信,功能相當(dāng)于FIFO緩沖隊(duì)列,其傳送的消息往往是指向共享內(nèi)存塊結(jié)構(gòu)體的指針,代替實(shí)際的數(shù)據(jù)傳輸,提高數(shù)據(jù)交換效率。該系統(tǒng)連接如圖5所示。

            在NiosII HAL環(huán)境下對(duì)郵箱內(nèi)核訪問(wèn)的函數(shù)有:打開、關(guān)閉、獲取消息、等待消息、發(fā)送消息。在構(gòu)建郵箱內(nèi)核組件時(shí),選擇可用的共享存儲(chǔ)器作為消息隊(duì)列內(nèi)存,指定消息隊(duì)列長(zhǎng)度size(不超過(guò)存儲(chǔ)器容量)及其在存儲(chǔ)器中的偏移量Offset。這里選擇片上RAM作為共享存儲(chǔ)器,將其分為兩部分:一部分作為消息隊(duì)列內(nèi)存;一部分作為消息指針指向的內(nèi)存數(shù)據(jù)結(jié)構(gòu)塊。定義內(nèi)存數(shù)據(jù)結(jié)構(gòu)如表2所示,頭信息info可以作為數(shù)據(jù)幀的序號(hào),保證數(shù)據(jù)的按序接收。使用郵箱內(nèi)核消息隊(duì)列完成雙核間大量數(shù)據(jù)傳輸?shù)牧鞒倘鐖D6時(shí)進(jìn)行等待;數(shù)據(jù)接受方處理器處于等待消息的狀態(tài),一有消息就接收進(jìn)來(lái)??梢栽趯?shí)時(shí)操作系統(tǒng)中單獨(dú)建立發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的任務(wù),由于沒(méi)有中斷和查詢過(guò)程,此方案可以達(dá)到單方向很高的數(shù)據(jù)傳輸率,在筆者的NiosII系統(tǒng)工程中得到了驗(yàn)證測(cè)試。



            通用串行接口總線的方案

            在NiosII多核處理器中可以使用通用串行接口總線如UART、SPI、I2C等進(jìn)行相互間的通信。這些總線有的是NiosII的通用組件在SOPC Builder中直接添加使用,有的可成熟的第三方組件在SOPC Builder中使用。目前NiosII中可用的幾種串行總線如表3所示。

            幾種總線各有優(yōu)缺點(diǎn)和使用限制,例如UART總線比較通用、工作在異步方式,使用方便,但針對(duì)一對(duì)一的通信,數(shù)據(jù)率稍低;SPI總線工作在同步方式,一個(gè)主設(shè)備可以掛多個(gè)從設(shè)備,數(shù)據(jù)率較高,但控制比UART復(fù)雜、數(shù)據(jù)線較多。應(yīng)根據(jù)具體應(yīng)用選擇合適總線。這里以UART總線說(shuō)明和驗(yàn)證通用串行接口總線完成多核間通信的方案。UART核是Altera提供的NiosII通用組件,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的寄存器映像的Avalon從接口,可以很容易集成到NiosII處理器中,允許主外設(shè)(如NiosII軟核)通過(guò)讀寫寄存器與其進(jìn)行通信。UART核至少創(chuàng)建Rxd輸入和Txd輸出兩個(gè)IO端口,可根據(jù)需要?jiǎng)?chuàng)建CTS輸入和RTS輸出兩個(gè)流控信號(hào)。這里為每個(gè)NiosII軟核創(chuàng)建一個(gè)無(wú)流控波特率為1.152Mbps的UART組件,其發(fā)送端口Txd與另外一方的接收Rxd連接。NiosII HAL提供UART系統(tǒng)庫(kù)驅(qū)動(dòng)程序,可使用ANSC C標(biāo)準(zhǔn)函數(shù)或者UNIX風(fēng)格IO函數(shù)訪問(wèn)UART,雙核通信流程如圖7所示。

            雙核中的數(shù)據(jù)發(fā)送方查詢監(jiān)測(cè)輸入字符,出現(xiàn)關(guān)鍵字時(shí)發(fā)送數(shù)據(jù),并以結(jié)束符結(jié)束發(fā)送;數(shù)據(jù)接收方等待用戶輸入字符命令,如果是關(guān)鍵字則開始接收數(shù)據(jù),在收到結(jié)束符時(shí)結(jié)束接收,處理數(shù)據(jù)。這個(gè)方案實(shí)現(xiàn)的是數(shù)據(jù)接收方請(qǐng)求發(fā)送,在筆者NiosII系統(tǒng)工程中以1.152Mbps傳輸大數(shù)據(jù)量,驗(yàn)證測(cè)試沒(méi)有問(wèn)題。也可以根據(jù)實(shí)際需要使用其它方案。

            PIO核自定義協(xié)議的方案

            Altera為NiosII提供并行輸入/輸出PIO核,在Avalon從端口和通用I/O端口之間建立存儲(chǔ)器映像接口,PIO組件可配置為輸入、輸出、輸入輸出、雙向三態(tài)四種類型,其中后三種類型可提供信號(hào)邊沿捕獲(Edge Capture)和中斷請(qǐng)求。利用PIO并口可將雙核連接起來(lái),定義自己的接口形式和通信訪問(wèn)協(xié)議進(jìn)行通信。雙核間的互連使用的是FPGA片上邏輯,不占用FPGA的IO引腳,寬度最高32位,同等數(shù)據(jù)率下效率大大高于串行總線,可使用中斷、查詢或者二者相結(jié)合方式進(jìn)行通信。這里定義一種PIO通信接口和時(shí)序如圖8所示。

            在中斷信號(hào)PIO_irq的上升沿提出中斷申請(qǐng),啟動(dòng)一次通信,數(shù)據(jù)傳輸方將讀寫標(biāo)志信號(hào)PIO_R/W置高,同時(shí)向數(shù)據(jù)線PIO_D寫入數(shù)據(jù);數(shù)據(jù)接收方在相應(yīng)中斷信號(hào)后,檢測(cè)到PIO_R/W信號(hào)變高,則讀數(shù)據(jù)線PIO_D獲取數(shù)據(jù),同時(shí)將PIO_R/W置低表明數(shù)據(jù)已讀,可以進(jìn)行下次數(shù)據(jù)傳送。數(shù)據(jù)傳輸方通過(guò)將PIO_irq信號(hào)置低表明完成一次通信,數(shù)據(jù)接收方檢測(cè)到PIO_irq信號(hào)為低時(shí)停止本次通信。這種中斷和查詢相結(jié)合的方案效率很高,任意一方都可以發(fā)起通信,通信的速率取決于NiosII軟核對(duì)端口讀寫延時(shí)和數(shù)據(jù)的處理速度或者寫數(shù)據(jù)緩沖區(qū)的速度。軟件通信流程如圖9所示。

            結(jié)語(yǔ)

            表4對(duì)上述各種方案進(jìn)行了一下比較,分析了每種方案的特點(diǎn)和適用范圍。

            筆者的PDA考評(píng)系統(tǒng)項(xiàng)目采用了NiosII雙核設(shè)計(jì),使用方案三(郵箱內(nèi)核和共享存儲(chǔ)的多核阻塞通信方案)完成雙核間的通信。PDA設(shè)備作為實(shí)驗(yàn)考評(píng)系統(tǒng)的客戶端,通過(guò)藍(lán)牙無(wú)線通信與建有學(xué)生課程成績(jī)數(shù)據(jù)庫(kù)的服務(wù)器進(jìn)行通信,實(shí)現(xiàn)實(shí)驗(yàn)現(xiàn)場(chǎng)學(xué)生成績(jī)的查詢、修改、數(shù)據(jù)文件的傳輸?shù)裙δ?,系統(tǒng)的功能結(jié)構(gòu)如圖10所示。NiosII雙核分為兩個(gè)系統(tǒng):(1)NiosII人機(jī)界面系統(tǒng)。負(fù)責(zé)管理矩陣鍵盤按鍵和LCD顯示界面的驅(qū)動(dòng);(2)NiosII通信主機(jī)系統(tǒng)。實(shí)現(xiàn)完整的藍(lán)牙協(xié)議棧,完成與數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行通信的任務(wù)。雙核之間鍵盤操作指令和LCD顯示數(shù)據(jù)的交換通過(guò)上文所述的方案三——郵箱內(nèi)核和共享存儲(chǔ)的方式實(shí)現(xiàn)。

            NiosII多核處理器在FPGA中易于實(shí)現(xiàn),并且多核之間通信可選方案較多,適應(yīng)范圍廣,相信會(huì)在越來(lái)越多的系統(tǒng)中采用。

            參考文獻(xiàn):

            1.  Altera Corp. QuartusII Version6.1 Handbook. Altera. 2006

            2.  Altera Corp. Creating Multiprocessor NiosII System Tutorial. Altera. 2005

            3.  Altera Corp. NiosII Processor Reference Handbook. Altera. 2005

            4.  Altera Corp. NiosII Software Developer’s Handbook. Altera. 2005

            5.  Altera Corp. Avalon Interface Specification. Altera. 2005

            6.  www.altera.com.cn

          數(shù)字通信相關(guān)文章:數(shù)字通信原理


          通信相關(guān)文章:通信原理


          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理


          加速度計(jì)相關(guān)文章:加速度計(jì)原理


          關(guān)鍵詞: NiosII 多核處理器 多核通信

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();