優(yōu)化以太網(wǎng)控制器滿(mǎn)足嵌入式聯(lián)網(wǎng)需求
目前支持消費(fèi)電子和其它市場(chǎng)的嵌入式系統(tǒng)需要更高級(jí)的網(wǎng)絡(luò)連接能力。非PCI接口的以太網(wǎng)控制器為系統(tǒng)設(shè)計(jì)師的嵌入式連接方案提供了性能和架構(gòu)選擇的最佳結(jié)合。因此,非PCI接口的以太網(wǎng)控制器成為這些嵌入式設(shè)計(jì)中外設(shè)聯(lián)網(wǎng)的標(biāo)準(zhǔn)解決方案。
本文引用地址:http://www.ex-cimer.com/article/201706/349676.htm一直以來(lái),設(shè)計(jì)師在對(duì)非PCI總線的嵌入式系統(tǒng)增加以太網(wǎng)連接功能的時(shí)候面臨多種挑戰(zhàn)。這些常見(jiàn)的挑戰(zhàn)包括:為現(xiàn)有的以太網(wǎng)控制器調(diào)整非標(biāo)準(zhǔn)的總線接口,滿(mǎn)足TCP/IP數(shù)據(jù)包處理所要求的CPU帶寬,使得由于外設(shè)和存儲(chǔ)器接口結(jié)合帶來(lái)的固有系統(tǒng)性能下降最小化。
為了更好地克服這些挑戰(zhàn),設(shè)計(jì)師必須尋求對(duì)傳統(tǒng)的以太網(wǎng)控制器做出一些改變。其目的是在使用現(xiàn)有的嵌入式CPU的情況下得到一種能提高性能的嵌入式系統(tǒng)解決方案。下面讓我們了解如何實(shí)現(xiàn)這個(gè)目標(biāo)。
控制器設(shè)計(jì)基礎(chǔ)
圖1介紹了典型的嵌入式系統(tǒng),其中采用了無(wú)PCI接口的嵌入式CPU和相關(guān)的存儲(chǔ)器(SRAM、SDRAM和閃存)以及通過(guò)本地總線連接的外設(shè)(視頻、USB和IDE控制器)。嵌入式CPU和操作系統(tǒng)的例子包括英特爾的XScale、瑞薩的SHx、松下及ST的芯片,這些芯片運(yùn)行Linux、Windows CE、VxWorks和其它實(shí)時(shí)操作系統(tǒng)(RTOS)。
從操作系統(tǒng)或軟件的角度來(lái)理解數(shù)據(jù)如何從嵌入式系統(tǒng)應(yīng)用程序到以太網(wǎng)傳輸非常重要。圖2顯示了一種嵌入式系統(tǒng)軟件結(jié)構(gòu)的實(shí)現(xiàn)。軟件結(jié)構(gòu)分成應(yīng)用程序、包含TCP/IP協(xié)議棧的操作系統(tǒng)和以太網(wǎng)控制器驅(qū)動(dòng)程序。非PCI接口的以太網(wǎng)控制器通過(guò)本地總線與其軟件驅(qū)動(dòng)程序連接。
當(dāng)應(yīng)用程序通過(guò)網(wǎng)絡(luò)發(fā)送數(shù)據(jù)或控制信息時(shí),它與操作系統(tǒng)一起產(chǎn)生一個(gè)指向不同緩沖區(qū)的軟件數(shù)據(jù)結(jié)構(gòu)鏈表,以避免數(shù)據(jù)復(fù)制。此外,緩沖區(qū)還保存要放入以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)。每塊緩沖區(qū)代表一個(gè)以太網(wǎng)數(shù)據(jù)包的一個(gè)不同的部分,由以太網(wǎng)控制器驅(qū)動(dòng)程序?qū)⑦@些不同的部分組合起來(lái)進(jìn)行傳輸。數(shù)據(jù)緩沖區(qū)不是相互鄰近的,這意味著每塊緩沖區(qū)的頭和尾不在相同的線性地址空間內(nèi)。
如圖2所示,操作系統(tǒng)將“Tx Data Ptr”變量或軟件指針傳遞到以太網(wǎng)控制器軟件驅(qū)動(dòng)程序。“Tx Data Ptr”具有描述符1的地址,描述符1指向描述符2,以此類(lèi)推。這些描述符都指向數(shù)據(jù)緩沖區(qū)。然后,以太網(wǎng)控制器驅(qū)動(dòng)程序通過(guò)本地總線將每一塊數(shù)據(jù)緩沖區(qū)轉(zhuǎn)移到以太網(wǎng)控制器。
接收操作按相反的順序執(zhí)行。這個(gè)過(guò)程需要大量軟件參與,如果處理不當(dāng)可能降低性能。同樣重要的是不同的數(shù)據(jù)緩沖區(qū)可能沒(méi)有在存儲(chǔ)器中自然地排列,這對(duì)于整體的網(wǎng)絡(luò)系統(tǒng)性能至關(guān)重要。
有限的選擇
當(dāng)前,采用以太網(wǎng)連接的消費(fèi)電子設(shè)備只限于下面的三種選擇:
1. 外部PCI以太網(wǎng)控制器——大多數(shù)嵌入式處理器不支持PCI總線,因此選擇一個(gè)PCI以太網(wǎng)控制器通常就不可行。如表所示,根據(jù)市場(chǎng)研究表明,市場(chǎng)上8位或16位的CPU都不支持PCI,并且只有16%的32位CPU支持PCI,而大多數(shù)的嵌入式處理器支持一種本地/存儲(chǔ)總線。嵌入式CPU制造商沒(méi)有“擁抱”PCI是因?yàn)閹追矫娴脑?。其一是成本。用?lái)實(shí)現(xiàn)PCI的額外I/O管腳和電路會(huì)增加嵌入式處理器的成本。嵌入式CPU需要一種存儲(chǔ)器總線,而在很多情況下,這個(gè)總線是與其他外設(shè)共享的。因此,增加另外一種寬的并行總線來(lái)支持PCI外圍設(shè)備并不現(xiàn)實(shí)。除此之外,通常在這些嵌入式系統(tǒng)中并不需要像即插即用這樣的先進(jìn)PCI功能。
2. 集成以太網(wǎng)。表顯示了內(nèi)部集成了以太網(wǎng)控制器的嵌入式CPU所占百分比。很明顯,大多數(shù)嵌入式處理器并不支持集成的以太網(wǎng)控制器。
3. 外部的非PCI接口以太網(wǎng)控制器如圖1所示,大多數(shù)嵌入式處理器支持一種非PCI的本地總線,而且不包含對(duì)內(nèi)部以太網(wǎng)控制器的支持。
圖1:支持非PCI以太網(wǎng)連接的典型嵌入式系統(tǒng)
圖2:通過(guò)以太網(wǎng)發(fā)送應(yīng)用數(shù)據(jù)
主要設(shè)計(jì)挑戰(zhàn)
在為非PCI嵌入式CPU增加高性能以太網(wǎng)連接功能的挑戰(zhàn)通常為那些傳統(tǒng)上非PCI接口的以太網(wǎng)控制器所忽略。然而,通過(guò)考慮一定的架構(gòu)改進(jìn),非PCI以太網(wǎng)控制器可以提供更高的性能,同時(shí)還解決成本和可靠性的問(wèn)題。三個(gè)主要的挑戰(zhàn)是緩沖區(qū)排列、總線架構(gòu)以及流控制。下面將仔細(xì)地探討這些問(wèn)題。
1. 緩沖區(qū)排列
當(dāng)以太網(wǎng)的幀數(shù)據(jù)存在于嵌入式CPU的系統(tǒng)存儲(chǔ)器中的時(shí)候,就產(chǎn)生了以太網(wǎng)幀數(shù)據(jù)緩沖區(qū)的排列問(wèn)題。以太網(wǎng)幀數(shù)據(jù)會(huì)被分割開(kāi)來(lái)并分散到存儲(chǔ)器的多個(gè)緩沖區(qū)中。每個(gè)緩沖區(qū)片段可以在幀上的任一字節(jié)排列上開(kāi)始和結(jié)束,并且可能是任意長(zhǎng)度。
未排列的數(shù)據(jù)對(duì)于傳統(tǒng)的以太網(wǎng)控制器來(lái)說(shuō)并不理想,因?yàn)閭鹘y(tǒng)的以太網(wǎng)控制器需要將發(fā)送數(shù)據(jù)以32位排列的形式提交給控制器。因?yàn)閿?shù)據(jù)可能以未排列整齊的片斷形式到達(dá)驅(qū)動(dòng)程序,驅(qū)動(dòng)程序必須用CPU來(lái)收集分散的片斷,并在寫(xiě)入以太網(wǎng)控制器之前對(duì)數(shù)據(jù)進(jìn)行重新排列。這個(gè)過(guò)程的效率很低,因?yàn)楸仨殢南到y(tǒng)的存儲(chǔ)器中讀取數(shù)據(jù)、重新排列并寫(xiě)入到以太網(wǎng)控制器。相比從系統(tǒng)存儲(chǔ)器中讀取數(shù)據(jù)并直接寫(xiě)入到以太網(wǎng)控制器,這個(gè)過(guò)程至少要三步。
最糟糕的負(fù)面影響是與直接存儲(chǔ)器訪問(wèn)(DMA)控制器不兼容。傳統(tǒng)上,在嵌入式CPU中的DMA控制器不能執(zhí)行數(shù)據(jù)的重新排列,這使得它們不能在系統(tǒng)中移動(dòng)以太網(wǎng)數(shù)據(jù)。數(shù)據(jù)移動(dòng)和重新排列的任務(wù)就落到了嵌入式CPU上,其所占用的MIPS本來(lái)可以在其它應(yīng)用中得到更好的利用。
理想的以太網(wǎng)控制器會(huì)自動(dòng)地處理數(shù)據(jù)的重新排列。數(shù)據(jù)會(huì)以自然排列的形式傳遞,以太網(wǎng)控制器將了解包的數(shù)據(jù)邊界,然后以太網(wǎng)控制器在數(shù)據(jù)發(fā)送之前在內(nèi)部透明地對(duì)數(shù)據(jù)進(jìn)行重新排列。這種透明的重新排列通過(guò)緩沖區(qū)復(fù)制使嵌入式CPU從重新排列數(shù)據(jù)的任務(wù)中解放出來(lái)?,F(xiàn)在系統(tǒng)就可以選擇使用簡(jiǎn)單的DMA控制器來(lái)移動(dòng)數(shù)據(jù)了。
表1:總線類(lèi)型和對(duì)集成以太網(wǎng)控制器的支持
2. 總線架構(gòu)
嵌入式CPU為了發(fā)送以太網(wǎng)數(shù)據(jù)包,需要將數(shù)據(jù)寫(xiě)入到以太網(wǎng)控制器中的緩存內(nèi)。反之,對(duì)于接收以太網(wǎng)數(shù)據(jù)包,嵌入式CPU必須從以太網(wǎng)控制器的內(nèi)部緩存中讀出收到的數(shù)據(jù)。嵌入式CPU利用編程I/O(PIO)周期或DMA周期移動(dòng)數(shù)據(jù)。
不管是使用PIO或DMA進(jìn)行發(fā)送或者接收操作,數(shù)據(jù)都是通過(guò)嵌入式CPU的外部本地總線傳送的。每次操作都需要花費(fèi)時(shí)間,并且花費(fèi)的時(shí)間越多,操作對(duì)系統(tǒng)整體性能影響就越大。關(guān)鍵問(wèn)題是要使訪問(wèn)以太網(wǎng)控制器時(shí)間很短,以提高整個(gè)系統(tǒng)的速度。傳統(tǒng)上,低性能的以太網(wǎng)控制器在讀和寫(xiě)訪問(wèn)期間會(huì)迫使CPU處于等待狀態(tài),這等效于更長(zhǎng)的讀和寫(xiě)周期。在本地總線上增加更多的等待狀態(tài)意味著CPU執(zhí)行其它任務(wù)的時(shí)間更少,以及用于內(nèi)部和外部設(shè)備的帶寬更少。
其它一些不太明顯的機(jī)制會(huì)導(dǎo)致額外的等待狀態(tài)。例如,很多的傳統(tǒng)以太網(wǎng)控制器需要很長(zhǎng)的數(shù)據(jù)和地址建立時(shí)間。這可能需要額外的連接邏輯以及鎖存器。在這種系統(tǒng)中,可能需要減少系統(tǒng)中每個(gè)器件的總線周期時(shí)間-包括存儲(chǔ)器。
某些嵌入式CPU采用其它機(jī)制來(lái)減少外部本地總線上的處理時(shí)間。這種機(jī)制的一個(gè)實(shí)例是突發(fā)模式讀處理。這種操作模式通常與DMA控制器有關(guān),可以降低總線周期占用。在突發(fā)處理期間,控制信號(hào)被維持,在每次讀操作時(shí)地址都改變。通常與PIO讀相關(guān)的讀周期之間的解除維持時(shí)間被消除。傳統(tǒng)的以太網(wǎng)控制器不支持突發(fā)模式讀。大多數(shù)嵌入式處理器本身支持SRAM類(lèi)型的本地總線接口。因此優(yōu)化以太網(wǎng)控制器以模擬SRAM存儲(chǔ)器接口很有意義。這樣做優(yōu)勢(shì)很明顯。這種以太網(wǎng)控制器不僅為大多數(shù)嵌入式處理器提供一種無(wú)縫的接口,而且所有前面已經(jīng)討論過(guò)的特性都可以使用,比如快速的整體總線周期時(shí)間、最小的地址和數(shù)據(jù)建立時(shí)間以及支持突發(fā)模式讀取等。
3. 流控制
另外一種增加非PCI接口以太網(wǎng)控制器性能的方式是優(yōu)化以太網(wǎng)流量情況。這可以通過(guò)支持以太網(wǎng)流控制實(shí)現(xiàn)。
以太網(wǎng)流控制容許以太網(wǎng)接收器減緩其對(duì)應(yīng)的發(fā)送器的速度,這能夠防止接收器緩存溢出。中斷延遲或其它原因會(huì)導(dǎo)致嵌入式CPU無(wú)法跟上以太網(wǎng)數(shù)據(jù)接收的速度,這會(huì)導(dǎo)致接收緩存溢出。一旦出現(xiàn)溢出,接收到的數(shù)據(jù)便會(huì)丟失,從而導(dǎo)致嚴(yán)重的系統(tǒng)性能下降。
很多以太網(wǎng)設(shè)備使用一種“暫??刂?rdquo;幀支持全雙工流控制。暫停操作在規(guī)定的時(shí)間段內(nèi)禁止發(fā)送數(shù)據(jù)幀。暫停操作由由一個(gè)暫??刂茙M成,這個(gè)幀包含全局分配的多播地址、暫停操作碼以及指出數(shù)據(jù)禁止傳輸?shù)某掷m(xù)時(shí)間的參數(shù)組成。當(dāng)接收到包含預(yù)留的多播地址和暫停操作碼的幀時(shí),以太網(wǎng)設(shè)備就禁止在指定的時(shí)間段內(nèi)傳輸數(shù)據(jù)。在半雙工模式,反壓(backpressure)用于流控制。以太網(wǎng)控制器通過(guò)“堵塞”接收數(shù)據(jù)和故意產(chǎn)生沖突來(lái)調(diào)節(jié)數(shù)據(jù)接收。在檢測(cè)到?jīng)_突后,遠(yuǎn)端站點(diǎn)將停止發(fā)送數(shù)據(jù)。
理想的以太網(wǎng)控制器需要能檢測(cè)其內(nèi)部緩存空間,然后在沒(méi)有處理器的干預(yù)下自動(dòng)地發(fā)送一個(gè)暫停幀,或者發(fā)生堵塞。而且,設(shè)備應(yīng)該能發(fā)送一個(gè)“零時(shí)間”的暫停幀,以在內(nèi)部緩存有可用空間時(shí)重新發(fā)起數(shù)據(jù)傳送。自動(dòng)流控制通過(guò)減少處理器中斷次數(shù)和開(kāi)銷(xiāo)提高了系統(tǒng)的整體性能。恰當(dāng)?shù)貙?shí)現(xiàn)流控制還能避免網(wǎng)絡(luò)兩端的接收緩存溢出。
本文小結(jié)
消費(fèi)電子設(shè)備、娛樂(lè)音視頻設(shè)備以及傳統(tǒng)的家庭網(wǎng)絡(luò)設(shè)備(例如PC和打印機(jī))正在向一個(gè)網(wǎng)絡(luò)融合,很明顯以太網(wǎng)成為家庭中實(shí)現(xiàn)連接的網(wǎng)絡(luò)選擇。在很多情況下,關(guān)于可以選擇哪種嵌入式CPU用于消費(fèi)電子或音視頻設(shè)計(jì),系統(tǒng)設(shè)計(jì)者的選擇有限。因此,在不換用高成本的CPU方案的條件下,實(shí)現(xiàn)期望的性能水平的唯一辦法是優(yōu)化現(xiàn)有的非PCI接口以太網(wǎng)控制器。通過(guò)優(yōu)化非PCI接口以太網(wǎng)控制器的架構(gòu),可以提高要求苛刻的應(yīng)用的整體系統(tǒng)性能。
作者:Charlie Forni
工程總監(jiān),charles.forni@smsc.com
Paul Brant
高級(jí)首席系統(tǒng)架構(gòu)師,paul.brant@smsc.com
SMSC公司
評(píng)論