新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 優(yōu)化以太網(wǎng)控制器滿足嵌入式聯(lián)網(wǎng)需求

優(yōu)化以太網(wǎng)控制器滿足嵌入式聯(lián)網(wǎng)需求

作者: 時間:2017-06-06 來源:網(wǎng)絡 收藏

目前支持消費電子和其它市場的嵌入式系統(tǒng)需要更高級的網(wǎng)絡連接能力。非PCI接口的以太網(wǎng)控制器為系統(tǒng)設計師的嵌入式連接方案提供了性能和架構選擇的最佳結合。因此,非PCI接口的以太網(wǎng)控制器成為這些嵌入式設計中外設聯(lián)網(wǎng)的標準解決方案。

本文引用地址:http://butianyuan.cn/article/201706/349676.htm

一直以來,設計師在對非PCI總線的嵌入式系統(tǒng)增加以太網(wǎng)連接功能的時候面臨多種挑戰(zhàn)。這些常見的挑戰(zhàn)包括:為現(xiàn)有的以太網(wǎng)控制器調整非標準的總線接口,滿足TCP/IP數(shù)據(jù)包處理所要求的CPU帶寬,使得由于外設和存儲器接口結合帶來的固有系統(tǒng)性能下降最小化。

為了更好地克服這些挑戰(zhàn),設計師必須尋求對傳統(tǒng)的以太網(wǎng)控制器做出一些改變。其目的是在使用現(xiàn)有的嵌入式CPU的情況下得到一種能提高性能的嵌入式系統(tǒng)解決方案。下面讓我們了解如何實現(xiàn)這個目標。

控制器設計基礎

圖1介紹了典型的嵌入式系統(tǒng),其中采用了無PCI接口的嵌入式CPU和相關的存儲器(SRAM、SDRAM和閃存)以及通過本地總線連接的外設(視頻、USB和IDE控制器)。嵌入式CPU和操作系統(tǒng)的例子包括英特爾的XScale、瑞薩的SHx、松下及ST的芯片,這些芯片運行Linux、Windows CE、VxWorks和其它實時操作系統(tǒng)(RTOS)。

從操作系統(tǒng)或軟件的角度來理解數(shù)據(jù)如何從嵌入式系統(tǒng)應用程序到以太網(wǎng)傳輸非常重要。圖2顯示了一種嵌入式系統(tǒng)軟件結構的實現(xiàn)。軟件結構分成應用程序、包含TCP/IP協(xié)議棧的操作系統(tǒng)和以太網(wǎng)控制器驅動程序。非PCI接口的以太網(wǎng)控制器通過本地總線與其軟件驅動程序連接。

當應用程序通過網(wǎng)絡發(fā)送數(shù)據(jù)或控制信息時,它與操作系統(tǒng)一起產(chǎn)生一個指向不同緩沖區(qū)的軟件數(shù)據(jù)結構鏈表,以避免數(shù)據(jù)復制。此外,緩沖區(qū)還保存要放入以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)。每塊緩沖區(qū)代表一個以太網(wǎng)數(shù)據(jù)包的一個不同的部分,由以太網(wǎng)控制器驅動程序將這些不同的部分組合起來進行傳輸。數(shù)據(jù)緩沖區(qū)不是相互鄰近的,這意味著每塊緩沖區(qū)的頭和尾不在相同的線性地址空間內。

如圖2所示,操作系統(tǒng)將“Tx Data Ptr”變量或軟件指針傳遞到以太網(wǎng)控制器軟件驅動程序。“Tx Data Ptr”具有描述符1的地址,描述符1指向描述符2,以此類推。這些描述符都指向數(shù)據(jù)緩沖區(qū)。然后,以太網(wǎng)控制器驅動程序通過本地總線將每一塊數(shù)據(jù)緩沖區(qū)轉移到以太網(wǎng)控制器。

接收操作按相反的順序執(zhí)行。這個過程需要大量軟件參與,如果處理不當可能降低性能。同樣重要的是不同的數(shù)據(jù)緩沖區(qū)可能沒有在存儲器中自然地排列,這對于整體的網(wǎng)絡系統(tǒng)性能至關重要。

有限的選擇

當前,采用以太網(wǎng)連接的消費電子設備只限于下面的三種選擇:

1. 外部PCI以太網(wǎng)控制器——大多數(shù)嵌入式處理器不支持PCI總線,因此選擇一個PCI以太網(wǎng)控制器通常就不可行。如表所示,根據(jù)市場研究表明,市場上8位或16位的CPU都不支持PCI,并且只有16%的32位CPU支持PCI,而大多數(shù)的嵌入式處理器支持一種本地/存儲總線。嵌入式CPU制造商沒有“擁抱”PCI是因為幾方面的原因。其一是成本。用來實現(xiàn)PCI的額外I/O管腳和電路會增加嵌入式處理器的成本。嵌入式CPU需要一種存儲器總線,而在很多情況下,這個總線是與其他外設共享的。因此,增加另外一種寬的并行總線來支持PCI外圍設備并不現(xiàn)實。除此之外,通常在這些嵌入式系統(tǒng)中并不需要像即插即用這樣的先進PCI功能。

