傳統以PC為中心的互聯(lián)網(wǎng)應用現已開(kāi)始轉向以嵌入式設備為中心. IA(internet appliance) 概念現在甚為流行,這表明互聯(lián)網(wǎng)應用進(jìn)入了嵌入式互聯(lián)網(wǎng)的時(shí)代已經(jīng)來(lái)臨. 據網(wǎng)絡(luò )專(zhuān)家預測,將來(lái)在互聯(lián)網(wǎng)上傳輸的信息中,有70%來(lái)自小型嵌入式系統. 因此,對嵌入式系統接入Internet網(wǎng)絡(luò )的研究是有必要的. 目前有兩種方法可以實(shí)現單片機系統接入Internet.一種方法是利用NIC(網(wǎng)絡(luò )控制/ 網(wǎng)卡) 實(shí)現網(wǎng)絡(luò )接口,由單片機來(lái)提供所需的網(wǎng)絡(luò )協(xié)議. 另外一種方法是利用具有網(wǎng)絡(luò )協(xié)議棧結構的芯片和PHY(物理層的接收器) 來(lái)實(shí)現網(wǎng)絡(luò )接口,主控制器只負責往協(xié)議棧結構芯片的某個(gè)寄存器里放上適當的數據. 美國Seiko Instrument 公司生產(chǎn)的S7600A 就是具有這種結構的芯片. 與此同時(shí),用FPGA實(shí)現單片機系統接入Internet的方法也日益受到人們的重視. FPGA是現場(chǎng)可編程門(mén)陣列的縮寫(xiě),是近年來(lái)發(fā)展迅速的大規?删幊唐骷,具有密度高,速度快,功耗小、使用方便等特點(diǎn) ,在嵌入式系統設計中得到了廣泛的應用. 以MCU 為核心,采用FPGA 設計實(shí)現外圍電路,不僅可以使設計的電子產(chǎn)品小型化、集成化和實(shí)現高可靠性,還大大縮短了設計周期,減少了設計費用,降低了設計風(fēng)險. 本文提出采用FPGA實(shí)現網(wǎng)絡(luò )協(xié)議棧,著(zhù)重介紹以太網(wǎng)MAC 子層協(xié)議的硬件實(shí)現方法. 1 以太網(wǎng)MAC 子層協(xié)議 IEEE802協(xié)議標準系列中,數據鏈路層包括邏輯鏈路控制(LLC) 子層和媒體訪(fǎng)問(wèn)控制(MAC) 子層. 其中MAC 位于LLC 和物理層之間,它使LLC 適應于不同的媒體訪(fǎng)問(wèn)技術(shù)和物理媒體. MAC 單獨作為一個(gè)子層,就不會(huì )因為媒體訪(fǎng)問(wèn)方法的改變而影響較高層次的協(xié)議. MAC 由數據拆裝和媒體訪(fǎng)問(wèn)管理兩個(gè)模塊組成,完成數據幀的封裝、解封、發(fā)送和接收功能.以太網(wǎng)數據幀封裝格式如表1 所示,其中目的地址、源地址、長(cháng)度/ 類(lèi)型和數據4 個(gè)字段由上一層協(xié)議模塊生成. 傳送數據幀時(shí),數據封裝模塊自動(dòng)在待傳輸數據前面添加7 個(gè)字節的前導碼和1 個(gè)字節的定界符,并在數據傳送結束時(shí)加發(fā)4 個(gè)字節的循環(huán)冗余校驗碼,如果數據長(cháng)度小于46 字節,則會(huì )自動(dòng)進(jìn)行數據填充以達到要求的最短長(cháng)度. 接收數據幀時(shí),數據拆裝模塊將自動(dòng)丟棄前導碼和定界符2 個(gè)字段. 媒體訪(fǎng)問(wèn)管理模塊主要實(shí)現CSMA/CD(carrier sense multiple access with collision detection) 協(xié)議 . CSMA/CD 是一種分布式介質(zhì)訪(fǎng)問(wèn)控制協(xié)議,使網(wǎng)中的多個(gè)站(節點(diǎn)) 可以共享傳輸介質(zhì). 發(fā)送數據幀時(shí),節點(diǎn)首先進(jìn)行載波監聽(tīng),當介質(zhì)空閑時(shí)開(kāi)始發(fā)送幀. 如果在傳輸過(guò)程中與其他節點(diǎn)產(chǎn)生沖突,則正在傳輸的每個(gè)節點(diǎn)必須發(fā)出32 比特大小的阻塞信號來(lái)加強沖突,以便通知總線(xiàn)上各個(gè)站點(diǎn)已發(fā)生沖突,然后隨機延時(shí)一段時(shí)間重新?tīng)幱媒橘|(zhì),再重新傳送數據幀. 2 MAC 子層協(xié)議的FPGA 實(shí)現 以太網(wǎng)MAC 子層協(xié)議的硬件結構框圖如圖1 所示,由控制模塊、發(fā)送模塊和接收模塊3個(gè)部分組成. 由于小型嵌入式系統主要應用在集散控制系統中,信息交流多為“一問(wèn)一答”式的半雙工通信模式,同時(shí)為了降低硬件資源的開(kāi)銷(xiāo),本模塊僅支持半雙工通信模式. 圖1 硬件結構框圖 2. 1 控制模塊 該模塊包含主機接口、寄存器、發(fā)送數據緩沖區及接收數據緩沖區4 個(gè)部分. 主機接口部分用以實(shí)現與MCU 之間的數據交換,采用8 位外部數據總線(xiàn). 寄存器主要用于功能參數的設置及狀態(tài)信息的存貯. 發(fā)送數據緩沖區是主機與發(fā)送模塊之間的數據傳輸通道,接收數據緩沖區則是主機與接收模塊之間的數據傳輸通道. 控制模塊的工作時(shí)鐘有兩種選擇方式,一種是直接由外部提供,另一種是外部時(shí)鐘通過(guò)FPGA 片內的延遲鎖相環(huán)進(jìn)行倍頻后供內部使用,用戶(hù)可以根據系統設計實(shí)際需要自由選擇. 數據緩沖區(發(fā)送數據緩沖區和接收數據緩沖區) 用作發(fā)送與接收數據的緩沖,以使主機的傳輸速度與本模塊相匹配. 發(fā)送數據時(shí),主機先將待發(fā)送的數據幀寫(xiě)入發(fā)送數據緩沖區,然后由發(fā)送模塊將數據讀出. 傳統意義上的數據緩沖區由一塊內部或外部RAM來(lái)實(shí)現,但這樣需要設計實(shí)現一個(gè)復雜的控制狀態(tài)機來(lái)管理主機、發(fā)送模塊和接收模塊3 個(gè)部分對RAM的讀寫(xiě). Spartan Ⅱ系列的FPGA 內部提供了豐富的塊RAM資源,可以配置雙端口RAM. 因此本文將發(fā)送緩沖區分成兩個(gè)獨立的部分,這樣每個(gè)數據緩沖區便可以由雙端口的RAM來(lái)實(shí)現,大大簡(jiǎn)化了設計,節省了硬件資源. 2. 2 發(fā)送模塊 該模塊主要實(shí)現CSMA/CD 協(xié)議,完成數據幀的傳送,即以字節為單位從發(fā)送緩沖區讀取數據,并將其轉換成4 比特的半位元傳送給以太網(wǎng)的物理層PHY芯片,結構框圖如圖2 所示.重發(fā)計數器用以存貯當前幀成功傳輸時(shí)的發(fā)送次數. 幀間隙計數器用以保證相鄰兩個(gè)幀之間保持一定的傳輸時(shí)間間隔. 沖突窗計數器用以判斷當前所發(fā)生的沖突是否為后沖突(late collision) . 延時(shí)計數器用以存貯啟動(dòng)傳輸后等待總線(xiàn)空閑的時(shí)間,當超過(guò)一定時(shí)間后將放棄當前幀的傳輸.這4 個(gè)功能子模塊都由1個(gè)計數器和1個(gè)比較器來(lái)實(shí)現. 退避計數器模塊用以實(shí)現二進(jìn)制指數退避算法,包括一個(gè)偽隨機數生成器. CRC 生成電路用以實(shí)現數據幀的校驗碼序列,采用4 位數據線(xiàn)并行方式實(shí)現. 圖2 發(fā)送模塊結構框圖 發(fā)送控制狀態(tài)機是整個(gè)發(fā)送模塊的核心,用以管理各個(gè)功能子模塊,并使它們按照一定的時(shí)序協(xié)同工作,其狀態(tài)圖如圖3 所示. 當總線(xiàn)被其他站點(diǎn)占用進(jìn)行數據傳輸時(shí),發(fā)送模塊處于Defer 狀態(tài),如果此時(shí)數據準備好需要傳輸則啟動(dòng)延時(shí)計數器,經(jīng)過(guò)規定的最大延時(shí)時(shí)間后總線(xiàn)仍被占用則放棄當前幀的傳輸. 當總線(xiàn)空閑后則進(jìn)入IPG狀態(tài),經(jīng)過(guò)最小幀間間隙時(shí)間自動(dòng)進(jìn)入空閑狀態(tài)IDLE 并等待數據傳輸,此時(shí)如果數據準備好并且數據的長(cháng)度大于46 字節則按照前導碼、數據、校驗序列的順序進(jìn)行數據幀的傳輸,否則按照前導碼、數據、數據填充、校驗序列的順序進(jìn)行數據幀的傳輸;在傳輸過(guò)程中,如果遇到?jīng)_突則進(jìn)入Jam 狀態(tài),發(fā)送32 比特的阻塞信號加強沖突以保證網(wǎng)絡(luò )的各個(gè)站點(diǎn)都可以檢測到此次的沖突,如果此次沖突是后沖突則直接進(jìn)入Defer狀態(tài),并丟棄當前幀,否則進(jìn)入Back狀態(tài),隨機延時(shí)一段時(shí)間后重新?tīng)幱每偩(xiàn)來(lái)傳輸當前幀. 圖3 發(fā)送控制狀態(tài)機 2. 3 接收模塊 該模塊主要完成數據幀的接收, 即從物理層PHY芯片接收4比特半位元數據,將其轉化成以字節為單位的數據并存貯在接收數據緩沖區,結構框圖如圖4 所示. 圖4 接收模塊結構框圖 圖4中的地址判斷子模塊用以檢查幀的目的地址字段是否與本站地址相匹配,如果不匹配,則說(shuō)明不是發(fā)送給本站的而將它丟棄掉. 幀間隙計數器用以檢測接收到的數據幀與前一幀之間是否滿(mǎn)足最小幀間間隔的要求,如果不滿(mǎn)足則將它丟棄. 接收字節計數器用以存貯接收幀的字節長(cháng)度,判斷接收幀長(cháng)度是否滿(mǎn)足要求(在最小幀長(cháng)度與最大幀長(cháng)度之間) . CRC 生成電路與發(fā)送模塊一樣采用4 位數據線(xiàn)并行方式實(shí)現. 接收控制狀態(tài)機是整個(gè)接收模塊的核心,負責管理各個(gè)功能子模塊,檢測總線(xiàn)及實(shí)現接收數據幀的時(shí)序,其狀態(tài)圖如圖5 所示. 通常接收模塊處于IDLE 狀態(tài)并監聽(tīng)總線(xiàn)的狀態(tài),當檢測到以太網(wǎng)幀的前導碼時(shí)自動(dòng)進(jìn)入SFD 狀態(tài),此時(shí)如果接收到以太網(wǎng)數據幀的幀定界符,并且與前一個(gè)數據幀之間的時(shí)間間隔大于最小幀間間隙,則接收模塊進(jìn)入數據接收狀態(tài)開(kāi)始接收數據. 處于Data0 狀態(tài)時(shí)接收字節的低4 位,而處于Datal 狀態(tài)時(shí)接收字節的高4 位,并在Data0 狀態(tài)將接收到的完整字節數據存貯到接收數據緩沖區.如果接收的數據字節數超過(guò)允許的最大幀長(cháng)度,則接收模塊進(jìn)入Drop 狀態(tài),此時(shí)丟棄后面的數據. 當全部數據傳輸完畢即總線(xiàn)處于空閑時(shí),接收模塊重新處于IDLE 狀態(tài),等待接收下一個(gè)數據幀. 圖5 接收控制狀態(tài)圖 3 綜合與仿真 本文采用Xilinx 公司的Spartan Ⅱ系列XC2S100PQ208芯片,整個(gè)設計全部采用Verilog HDL 硬件描述語(yǔ)言來(lái)實(shí)現,并在Foundation3. 1 的設計平臺上完成整個(gè)模塊的設計、綜合、仿真、映射及布局布線(xiàn). 圖6為發(fā)送時(shí)序仿真的波形,從圖中可以看出,當傳輸過(guò)程中發(fā)生沖突時(shí)繼續發(fā)送32 比特的阻塞碼,然后隨機延時(shí)一段時(shí)間重新?tīng)幱媒橘|(zhì)以傳輸數據,這說(shuō)明本模塊滿(mǎn)足了CSMA/ CD 協(xié)議. 圖6 發(fā)送時(shí)序仿真波形 4 結語(yǔ) 本文介紹了一種簡(jiǎn)易的基于FPGA 的以太網(wǎng)MAC 子層協(xié)議的設計方法. 通過(guò)本模塊可以簡(jiǎn)單方便地實(shí)現小型嵌入式系統的Internet 網(wǎng)絡(luò )接口,如果再結合基于FPGA 實(shí)現的TCP/ IP 協(xié)議棧及其他輔助功能模塊,不僅可以使小型嵌入式系統接入網(wǎng)絡(luò )更加簡(jiǎn)單,而且系統的集成度、穩定性將進(jìn)一步得到提高. |