丁世勇,譚文文,李桂英
(1.山東科技大學(xué) 信息與電氣工程學(xué)院,山東 青島 266510;2.山東科技大學(xué) 理學(xué)院,山東 青島 266510)
隨著網(wǎng)絡(luò)的飛速發(fā)展,因特網(wǎng)(Internet)在人們的生活中占據(jù)著越來越重要的地位。目前,以太網(wǎng)802.3協(xié)議和TCP/IP協(xié)議是嵌入式系統(tǒng)接入Internet的首選協(xié)議。而以太網(wǎng)(Ethernet)的核心思想是通過帶沖突檢測(cè)的載波偵聽多路訪問協(xié)議(CSMA/CD)[1]來控制對(duì)介質(zhì)的訪問以實(shí)現(xiàn)多用戶共享傳輸信道。根據(jù)OSI網(wǎng)絡(luò)七層參考模型,以太網(wǎng)對(duì)應(yīng)模型中的數(shù)據(jù)鏈路層和物理層,并把數(shù)據(jù)鏈路層分為邏輯鏈路層(LLC)和介質(zhì)訪問控制層(MAC)。以太網(wǎng)技術(shù)主要集中在物理層(PHY)和介質(zhì)訪問控制層(MAC)的實(shí)現(xiàn)上,MAC子層協(xié)議是數(shù)據(jù)幀收發(fā)的基礎(chǔ),負(fù)責(zé)上層數(shù)據(jù)和物理層比特流的封裝和解封、流量控制以及差錯(cuò)校驗(yàn)等功能,是以太網(wǎng)控制器的核心。
以太網(wǎng)MAC控制器由5個(gè)主要部分組成,如圖1所示:主機(jī)接口模塊,發(fā)送模塊,接收模塊,控制模塊和MII(Media Independent Interface)管理模塊。主機(jī)接口包含AHB總線的master和slave接口,提供以太網(wǎng)控制器與上層協(xié)議之間的接口,用于數(shù)據(jù)的接收、發(fā)送以及對(duì)控制器內(nèi)的寄存器的設(shè)置,發(fā)送和接收模塊主要提供MAC幀的發(fā)送和接收功能,直接提供了到物理層芯片(PHY)的并行數(shù)據(jù)接口。MAC控制模塊用于執(zhí)行全雙工模式下的流量控制。MII管理模塊提供了介質(zhì)獨(dú)立接口用于連接數(shù)據(jù)鏈路層和物理層。
圖1 以太網(wǎng)MAC控制器的主要組成部分Fig.1 Main component of Ethernet MAC controller
以太網(wǎng)數(shù)據(jù)幀格式[2]如圖2所示,前導(dǎo)碼的字段長度為7 b,內(nèi)容為“101010..1010”;幀起始符字段長度為 1 b,內(nèi)容為“10101011”;標(biāo)志數(shù)據(jù)幀信號(hào)的開始;目的地址字段長度為7 b,可以為單播地址,多播地址或廣播地址;源地址字段長度為6 B,表示發(fā)送方的MAC地址;長度/類型字段長度為2 B,如果該值小于802.3協(xié)議規(guī)定的最大幀長度,則表示數(shù)據(jù)字段的字節(jié)個(gè)數(shù),如果大于最大幀長度則表示上層使用的協(xié)議;數(shù)據(jù)/填充字段的長度為46~1 500 B,表示數(shù)據(jù)字段的字節(jié)數(shù),若小于46 B,需要添加填充字段,確保數(shù)據(jù)字段的長度達(dá)到協(xié)議規(guī)定的最小長度46 B;校驗(yàn)碼字段長度為4 B,采用CRC校驗(yàn),計(jì)算范圍從目的地址到數(shù)據(jù)填充字段。
圖2 數(shù)據(jù)幀格式Fig.2 Data frame format
數(shù)據(jù)發(fā)送模塊根據(jù)從主機(jī)接口發(fā)出的幀開始(TxStartFrm)和幀結(jié)束(TxEndFrm)信號(hào),從存儲(chǔ)器中獲取相應(yīng)的數(shù)據(jù),對(duì)其進(jìn)行數(shù)據(jù)幀格式的封裝后,根據(jù)CSMA/CD協(xié)議,在信道空閑的時(shí)候把數(shù)據(jù)以半字節(jié)的形式傳輸給PHY。最后由PHY發(fā)送到網(wǎng)絡(luò)上。
發(fā)送狀態(tài)機(jī)模塊是數(shù)據(jù)發(fā)送模塊的核心,控制著整個(gè)發(fā)送過程,發(fā)送狀態(tài)機(jī)一共有10個(gè)狀態(tài):S_idle、S_pre、S_data0、S_data1、S_pad、S_fcs、S_ipg、S_jam、S_back、S_defer。 其狀態(tài)轉(zhuǎn)移圖如圖3所示。
圖3 發(fā)送狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖Fig.3 State transfer diagram of transmitting state machine
系統(tǒng)復(fù)位后,狀態(tài)機(jī)進(jìn)入S_defer狀態(tài)。當(dāng)載波偵聽信號(hào)(CarrierSense)變成無效時(shí),狀態(tài)機(jī)進(jìn)入S_ipg狀態(tài)。在等待一個(gè)幀間間隙(≥96個(gè)比特時(shí)間)[3]之后,狀態(tài)機(jī)進(jìn)入S_idle狀態(tài)。如果在幀間間隙的前2/3個(gè)周期檢測(cè)到信道忙則返回S_defer狀態(tài)。在空閑狀態(tài)下,當(dāng)主機(jī)向發(fā)送模塊發(fā)出幀起始信號(hào)(TxStartFrm),且載波空閑時(shí),狀態(tài)機(jī)進(jìn)入S_pre狀態(tài)。輸出使能信號(hào)(MtxEn)有效并開始向PHY發(fā)送數(shù)據(jù),7 B前導(dǎo)碼發(fā)送后,發(fā)送1 B的幀起始符。之后狀態(tài)機(jī)進(jìn)入S_data0狀態(tài),發(fā)送模塊將發(fā)送一個(gè)數(shù)據(jù)字節(jié)的低4位。之后狀態(tài)機(jī)進(jìn)入S_data1狀態(tài),發(fā)送模塊則發(fā)送字節(jié)的高4位。之后,狀態(tài)一直在S_data0和S_data1之間循環(huán),直至數(shù)據(jù)發(fā)送完畢。還剩下最后一字節(jié)時(shí),主機(jī)會(huì)發(fā)送幀結(jié)束信號(hào)(TxEndFrm)通知發(fā)送模塊。如果幀長度大于或等于最小幀長度(在PACKETLEN寄存器中定義),并且循環(huán)冗余碼校驗(yàn)(CRC)開啟,狀態(tài)機(jī)進(jìn)入S_fcs。發(fā)送完32比特的校驗(yàn)碼后,狀態(tài)機(jī)進(jìn)入S_defer狀態(tài),然后循環(huán)又重新開始。如果CRC不開啟,狀態(tài)機(jī)直接從S_data1轉(zhuǎn)入S_defer狀態(tài)。
如果數(shù)據(jù)幀的長度小于最小幀長度,狀態(tài)就進(jìn)入S_pad狀態(tài),發(fā)送模塊根據(jù)系統(tǒng)設(shè)置來決定是否添加填充碼,然后進(jìn)入S_fcs狀態(tài)。如果數(shù)據(jù)幀的長度大于最大幀長度,發(fā)送模塊根據(jù)設(shè)置決定是否發(fā)送超長幀,如果不支持,狀態(tài)機(jī)直接進(jìn)入S_defer狀態(tài)。
在發(fā)送數(shù)據(jù)過程中,發(fā)送模塊會(huì)一直檢查沖突檢測(cè)信號(hào)。如果發(fā)現(xiàn)沖突且狀態(tài)機(jī)正處于S_pre狀態(tài),狀態(tài)機(jī)在發(fā)送完前導(dǎo)碼和幀起始符后進(jìn)入S_jam狀態(tài),并發(fā)送擁塞碼,然后進(jìn)入S_back狀態(tài),以等待重試。之后狀態(tài)機(jī)經(jīng)S_defer和S_ipg回到S_idle狀態(tài)。如果重試計(jì)數(shù)器沒有達(dá)到重試最大值,發(fā)送模塊將重新開始發(fā)送剛才的幀;如果發(fā)現(xiàn)沖突時(shí)狀態(tài)機(jī)處于S_data0、S_data1或S_fcs狀態(tài)時(shí),且沒有超過沖突時(shí)間窗,狀態(tài)機(jī)馬上進(jìn)入S_jam狀態(tài)并發(fā)送擁塞碼,依次經(jīng)過 S_back、S_defer、S_ipg回到S_idle,并根據(jù)重試計(jì)數(shù)器的值決定是否重新發(fā)送剛才的數(shù)據(jù)幀;如果檢測(cè)到發(fā)生沖突的時(shí)間超過了沖突時(shí)間窗,狀態(tài)機(jī)將進(jìn)入S_defer狀態(tài),經(jīng)S_ipg到S_idle狀態(tài),并放棄重試。
在全雙工模式下,發(fā)送數(shù)據(jù)幀過程中不會(huì)產(chǎn)生沖突。此時(shí),發(fā)送模塊將忽略PHY的載波偵聽和沖突檢測(cè)信號(hào),但幀與幀之間仍然要遵守幀間間隙規(guī)則,因此,全雙工模式下的發(fā)送狀態(tài)機(jī)沒有S_jam、S_back和S_defer 3個(gè)狀態(tài)。
該模塊的主要功能是接受物理層輸出的半字節(jié)數(shù)據(jù),并轉(zhuǎn)換成字節(jié)形式,判斷接受幀的各個(gè)字段,去除前導(dǎo)碼和幀起始符,對(duì)接受幀的目的地址進(jìn)行檢查,對(duì)接受數(shù)據(jù)幀進(jìn)行CRC校驗(yàn),根據(jù)校驗(yàn)結(jié)果判斷是否接收數(shù)據(jù)[4]。
接收狀態(tài)機(jī)模塊是數(shù)據(jù)接收模塊的核心,控制著整個(gè)接收過程, 接收狀態(tài)機(jī)一共有 6個(gè)狀態(tài):S_idle、S_pre、S_sfd、S_data0、S_data1、S_drop。其狀態(tài)轉(zhuǎn)移圖如圖4所示。
圖4 發(fā)送狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖Fig.4 State transfer diagram of receiving state machine
系統(tǒng)復(fù)位后,接收狀態(tài)機(jī)進(jìn)入S_drop狀態(tài),如果接收使能信號(hào)(MRxDV)無效,狀態(tài)機(jī)進(jìn)入S_idle狀態(tài),并一直處于S_idle狀態(tài)等待輸入幀。一般情況下接收模塊在接收數(shù)據(jù)包之前會(huì)檢測(cè)前導(dǎo)碼,標(biāo)準(zhǔn)的前導(dǎo)碼7 B長,之后是1 B的幀起始符。由于以太網(wǎng)控制器也支持接收不帶前導(dǎo)碼只有幀起始符的數(shù)據(jù)幀。所以,當(dāng)MRxDV有效時(shí),判斷接收到得數(shù)據(jù)MRxD是否為0x5,如果不是,狀態(tài)機(jī)進(jìn)入S_pre模塊,并且一直處于S_pre狀態(tài)直至MRxD為0x5時(shí)狀態(tài)機(jī)轉(zhuǎn)入S_sfd狀態(tài)。當(dāng)MRxD為0xd且表示前后兩幀間隙是否滿足規(guī)定的信號(hào)IFGCounterEq24有效時(shí),狀態(tài)機(jī)進(jìn)入S_data0狀態(tài)以接收字節(jié)的低4位,之后進(jìn)入S_data1狀態(tài)以接收字節(jié)的高4位。直至數(shù)據(jù)傳輸完畢,PHY芯片使MRxDV無效,狀態(tài)機(jī)進(jìn)入S_idle。如果兩幀間隙不滿足規(guī)定,狀態(tài)機(jī)直接從S_sfd狀態(tài)進(jìn)入S_drop狀態(tài),直到MRxDV無效時(shí)進(jìn)入S_idle狀態(tài),循環(huán)重新開始。另外當(dāng)狀態(tài)機(jī)處于 S_pre、S_sfd、S_data0或S_data1時(shí)只要MRxDV變成無效,狀態(tài)都進(jìn)入S_idle狀態(tài)。
MII對(duì)物理層寄存器的操作是通過發(fā)送管理幀來實(shí)現(xiàn)的,管理幀格式[5]如圖5所示。前導(dǎo)碼字段長度為4 B,全為1,已使物理層與數(shù)據(jù)同步;幀起始符字段長度為2 b,值為“01”;操作碼字段長度為 2 b,“01”表示寫操作,“10”表示讀操作;物理層地址字段長度為5 b,表示物理層地址;寄存器地址字段長度為5 b,表示物理層內(nèi)部的寄存器地址;轉(zhuǎn)換碼字段長度為2 b,表示數(shù)據(jù)輸入或輸出,讀操作時(shí)轉(zhuǎn)化碼為“Z0”,寫操作時(shí),狀態(tài)為“10”;數(shù)據(jù)字段長度為 2 b,表示寫入或讀出的寄存器的值。
圖5 管理幀格式Fig.5 Management frame format
MII管理模塊提供了與外部PHY芯片交互的接口,可以對(duì)PHY里的配置寄存器進(jìn)行設(shè)置或讀出寄存器的狀態(tài)。接口有兩個(gè)信號(hào)組成:時(shí)鐘信號(hào) (MDC)和雙向數(shù)據(jù)信號(hào)(MDIO)。MDIO有輸入信號(hào)Mdi,輸出信號(hào)Mdo以及輸出使能信號(hào)MdoEn組成。MII管理模塊包含3個(gè)子模塊:時(shí)鐘產(chǎn)生模塊,移位寄存器模塊和輸出控制模塊。
時(shí)鐘產(chǎn)生模塊產(chǎn)生時(shí)鐘信號(hào)Mdc用于與PHY通信,設(shè)置Mdc的頻率時(shí)要參照外部PHY芯片的說明??赏ㄟ^設(shè)置MIIMODER寄存器來設(shè)置Mdc的分頻系數(shù)。
移位寄存器作用是在輸出數(shù)據(jù)時(shí)把并行數(shù)據(jù)一位一位串行的輸給外部PHY,接收輸入數(shù)據(jù)時(shí)把串行數(shù)據(jù)轉(zhuǎn)化為并行存入MIIRX_DATA寄存器。
輸出控制模塊主要是產(chǎn)生輸出數(shù)據(jù)和輸出使能信號(hào),雖然MDIO是雙向數(shù)據(jù)信號(hào),但Mdi是輸入信號(hào),不屬于MAC控制器的一部分,如果在MIIMODER寄存器中設(shè)置前導(dǎo)碼(Preamble)有效,輸出控制模塊會(huì)在有效數(shù)據(jù)前產(chǎn)生32比特的前導(dǎo)碼
MAC控制模塊實(shí)現(xiàn)全雙工模式下的流量控制功能。當(dāng)接收站點(diǎn)的接收緩沖區(qū)快要溢出或者主機(jī)發(fā)出流量控制請(qǐng)求時(shí),就會(huì)發(fā)出流量控制請(qǐng)求至MAC控制模塊,MAC流量控制模塊在接收到流量控制請(qǐng)求后會(huì)發(fā)送PAUSE控制幀。數(shù)據(jù)幀發(fā)送端接收到PAUSE幀后,根據(jù)幀中的參數(shù)設(shè)置定時(shí)器。PAUSE定時(shí)器到之前,發(fā)送端將暫停發(fā)送數(shù)據(jù),從而防止接收緩存溢出。
主機(jī)接口模塊為MAC控制器與上層協(xié)議模塊的接口,可將上層協(xié)議模塊輸入的數(shù)據(jù)傳輸?shù)綌?shù)據(jù)發(fā)送模塊,將數(shù)據(jù)接收模塊接收的數(shù)據(jù)輸出到上層模塊,并控制MII管理模塊。
主機(jī)接口模塊內(nèi)有一組寄存器,可用于存儲(chǔ)上層協(xié)議對(duì)MAC設(shè)置的參數(shù)以及MAC的狀態(tài)信息。上層協(xié)議對(duì)MAC設(shè)置的參數(shù)包括接受超短幀使能、添加填充碼使能、全雙工模式或半雙工模式、發(fā)送和接收使能、幀間間隙的長度、最大幀和最小幀的長度、重試次數(shù)限制以及本機(jī)的MAC地址等。
利用Modelsim對(duì)Ethernet控制器進(jìn)行了仿真[6],圖6為發(fā)送狀態(tài)機(jī)的仿真波形??梢钥吹綘顟B(tài)機(jī)在S_defer狀態(tài)時(shí)載波偵聽信號(hào)無效,隨即狀態(tài)機(jī)進(jìn)入S_ipg狀態(tài),在等待一個(gè)幀間間隙之后,狀態(tài)機(jī)進(jìn)入S_idle狀態(tài),此時(shí),幀起始信號(hào)(TxStartFrm)有效,狀態(tài)機(jī)進(jìn)入S_pre狀態(tài),發(fā)送完7 B前導(dǎo)碼和1 B幀起始符后,狀態(tài)機(jī)進(jìn)入S_data0,然后在S_data0和S_data1之間循環(huán),直至數(shù)據(jù)發(fā)送完畢。從圖6可知設(shè)計(jì)的時(shí)序與802.3規(guī)定的時(shí)序一致。
圖6 發(fā)送狀態(tài)機(jī)的仿真波形圖Fig.6 Simulation wave chart of transmitting state machine
文中設(shè)計(jì)的以太網(wǎng)MAC控制器IP可正確接收和發(fā)送數(shù)據(jù),實(shí)現(xiàn)了802.3協(xié)議中MAC層的功能,可通過介質(zhì)獨(dú)立接口(MII)與以太網(wǎng)物理層芯片相連接,實(shí)現(xiàn)半雙工和全雙工兩種工作模式的傳輸。
[1]Andrew S.Tanenbaum.計(jì)算機(jī)網(wǎng)絡(luò)[M].4版.潘愛民,譯.北京:清華大學(xué)出版社,2004.
[2]龔堅(jiān),彭暉,喬廬峰,等.標(biāo)準(zhǔn)802.3以太網(wǎng)MAC控制器的FPGA設(shè)計(jì)與實(shí)現(xiàn)[J].軍事通信技術(shù),2005,26(4):21-24.GONG Jian,PENG Hui,QIAO Lu-feng,et al.FPGA design and implementation ofstandard 802.3 ethernetMAC Controller[J].Journal of Military Communications Technology,2005,26(4):21-24.
[3]IEEE Std 802.3,2000 Edition Part3:Carrier sense multiple access with collision detection (CSMA/CD)access method and physical layer specifications[S].USA,LAN/MAN standards Committee of the IEEE Computer Society,2000.
[4]許全泉,胡文江,蘇里.基于PFGA的以太網(wǎng)控制器設(shè)計(jì)[J].電子元器件應(yīng)用,2007,9(6):21-25.XU Quan-quan,HU Wen-jiang,SU Li.The design of ethernet controller based on FPGA[J].Electronic Component&Device Application,2007,9(6):21-25.
[5]張博,張琨.基于FPGA的以太網(wǎng)MAC控制器的設(shè)計(jì)[J].科技情報(bào)開發(fā)與經(jīng)濟(jì),2009,19(27):97-99.ZHANG Bo,ZHANG Kun.The Design of Ethernet MAC Controller based on FPGA[J].Sci-tech Information Developmen&Economy,2009,19(27):97:99.
[6]楊宗凱.數(shù)字專用集成電路的設(shè)計(jì)與驗(yàn)證[M].北京:電子工業(yè)出版社,2004:197-205.