2. 集成以太網(wǎng)。表顯示了內部集成了以太網(wǎng)控制器的嵌入式CPU所占百分比。很明顯,大多數(shù)嵌入式處理器并不支持集成的以太網(wǎng)控制器。

3. 外部的非PCI接口以太網(wǎng)控制器如圖1所示,大多數(shù)嵌入式處理器支持一種非PCI的本地總線,而且不包含對內部以太網(wǎng)控制器的支持。



圖1:支持非PCI以太網(wǎng)連接的典型嵌入式系統(tǒng)



圖2:通過以太網(wǎng)發(fā)送應用數(shù)據(jù)

主要設計挑戰(zhàn)

在為非PCI嵌入式CPU增加高性能以太網(wǎng)連接功能的挑戰(zhàn)通常為那些傳統(tǒng)上非PCI接口的以太網(wǎng)控制器所忽略。然而,通過考慮一定的架構改進,非PCI以太網(wǎng)控制器可以提供更高的性能,同時還解決成本和可靠性的問題。三個主要的挑戰(zhàn)是緩沖區(qū)排列、總線架構以及流控制。下面將仔細地探討這些問題。

1. 緩沖區(qū)排列

當以太網(wǎng)的幀數(shù)據(jù)存在于嵌入式CPU的系統(tǒng)存儲器中的時候,就產(chǎn)生了以太網(wǎng)幀數(shù)據(jù)緩沖區(qū)的排列問題。以太網(wǎng)幀數(shù)據(jù)會被分割開來并分散到存儲器的多個緩沖區(qū)中。每個緩沖區(qū)片段可以在幀上的任一字節(jié)排列上開始和結束,并且可能是任意長度。

未排列的數(shù)據(jù)對于傳統(tǒng)的以太網(wǎng)控制器來說并不理想,因為傳統(tǒng)的以太網(wǎng)控制器需要將發(fā)送數(shù)據(jù)以32位排列的形式提交給控制器。因為數(shù)據(jù)可能以未排列整齊的片斷形式到達驅動程序,驅動程序必須用CPU來收集分散的片斷,并在寫入以太網(wǎng)控制器之前對數(shù)據(jù)進行重新排列。這個過程的效率很低,因為必須從系統(tǒng)的存儲器中讀取數(shù)據(jù)、重新排列并寫入到以太網(wǎng)控制器。相比從系統(tǒng)存儲器中讀取數(shù)據(jù)并直接寫入到以太網(wǎng)控制器,這個過程至少要三步。

最糟糕的負面影響是與直接存儲器訪問(DMA)控制器不兼容。傳統(tǒng)上,在嵌入式CPU中的DMA控制器不能執(zhí)行數(shù)據(jù)的重新排列,這使得它們不能在系統(tǒng)中移動以太網(wǎng)數(shù)據(jù)。數(shù)據(jù)移動和重新排列的任務就落到了嵌入式CPU上,其所占用的MIPS本來可以在其它應用中得到更好的利用。

理想的以太網(wǎng)控制器會自動地處理數(shù)據(jù)的重新排列。數(shù)據(jù)會以自然排列的形式傳遞,以太網(wǎng)控制器將了解包的數(shù)據(jù)邊界,然后以太網(wǎng)控制器在數(shù)據(jù)發(fā)送之前在內部透明地對數(shù)據(jù)進行重新排列。這種透明的重新排列通過緩沖區(qū)復制使嵌入式CPU從重新排列數(shù)據(jù)的任務中解放出來?,F(xiàn)在系統(tǒng)就可以選擇使用簡單的DMA控制器來移動數(shù)據(jù)了。



表1:總線類型和對集成以太網(wǎng)控制器的支持

2. 總線架構

嵌入式CPU為了發(fā)送以太網(wǎng)數(shù)據(jù)包,需要將數(shù)據(jù)寫入到以太網(wǎng)控制器中的緩存內。反之,對于接收以太網(wǎng)數(shù)據(jù)包,嵌入式CPU必須從以太網(wǎng)控制器的內部緩存中讀出收到的數(shù)據(jù)。嵌入式CPU利用編程I/O(PIO)周期或DMA周期移動數(shù)據(jù)。

不管是使用PIO或DMA進行發(fā)送或者接收操作,數(shù)據(jù)都是通過嵌入式CPU的外部本地總線傳送的。每次操作都需要花費時間,并且花費的時間越多,操作對系統(tǒng)整體性能影響就越大。關鍵問題是要使訪問以太網(wǎng)控制器時間很短,以提高整個系統(tǒng)的速度。傳統(tǒng)上,低性能的以太網(wǎng)控制器在讀和寫訪問期間會迫使CPU處于等待狀態(tài),這等效于更長的讀和寫周期。在本地總線上增加更多的等待狀態(tài)意味著CPU執(zhí)行其它任務的時間更少,以及用于內部和外部設備的帶寬更少。

