大俠好,歡迎來(lái)到FPGA技術(shù)江湖,江湖偌大,相見(jiàn)即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。
今天給大俠帶來(lái)基于FPGA的以太網(wǎng)控制器(MAC)設(shè)計(jì),由于篇幅較長(zhǎng),分三篇。今天帶來(lái)第一篇,上篇,以太網(wǎng)基本原理以及以太網(wǎng)控制器(MAC)的基本框架。話不多說(shuō),上貨。
為了方便參考學(xué)習(xí),后兩篇這里也放上超鏈接:
基于FPGA的以太網(wǎng)控制器(MAC)設(shè)計(jì)(中)
基于FPGA的以太網(wǎng)控制器(MAC)設(shè)計(jì)(下)
當(dāng)前,互聯(lián)網(wǎng)已經(jīng)極大地改變了我們的生產(chǎn)和生活。與之相適應(yīng)的,在嵌入式系統(tǒng)的研究開(kāi)發(fā)方面,也越來(lái)越重視網(wǎng)絡(luò)功能。嵌入式系統(tǒng)已經(jīng)不再局限于一個(gè)個(gè)孤立的控制、處理單元,而是走向網(wǎng)絡(luò)集成化,從而實(shí)現(xiàn)了多個(gè)系統(tǒng)的集中控制、信息共享。
以太網(wǎng)(Ethernet)技術(shù)在嵌入式系統(tǒng)上的開(kāi)發(fā)應(yīng)用,已經(jīng)成為當(dāng)前嵌入式研究領(lǐng)域的技術(shù)熱點(diǎn)之一。一方面,與傳統(tǒng)的 RS-485、CAN 等相比較,以太網(wǎng)更加高速、通用,而且還可以直接與 Internet 相連接,提供更大范圍的遠(yuǎn)程訪問(wèn);此外,經(jīng)過(guò)適當(dāng)剪裁和優(yōu)化的 TCP/IP?協(xié)議棧,也完全可以適應(yīng)工業(yè)用途的需求。另一方面,相對(duì)于新興的 USB 2.0、IEEE 1394 等總線,以太網(wǎng)技術(shù)在傳輸距離、布線成本以及控制軟件的通用性上都有明顯的優(yōu)勢(shì)。
基于以太網(wǎng)的嵌入式系統(tǒng),在以下方面都有良好的應(yīng)用前景:
? 工業(yè):工業(yè)控制、網(wǎng)絡(luò)儀表、遠(yuǎn)程的分布式數(shù)據(jù)采集……
? 家庭自動(dòng)化:智能家庭、信息家電、家庭網(wǎng)關(guān)……
? 商業(yè):遠(yuǎn)程銷售平臺(tái)、智能自動(dòng)售貨機(jī)、公共電話卡發(fā)行系統(tǒng)……
? 環(huán)保:水源和空氣污染監(jiān)測(cè),防洪體系及水土質(zhì)量監(jiān)測(cè)、堤壩安全……
? 其他:交通管理、車輛導(dǎo)航、自動(dòng)抄表……
因此在使用 FPGA 設(shè)計(jì)各種嵌入式應(yīng)用系統(tǒng)時(shí),需要考慮為系統(tǒng)提供以太網(wǎng)接口。本章將?通過(guò) FPGA 實(shí)現(xiàn)一個(gè)以太網(wǎng)控制器(MAC)的實(shí)例,詳細(xì)介紹實(shí)現(xiàn)過(guò)程。
第一篇內(nèi)容摘要:本篇會(huì)介紹以太網(wǎng)基本原理,包括以太網(wǎng)協(xié)議的參考模型、MAC 子層、媒體無(wú)關(guān)接口(Media Independent Interface)等相關(guān)內(nèi)容,還會(huì)介紹以太網(wǎng)控制器(MAC)的基本框架等相關(guān)內(nèi)容。
一、以太網(wǎng)基本原理
一般所說(shuō)的以太網(wǎng)協(xié)議是指根據(jù) IEEE 802.3 規(guī)范制定的局域網(wǎng)協(xié)議(LAN,Local AreaNetwork)中的 CSMA/CD 協(xié)議。目前,以太網(wǎng)通信常用的介質(zhì)是雙絞線和光纖。
注意:CSMA/CD 協(xié)議是 Carrier sense multiple Access with Collision Detection 的縮寫,是帶有檢測(cè)沖突的載波偵聽(tīng)多路存取協(xié)議,具體內(nèi)容請(qǐng)參考 IEEE 802.3 規(guī)范。
1.1 以太網(wǎng)協(xié)議的參考模型
以太網(wǎng)協(xié)議的邏輯關(guān)系遵循 OSI 參考模型(Open System Interconnect Reference Model,開(kāi)放式系統(tǒng)互聯(lián)參考模型),如圖 10-1 所示。
物理層是指網(wǎng)絡(luò)通信連接的媒介物質(zhì),用于攜帶計(jì)算機(jī)之間的以太網(wǎng)信號(hào)。當(dāng)前應(yīng)用最多的是雙絞線和光纖。使用這兩種媒介,以太網(wǎng)目前可以實(shí)現(xiàn) 4 種傳輸速率。
? 10 Mbit/s:10Base-T 以太網(wǎng)。
? 100 Mbit/s:快速以太網(wǎng)。
? 1000 Mbit/s:千兆位以太網(wǎng) 802.3z。
? 10 千兆位以太網(wǎng):IEEE 802.3ae。
圖 1 以太網(wǎng)協(xié)議邏輯關(guān)系的參考模型
MAC 子層有兩個(gè)基本職能:數(shù)據(jù)封裝,包括傳輸之前的幀集合和接收中、接收后的幀解析/差錯(cuò)監(jiān)控;媒體訪問(wèn)控制,包括幀傳輸初始化和傳輸失敗恢復(fù)。
上層協(xié)議根據(jù)實(shí)際應(yīng)用可以選擇多種不同的協(xié)議,如 IP 協(xié)議、TCP 協(xié)議、HTTP 協(xié)議等。常用的 TCP/IP 協(xié)議如圖 10-2 所示。
圖 2 上層協(xié)議
在進(jìn)行實(shí)際的以太網(wǎng)通信中,每一種協(xié)議都是運(yùn)行在其下面層次的協(xié)議基礎(chǔ)上。例如,當(dāng)兩個(gè)計(jì)算機(jī)系統(tǒng)使用 FTP 協(xié)議傳輸文件時(shí),從用戶看來(lái)是兩個(gè)系統(tǒng)基于 FTP 協(xié)議的直接交流,實(shí)際上文件的數(shù)據(jù)傳輸則是經(jīng)過(guò)了層層打包和解包的協(xié)議路徑,如圖3 所示。
圖 3 FTP 協(xié)議的通信過(guò)程
上層的各個(gè)協(xié)議棧要分別實(shí)現(xiàn)對(duì)數(shù)據(jù)的打包、解包、校驗(yàn)以及對(duì)下一層相關(guān)協(xié)議的調(diào)用。例如,在 IP 協(xié)議棧從以太網(wǎng)驅(qū)動(dòng)收到一個(gè)數(shù)據(jù)包后,經(jīng)過(guò)解包、校驗(yàn),確認(rèn)是否為有效的 IP包,如無(wú)效則舍棄該包;如有效則進(jìn)一步判斷包內(nèi)的數(shù)據(jù),轉(zhuǎn)而調(diào)用 TCP、UDP、ICMP 等協(xié)議或使用戶自定義的處理服務(wù)。而以太網(wǎng)控制芯片的功能是完成 TCP/IP 協(xié)議簇分層模型中鏈路層的相關(guān)工作,它處理與雙絞線 RJ-45 接口之間的所有物理細(xì)節(jié)。
本篇將要介紹的以太網(wǎng)控制器將實(shí)現(xiàn)有關(guān) MAC(媒體訪問(wèn))子層的控制功能。在此基礎(chǔ)上,開(kāi)發(fā)人員可以簡(jiǎn)便、快速地開(kāi)發(fā)出基于以太網(wǎng)的嵌入式系統(tǒng)應(yīng)用。因?yàn)橐蕴W(wǎng)的上層協(xié)議可以根據(jù)需求的不同進(jìn)行選擇,物理層可以根據(jù)網(wǎng)絡(luò)速率不同選擇特定的媒介物質(zhì)。下面將詳細(xì)介紹有關(guān) MAC 層的內(nèi)容。
1.2 MAC子層
MAC 子層在上層協(xié)議和以太網(wǎng)網(wǎng)絡(luò)之間傳輸和接收數(shù)據(jù),其主要功能是確保以太網(wǎng)上每一幀數(shù)據(jù)的傳輸都遵循了 IEEE 802.3 規(guī)范所規(guī)定的介質(zhì)存取規(guī)則。
a.基本幀數(shù)據(jù)格式
IEEE 802.3 規(guī)范為實(shí)現(xiàn) MAC 定義了一套基本的幀數(shù)據(jù)格式,如圖 4 所示。
圖 10-4 幀數(shù)據(jù)格式
各個(gè)字段的含義及規(guī)定如下。
? Preamble(PRE):報(bào)頭,字段中 1 和 0 交替使用,接收方通過(guò)該字段知道導(dǎo)入幀,并且該字段提供了同步接收物理層幀接收和導(dǎo)入數(shù)據(jù)流的方法。
? Start-of-frame delimiter(SFD):幀起始分隔符,字段中 1 和 0 交替使用,結(jié)尾是兩個(gè)連續(xù)的 1,表示下一位是目的地址的第一個(gè)字節(jié)的第一位。
? Destination Address(DA):目標(biāo)地址,用于識(shí)別需要接收幀的目的地。
? Source Address(SA):源地址,用于識(shí)別發(fā)送幀的源地址。
? Length/Type:長(zhǎng)度/類型,表示包含在幀數(shù)據(jù)字段中的 MAC 數(shù)據(jù)大小,也可以表示幀的類型。
? Data:數(shù)據(jù),是一組 n(46≤n≤1500)字節(jié)的任意值序列。
? Frame check sequence(FCS):幀數(shù)據(jù)校驗(yàn)序列,該序列包括 32 位的循環(huán)冗余校驗(yàn)(CRC)值,由發(fā)送方生成,通過(guò)接收方進(jìn)行計(jì)算以校驗(yàn)幀是否被破壞。
b.幀傳輸
MAC 層從上層協(xié)議接收到發(fā)送幀數(shù)據(jù)的請(qǐng)求,首先按照下面的次序?qū)?shù)據(jù)和地址信息保存到 MAC 層的幀數(shù)據(jù)緩沖區(qū)中。
? 插入報(bào)頭和幀起始分隔符。
? 插入目標(biāo)地址和源地址。
? 統(tǒng)計(jì)來(lái)自上層協(xié)議數(shù)據(jù)的數(shù)量,插入數(shù)量值。
? 插入來(lái)自上層協(xié)議的數(shù)據(jù),如果數(shù)據(jù)量小于 46 字節(jié),則補(bǔ)齊 46 字節(jié)。
? 根據(jù)目標(biāo)地址、源地址、長(zhǎng)度/類型和數(shù)據(jù)產(chǎn)生 CRC 校驗(yàn)序列,并插入校驗(yàn)序列。
一幀完整數(shù)據(jù)組成后,MAC 層可以開(kāi)始發(fā)送幀數(shù)據(jù)。有兩種發(fā)送方式可供選擇:半雙工(half duplex)和全雙工(full duplex)。IEEE 802.3 規(guī)范規(guī)定所有的以太網(wǎng) MAC 都要支持半雙工方式,即一個(gè)時(shí)刻只能進(jìn)行發(fā)送或者接收,而不能同時(shí)進(jìn)行發(fā)送和接收。全雙工方式下發(fā)送和接收可以同時(shí)進(jìn)行。
c.幀接收
幀接收的過(guò)程和發(fā)送的過(guò)程是相反的。首先檢查幀數(shù)據(jù)中的目標(biāo)地址和當(dāng)前地址是否相符,然后檢查接收到的幀數(shù)據(jù)中的數(shù)據(jù)長(zhǎng)度、CRC 校驗(yàn)序列和實(shí)際的數(shù)據(jù)長(zhǎng)度、CRC 校驗(yàn)序列是否相符。如果都相符,則將數(shù)據(jù)交給上層協(xié)議進(jìn)行解析,MAC 層的傳輸任務(wù)完成。
1.3 媒體無(wú)關(guān)接口(Media Independent Interface)
IEEE 802.3 規(guī)范提出媒體無(wú)關(guān)接口(Media Independent Interface,MII)就是為了能夠?qū)崿F(xiàn) MAC 層和不同的物理層(PHY)之間的邏輯連接,如圖 5 所示。
圖 10-5 媒體無(wú)關(guān)接口
MAC 層可以通過(guò)媒體無(wú)關(guān)接口連接不同的物理層。根據(jù)對(duì)以太網(wǎng)通信速率的要求選擇合適物理層接口。針對(duì)不同的物理層,媒體無(wú)關(guān)接口可以以不同的方式實(shí)現(xiàn)到 MAC 的邏輯連接。例如在 10Mbit/s 以太網(wǎng)通信中,媒體無(wú)關(guān)接口使用 1 位來(lái)串行發(fā)送/接收數(shù)據(jù)流;在 100Mbit/s以太網(wǎng)通信中,媒體無(wú)關(guān)接口使用 4 位來(lái)串行發(fā)送/接收數(shù)據(jù)流;在 1000Mbit/s 以太網(wǎng)通信中,媒體無(wú)關(guān)接口使用 8 位來(lái)串行發(fā)送/接收數(shù)據(jù)流。
二、以太網(wǎng)控制器(MAC)的基本框架
下面將要介紹的以太網(wǎng)控制器(MAC)實(shí)現(xiàn)了以太網(wǎng)標(biāo)準(zhǔn)的第二層協(xié)議——MAC(媒體訪問(wèn)控制)協(xié)議,完全符合 IEEE 802.3 和 IEEE 802.3u 規(guī)范所規(guī)定的 10Mbit/s 和 100Mbit/s 以太網(wǎng)標(biāo)準(zhǔn)。如圖 6 所示,使用這個(gè)以太網(wǎng)控制器外部連接一塊 PHY 芯片(實(shí)現(xiàn)了物理層功能的芯片)就可以進(jìn)行數(shù)據(jù)鏈路層的通信,即幀通信。在此基礎(chǔ)上可以方便、快捷地開(kāi)發(fā)出更高層次的協(xié)議,實(shí)現(xiàn) FTP、HTTP 等協(xié)議。
圖 6 以太網(wǎng)控制器
這個(gè)以太網(wǎng)控制器具體實(shí)現(xiàn)了以下內(nèi)容。
? 符合 IEEE 802.3x 規(guī)定的全雙工幀控制。
? 半雙工傳輸模式下的 CSMA/CD 協(xié)議。
? 32 位 CRC 校驗(yàn)序列的自動(dòng)產(chǎn)生和檢查。
? 報(bào)頭的產(chǎn)生和去除。
? 發(fā)送和接收數(shù)據(jù)包的完全狀態(tài)控制。
? 滿足 IEEE 802.3 規(guī)定的 MII(媒體無(wú)關(guān)接口)。
針對(duì)以太網(wǎng)控制器需要完成的任務(wù),本節(jié)將設(shè)計(jì)以太網(wǎng)控制器的程序框架,并對(duì)各個(gè)重要部分進(jìn)行講解,如圖 7 所示。
圖 10-7 以太網(wǎng)控制器程序框架
以太網(wǎng)控制器的程序框架包括如下幾個(gè)主要部分。
? 主機(jī)接口(Host Interface):主機(jī)接口用來(lái)連接主機(jī)部分,將接收到的數(shù)據(jù)幀保存到存儲(chǔ)器中,同時(shí)從存儲(chǔ)器中載入需要通過(guò)以太網(wǎng)接口傳輸?shù)臄?shù)據(jù)。主機(jī)上可以實(shí)現(xiàn)更高層次的以太網(wǎng)協(xié)議。
? 數(shù)據(jù)發(fā)送模塊(Transmit Module):完成所有與發(fā)送數(shù)據(jù)相關(guān)的操作,包括產(chǎn)生報(bào)頭、添加 CRC 校驗(yàn)序列等。
? 數(shù)據(jù)接收模塊(Receive Module):完成所有與接收數(shù)據(jù)相關(guān)的操作,包括去除報(bào)頭、CRC 校驗(yàn)。
? 控制模塊(Control Module):完成以太網(wǎng)控制器所有功能需要執(zhí)行的操作。
? 媒體無(wú)關(guān)接口模塊(Media Independent Interface):提供一個(gè)與媒體無(wú)關(guān)的接口,用來(lái)連接外部的以太網(wǎng) PHY 控制芯片。
? 狀態(tài)顯示模塊(Status Module):記錄以太網(wǎng)控制芯片進(jìn)行數(shù)據(jù)傳輸時(shí)各個(gè)狀態(tài)的變化。
? 寄存器模塊(Register Module):為以太網(wǎng)控制芯片提供需要的所有寄存器。
本篇到此結(jié)束,下一篇帶來(lái)基于FPGA的以太網(wǎng)控制器(MAC)設(shè)計(jì)(中),會(huì)介紹以太網(wǎng)控制器(MAC)程序的實(shí)現(xiàn),包括頂層程序、媒體無(wú)關(guān)接口模塊(Media Independent Interface Module)、數(shù)據(jù)發(fā)送模塊、數(shù)據(jù)接收模塊、控制模塊等相關(guān)內(nèi)容。
為了方便參考學(xué)習(xí),后兩篇這里也放上超鏈接:
基于FPGA的以太網(wǎng)控制器(MAC)設(shè)計(jì)(中)
基于FPGA的以太網(wǎng)控制器(MAC)設(shè)計(jì)(下)