其它一些不太明顯的機制會導致額外的等待狀態(tài)。例如,很多的傳統(tǒng)以太網(wǎng)控制器需要很長的數(shù)據(jù)和地址建立時間。這可能需要額外的連接邏輯以及鎖存器。在這種系統(tǒng)中,可能需要減少系統(tǒng)中每個器件的總線周期時間-包括存儲器。

某些嵌入式CPU采用其它機制來減少外部本地總線上的處理時間。這種機制的一個實例是突發(fā)模式讀處理。這種操作模式通常與DMA控制器有關,可以降低總線周期占用。在突發(fā)處理期間,控制信號被維持,在每次讀操作時地址都改變。通常與PIO讀相關的讀周期之間的解除維持時間被消除。傳統(tǒng)的以太網(wǎng)控制器不支持突發(fā)模式讀。大多數(shù)嵌入式處理器本身支持SRAM類型的本地總線接口。因此優(yōu)化以太網(wǎng)控制器以模擬SRAM存儲器接口很有意義。這樣做優(yōu)勢很明顯。這種以太網(wǎng)控制器不僅為大多數(shù)嵌入式處理器提供一種無縫的接口,而且所有前面已經(jīng)討論過的特性都可以使用,比如快速的整體總線周期時間、最小的地址和數(shù)據(jù)建立時間以及支持突發(fā)模式讀取等。

3. 流控制

另外一種增加非PCI接口以太網(wǎng)控制器性能的方式是優(yōu)化以太網(wǎng)流量情況。這可以通過支持以太網(wǎng)流控制實現(xiàn)。

以太網(wǎng)流控制容許以太網(wǎng)接收器減緩其對應的發(fā)送器的速度,這能夠防止接收器緩存溢出。中斷延遲或其它原因會導致嵌入式CPU無法跟上以太網(wǎng)數(shù)據(jù)接收的速度,這會導致接收緩存溢出。一旦出現(xiàn)溢出,接收到的數(shù)據(jù)便會丟失,從而導致嚴重的系統(tǒng)性能下降。

很多以太網(wǎng)設備使用一種“暫??刂?rdquo;幀支持全雙工流控制。暫停操作在規(guī)定的時間段內禁止發(fā)送數(shù)據(jù)幀。暫停操作由由一個暫??刂茙M成,這個幀包含全局分配的多播地址、暫停操作碼以及指出數(shù)據(jù)禁止傳輸?shù)某掷m(xù)時間的參數(shù)組成。當接收到包含預留的多播地址和暫停操作碼的幀時,以太網(wǎng)設備就禁止在指定的時間段內傳輸數(shù)據(jù)。在半雙工模式,反壓(backpressure)用于流控制。以太網(wǎng)控制器通過“堵塞”接收數(shù)據(jù)和故意產(chǎn)生沖突來調節(jié)數(shù)據(jù)接收。在檢測到?jīng)_突后,遠端站點將停止發(fā)送數(shù)據(jù)。

理想的以太網(wǎng)控制器需要能檢測其內部緩存空間,然后在沒有處理器的干預下自動地發(fā)送一個暫停幀,或者發(fā)生堵塞。而且,設備應該能發(fā)送一個“零時間”的暫停幀,以在內部緩存有可用空間時重新發(fā)起數(shù)據(jù)傳送。自動流控制通過減少處理器中斷次數(shù)和開銷提高了系統(tǒng)的整體性能。恰當?shù)貙崿F(xiàn)流控制還能避免網(wǎng)絡兩端的接收緩存溢出。

本文小結

消費電子設備、娛樂音視頻設備以及傳統(tǒng)的家庭網(wǎng)絡設備(例如PC和打印機)正在向一個網(wǎng)絡融合,很明顯以太網(wǎng)成為家庭中實現(xiàn)連接的網(wǎng)絡選擇。在很多情況下,關于可以選擇哪種嵌入式CPU用于消費電子或音視頻設計,系統(tǒng)設計者的選擇有限。因此,在不換用高成本的CPU方案的條件下,實現(xiàn)期望的性能水平的唯一辦法是優(yōu)化現(xiàn)有的非PCI接口以太網(wǎng)控制器。通過優(yōu)化非PCI接口以太網(wǎng)控制器的架構,可以提高要求苛刻的應用的整體系統(tǒng)性能。

作者:Charlie Forni

工程總監(jiān),charles.forni@smsc.com

Paul Brant

高級首席系統(tǒng)架構師,paul.brant@smsc.com

SMSC公司



評論


技術專區(qū)

關閉