1.千兆以太網(wǎng)技術(shù)簡(jiǎn)介 以太網(wǎng)技術(shù)是當今應用廣泛的網(wǎng)絡(luò )技術(shù),千兆以太網(wǎng)技術(shù)繼承了以往以太網(wǎng)技術(shù)的許多優(yōu)點(diǎn),同時(shí)又具有許多新的特性,例如傳輸介質(zhì)包括光纖和銅纜,使用8B/10B的編解碼方案,采用載波擴展和分組突發(fā)技術(shù)等。正是因為具有良好的繼承性和許多優(yōu)秀的新特性,千兆以太網(wǎng)已經(jīng)成為目前局域網(wǎng)的主流解決方案。 千兆以太網(wǎng)利用了原以太網(wǎng)標準所規定的全部技術(shù)規范,其中包括CSMA/CD協(xié)議、以太網(wǎng)幀、全雙工、流量控制以及IEEE 802.3標準中所定義的管理對象。千兆以太網(wǎng)的關(guān)鍵技術(shù)是千兆以太網(wǎng)二層(MAC層)的交換與以太網(wǎng)接口的實(shí)現。隨著(zhù)多媒體應用的普及,千兆以太網(wǎng)必將成為各類(lèi)以太網(wǎng)技術(shù)的主力軍。 2.Xilinx的千兆以太網(wǎng)解決方案 1)IP的支持 Xilinx提供了可參數化的10/1Gbps以太網(wǎng)媒體訪(fǎng)問(wèn)控制器功能LogiCORE解決方案。該核設計用來(lái)同最新的Virtex-5、Virtex-4和Virtex-II Pro平臺FPGA一起工作,并可以無(wú)縫集成到Xilinx設計流程中。吉比特級以太網(wǎng)媒體訪(fǎng)問(wèn)控制器核(GEMAC)是針對1Gb/s(Gbps)以太網(wǎng)媒體訪(fǎng)問(wèn)控制器功能的可參數化的LogiCORE IP解決方案。GEMAC核的設計符合 IEEE 802.3-2002規范。GWMAC核支持兩個(gè)PHY端接口選項:GMII或RGMII。并且,Xilinx 全面的1Gb/s以太網(wǎng)解決方案包含吉比特MAC和PCS/PMA IP核產(chǎn)品。Xilinx吉比特以太網(wǎng)MAC解決方案還包括帶有內置處理器本地總線(xiàn)(PLB)接口(PLB GEMAC)的配置。該配置通過(guò)Xilinx嵌入式開(kāi)發(fā)套件(EDK)提供。GEMAC LogiCORE IP可以實(shí)現與1000 Base-X PCS/PMA或SGMII核的無(wú)縫集成,并提供3種選項用來(lái)與PHY器件接口:1000 BASE-X或10位接口(TBI)或SGMII。 GEMAC核非常適合開(kāi)發(fā)高密度吉比特級以太網(wǎng)通信和存儲設備,其關(guān)鍵特性有:
2)相應的開(kāi)發(fā)板套件 Xilinx提供的千兆以太網(wǎng)開(kāi)發(fā)套件為Virtex-5 ML505/ML506開(kāi)發(fā)板(使用的FPGA芯片為:XC5VLX50T-1FF1136),該開(kāi)發(fā)板支持10/100兆、1/10吉以太網(wǎng),加上Xilinx公開(kāi)的基于ML505/506的設計,可為基于以太網(wǎng)開(kāi)發(fā)的設計提供全方位的參考。此外,ML505/506還具備SFP、PCI E、SATA以及SMA接口等其余吉比特接口,是學(xué)習和研發(fā)高速連接設備的理想平臺。 10.4.2 基于FPGA的千兆以太網(wǎng)MAC控制器實(shí)現方案 1.整體設計方案 以太網(wǎng)控制器的FPGA設計工作包括以太網(wǎng)MAC子層的FPGA設計、MAC子層與上層協(xié)議的接口設計以及MAC與物理層(PHY)的MII接口設計。該以太網(wǎng)控制器的總體結構設計框圖如圖10-30所示。整個(gè)系統分為發(fā)送模塊、接收模塊、MAC狀態(tài)模塊、MAC控制模塊、MII管理模塊和主機接口模塊六部分。發(fā)送模塊和接收模塊主要提供MAC幀的發(fā)送和接收功能,其主要操作有MAC幀的封裝與解包以及錯誤檢測,它直接提供了到外部物理層芯片的并行數據接口。在實(shí)現中物理層處理直接利用商用的千兆PHY芯片,主要開(kāi)發(fā)量集中在MAC控制器的開(kāi)發(fā)上。 圖10-30 以太網(wǎng)控制器的結構設計框圖 MAC控制模塊則用于執行全雙工模式中的流量控制功能。MAC狀態(tài)模塊可用來(lái)監視MAC操作過(guò)程的各種狀態(tài)信息,并作修改。MII管理模塊提供了標準的IEEE 802.3介質(zhì)獨立接口,可用于連接以太網(wǎng)的鏈路層與物理層。主機接口則提供以太網(wǎng)控制器與上層協(xié)議(如TCP/IP協(xié)議)之間的接口,以用于數據的發(fā)送、接收以及對控制器內各種寄存器(控制、狀態(tài)和命令寄存器)的設置。 2.MAC控制器結構和工作流程 1)MAC發(fā)送模塊 MAC發(fā)送模塊可將上層協(xié)議提供的數據封裝之后通過(guò)MII接口發(fā)送給PHY。發(fā)送模塊可接收主機接口模塊的數據幀開(kāi)始和數據幀結束標志,并通過(guò)主機接口從外部存儲器中讀取要發(fā)送的數據,然后對數據進(jìn)行封裝,再通過(guò)PHY提供的載波偵聽(tīng)和沖突檢測信號,在信道空閑時(shí)由MII接口將數據以4位的寬度發(fā)送給PHY芯片,最后由PHY將數據發(fā)送到網(wǎng)絡(luò )上。 發(fā)送模塊由CRC生成模塊(crc_gen)、隨機數生成模塊(random_gen)、發(fā)送計數模塊(tx_cnt)和發(fā)送狀態(tài)機(tx_statem_machine)模塊等四個(gè)主要子模塊組成,其內部結構如圖10-31所示。 圖10-31 以太網(wǎng)MAC發(fā)送模塊的結構示意圖 發(fā)送狀態(tài)機由Idle_State、Preamble_State、Data0_State、Data1_State、PAD_State、FCS_State、IPG_State、Jam_State、BackOff_State、Defer_State 等十個(gè)狀態(tài)組成。其狀態(tài)轉移圖如圖10-32所示。 圖10-32 發(fā)送狀態(tài)機的狀態(tài)轉移圖 系統復位后,發(fā)送模塊即進(jìn)入Defer_State狀態(tài),并一直檢測載波偵聽(tīng)(CarrierSense)信號。當載波偵聽(tīng)信號變成無(wú)效(表示信道空閑)時(shí),狀態(tài)機進(jìn)入IPG_State狀態(tài)。此后,在等待一個(gè)幀間間隙之后,狀態(tài)機進(jìn)入Idle_State狀態(tài)。如果在幀間間隙的前2/3個(gè)周期檢測到信道忙信號,狀態(tài)機將重新回到Defer_State狀態(tài)。 狀態(tài)機進(jìn)入Idle_State狀態(tài)之后,發(fā)送模塊將檢測載波偵聽(tīng)信號和主機接口的發(fā)送請求。若主機模塊請求發(fā)送,狀態(tài)機將進(jìn)入Preamble_State狀態(tài),發(fā)送模塊即通知PHY發(fā)送開(kāi)始,同時(shí)開(kāi)始發(fā)送前序碼(7個(gè)0x5), 然后發(fā)送幀起始定界符(SFD, 0xd)。狀態(tài)機進(jìn)入Data0_State后,發(fā)送模塊將發(fā)送一個(gè)數據字節的低4位(LSB nibble),當其進(jìn)入Data1_State狀態(tài)后,發(fā)送模塊則發(fā)送數據字節的高4位(MSB nibble)。隨后,狀態(tài)機一直在data0和data1之間循環(huán),直到數據發(fā)送完畢。當還剩一個(gè)字節時(shí),主機模塊將通過(guò)發(fā)送幀結束信號來(lái)通知發(fā)送模塊。如果數據幀的長(cháng)度大于最小幀并且小于最大幀,狀態(tài)機就進(jìn)入FCS_State狀態(tài),此時(shí)發(fā)送模塊則將CRC生成模塊生成的CRC值添加到幀的FCS字段中并發(fā)送給PHY。 幀發(fā)送完之后,狀態(tài)機進(jìn)入Defer_State 狀態(tài),之后是IPG_State和Idle_State狀態(tài)。此后狀態(tài)機又回到初始狀態(tài),以重新等待新的發(fā)送請求。如果數據幀的長(cháng)度小于最短幀,狀態(tài)機就進(jìn)入PAD_State狀態(tài),發(fā)送模塊根據系統設置確定是否在數據之后添加填充碼。然后,狀態(tài)機進(jìn)入FCS_State狀態(tài)。如果數據幀的長(cháng)度大于最大幀,而系統設置又支持發(fā)送超長(cháng)幀,那么,狀態(tài)機就進(jìn)入FCS_State狀態(tài);如果不支持發(fā)送超長(cháng)幀,發(fā)送模塊將放棄發(fā)送,狀態(tài)機直接進(jìn)入Defer狀態(tài),然后是IPG狀態(tài),最后回到Idle狀態(tài)。 在發(fā)送數據的過(guò)程中,發(fā)送模塊會(huì )一直檢查沖突檢測信號(collision detected)。如果發(fā)現沖突且狀態(tài)機正處于Preamble_State,狀態(tài)機將在發(fā)送完前序碼和SFD之后進(jìn)入Jam_State,并發(fā)送擁塞碼,然后進(jìn)入BackOff狀態(tài),以等待重試。之后,狀態(tài)機經(jīng)過(guò)Defer和IPG回到Idle狀態(tài)。如果此時(shí)重試次數計數器的值沒(méi)有達到額定值,發(fā)送模塊將重新開(kāi)始發(fā)送剛才的幀,并將重試次數計數器的值加1;如果發(fā)現沖突且狀態(tài)機處于data0、data1或FCS狀態(tài),而且沒(méi)有超過(guò)沖突時(shí)間窗,那么狀態(tài)機將馬上進(jìn)入Jam狀態(tài)發(fā)送擁塞碼,之后經(jīng)過(guò)BackOff、Defer、IPG、回到Idle,并根據重試計數器的值決定是否重新發(fā)送剛才的數據幀;如果檢測到發(fā)生沖突的時(shí)間超過(guò)了沖突時(shí)間窗,狀態(tài)機將進(jìn)入Defer狀態(tài),然后經(jīng)過(guò)IPG到IDLE狀態(tài),并放棄重試。 在全雙工模式中發(fā)送幀時(shí),不會(huì )進(jìn)行延遲(defer), 發(fā)送的過(guò)程中也不會(huì )產(chǎn)生沖突。此時(shí),發(fā)送模塊將忽略PHY的載波偵聽(tīng)和沖突檢測信號。當然,幀與幀之間仍然需遵守幀間間隙的規則。因此,全雙工模式下的發(fā)送狀態(tài)機沒(méi)有Jam_State、BackOff_State、Defer_State三個(gè)狀態(tài)。 2)MAC接收模塊 MAC接收模塊結構如圖10-33所示,負責數據幀的接收。當外部PHY將通信信道的串行數據轉換為半字節長(cháng)的并行數據并發(fā)送給接收模塊后,接收模塊會(huì )將這些半字節數據轉換為字節數據,然后經(jīng)過(guò)地址識別、CRC校驗、長(cháng)度判斷等操作后,再通過(guò)主機接口寫(xiě)入外部存儲器,并在主機接口模塊的接收隊列中記錄幀的相關(guān)信息。此外,接收模塊還負責前序碼和CRC的移除。 圖10-33 以太網(wǎng)MAC接收模塊的結構示意圖 接收過(guò)程的接收狀態(tài)機由Idle_State、Drop_State、Preamble_State、SFD_State、Data0_State、Data1_State等六個(gè)狀態(tài)組成, 其狀態(tài)轉移圖如圖10-34所示。 圖10-34 接收狀態(tài)機的狀態(tài)轉移圖 當接收模塊檢測到數據有效信號之后,,狀態(tài)機將進(jìn)入Preamble_State,并開(kāi)始接收前序碼。此后狀態(tài)機進(jìn)入SFD_State,接收一個(gè)字節的幀起始定界符,之后根據IFGcnt計數器的值進(jìn)入不同的狀態(tài)。如果IFGcnt所確定的時(shí)間大于96個(gè)比特時(shí)間,狀態(tài)機將進(jìn)入Data0狀態(tài)以接收字節的低4位,然后是Data1狀態(tài),并接收字節的高4位,之后又回到Data0狀態(tài)。狀態(tài)機就一直在這兩個(gè)狀態(tài)之間循環(huán),直到數據接收完畢(PHY清除MRxDV信號)后進(jìn)入Idle,以重新等待接收新的數據;如果接收到幀起始定界符時(shí),IFGcnt計數器所確定的時(shí)間小于96個(gè)比特時(shí)間,那么狀態(tài)機將進(jìn)入Drop_State狀態(tài),并一直維持該狀態(tài)直到數據有效信號結束(PHY清除MRxDV信號)。之后,狀態(tài)機再回到Idle等待接收新的數據。如果在接收前序碼、幀起始定界符和數據期間,數據有效信號被清除,那么狀態(tài)機將回到Idle。 3)MII管理模塊 MII管理模塊用于控制MAC與外部PHY之間的接口,用于對PHY進(jìn)行配置并讀取其狀態(tài)信息。該接口由時(shí)鐘信號MDC和雙向數據信號MDIO組成。MII管理模塊則由時(shí)鐘生成模塊、移位寄存器模塊和輸出控制模塊三部分組成。 時(shí)鐘生成模塊可以根據系統時(shí)鐘和系統設置中的分頻系數來(lái)產(chǎn)生MII 管理模塊的時(shí)鐘信號MDC(10 Mbps速率時(shí)為2.5 MHz, 100 Mbps速率時(shí)為25 MHz)。移位寄存器模塊既可用于對PHY的控制數據進(jìn)行寫(xiě)入操作,也可用于對PHY的狀態(tài)信息進(jìn)行讀出操作。寫(xiě)控制數據時(shí),移位寄存器根據其他模塊的控制信號將并行控制數據轉換為串行數據;而在讀狀態(tài)信息時(shí),移位寄存器則將PHY的串行數據轉換為并行數據,MAC中的其他模塊可將該并行數據寫(xiě)入適當的寄存器。 由于MDIO是雙向信號,因此輸出控制模塊就用來(lái)決定MDIO是處于輸入狀態(tài)還是輸出狀態(tài)。當MDIO處于輸出狀態(tài)時(shí),移位寄存器輸出的串行控制數據在經(jīng)過(guò)時(shí)鐘同步后發(fā)送到PHY;當MDIO處于輸入狀態(tài)時(shí),移位寄存器將數據線(xiàn)上的串行數據轉換為并行數據 4)主機接口模塊 主機接口是運行以太網(wǎng)的上層協(xié)議(如TCP/IP協(xié)議)與MAC控制器的接口。通過(guò)該接口,上層協(xié)議可以設置MAC的工作模式并讀取MAC的狀態(tài)信息。該接口還可用于上層協(xié)議與MAC之間的數據交換。 主機接口模塊內有一組寄存器,可用于存儲上層協(xié)議對MAC設置的參數以及MAC的狀態(tài)信息。上層協(xié)議對MAC設置的參數包括接收超短幀的使能、添加填充碼使能、發(fā)送超長(cháng)幀的使能、添加CRC校驗值使能、全雙工模式或半雙工模式、持超長(cháng)延遲使能、混雜模式(Promiscuous)、接收廣播幀使能、發(fā)送和接收使能、中斷源和中斷使能、幀間間隙的長(cháng)度、最大幀和最小幀的長(cháng)度、重試限制和沖突時(shí)間窗、MII地址和MII控制命令、接收和發(fā)送隊列的長(cháng)度以及本機MAC地址等。 上層協(xié)議通過(guò)MAC發(fā)送和接收數據的操作主要由主機接口模塊內的兩個(gè)隊列來(lái)進(jìn)行管理,這兩個(gè)隊列用于對等待發(fā)送的多個(gè)幀和接收到的多個(gè)幀進(jìn)行排隊。發(fā)送隊列主要記錄等待發(fā)送的幀的相關(guān)信息、發(fā)送該幀時(shí)對MAC的設置以及該幀發(fā)送完之后產(chǎn)生的狀態(tài)信息。幀的相關(guān)信息包括幀的長(cháng)度、幀在外部存儲器中的地址、該幀是否準備好發(fā)送以及隊列中是否還有其它幀等待發(fā)送;對MAC的設置則包括中斷使能、填充使能、CRC使能;產(chǎn)生的狀態(tài)信息包括成功發(fā)送之前的重試次數、由于達到重試限制而放棄發(fā)送、發(fā)送時(shí)產(chǎn)生的滯后沖突以及成功發(fā)送之前發(fā)生過(guò)的延遲。 接收隊列主要對接收到的數據幀進(jìn)行排隊并記錄每個(gè)接收到的幀信息。這些信息包括幀的長(cháng)度、是控制幀還是普通數據幀、幀中包含無(wú)效符號、接收到的幀太長(cháng)或太短、發(fā)生CRC錯誤、接收的過(guò)程中發(fā)生滯后沖突、幀是否接收完、隊列中是否還有其它已接收到的幀以及幀存儲在外部存儲器中的地址等。同時(shí)隊列中還有針對每個(gè)幀的設置位,用來(lái)設置是否在接收到幀時(shí)產(chǎn)生中斷。發(fā)送隊列和接收隊列的長(cháng)度都可以在控制寄存器中進(jìn)行設置。 10.4.3 Xilinx 千兆以太網(wǎng)MAC IP Core 1.GMAC IP Core的應用場(chǎng)景和架構 Xilinx提供了三態(tài)以太網(wǎng)MAC控制器的IP Core,可實(shí)現單條吉比特以太網(wǎng)鏈路,通過(guò)交換機或路由器可與任意以太網(wǎng)端口相連。由于MAC控制器的速率很高,底層傳輸必須依賴(lài)Rocket I/O,在客戶(hù)端還需要利用FIFO來(lái)交換數據,其完整的設計方案如圖10-35所示。 圖10-35 千兆以太網(wǎng)MACIP Core的應用場(chǎng)合示意圖 2.GMAC IP Core的配置界面和接口信號 千兆以太網(wǎng)MACIP Core的配置界面如圖10-36所示。GEMAC控制器所實(shí)現的主要功能如圖10-37所示,包括發(fā)送引擎、接收引擎、流控制、GMII接口、客戶(hù)發(fā)送接口、客戶(hù)接收接口以及客戶(hù)管理接口。 圖10-36 千兆以太網(wǎng)MACIP Core的配置界面 圖10-37 千兆以太網(wǎng)MACIP Core的主要功能示意圖 下面給出相應模塊的功能和接口信號說(shuō)明。 1)發(fā)送引擎 發(fā)送引擎通過(guò)客戶(hù)發(fā)送端口接收以太網(wǎng)的數據幀,并在幀頭添加幀引導區域,甚至在幀長(cháng)小于最短要求時(shí),添加一定的冗余比特。同時(shí),該模塊還會(huì )在連續的數據幀之間插入以太網(wǎng)協(xié)議所規定的最小延時(shí),將用戶(hù)數據轉化成標準的GMII數據幀,并送至GMII模塊。在應用時(shí),面向用戶(hù)的操作就是將用戶(hù)數據讀入GEMAC核內部 該模塊接口信號的簡(jiǎn)要信息如表10-10所列。 表10-10 發(fā)送引擎接口信號列表 發(fā)送引擎的時(shí)序如圖10-38所示。當客戶(hù)端有數據發(fā)送時(shí),將tx_data_valid拉高,同時(shí)將數據的第一個(gè)字節置于tx_data端口;當GEMAC將第一字節數據讀入后,會(huì )將tx_ack信號拉高,用戶(hù)端邏輯檢測到tx_ack為高時(shí),要在下一個(gè)時(shí)鐘上升沿將其余的數據發(fā)送到數據端口上,當數據發(fā)送完畢后,將x_data_valid拉低。 圖10-38 發(fā)送引擎的時(shí)序圖 2)接收引擎 接收引擎接收來(lái)自GMII模塊的數據,去掉幀頭的引導區域,包括為了增加幀長(cháng)的冗余比特。此外,該模塊還能根據數據幀中的檢驗序列區域、接收到的GMII錯誤碼字以及幀長(cháng)信息完成錯誤檢測,主要接口信號的簡(jiǎn)要說(shuō)明如表10-11所列。 表10-11 接收引擎接口信號列表 接收引擎的時(shí)序如圖10-39所示?蛻(hù)端邏輯必須在任何時(shí)候都準備好接收數據,因為在GEMAC核中沒(méi)有接收緩存,有時(shí)延就會(huì )丟失數據,因此用戶(hù)可自己添加緩沖邏輯。rx_data_valid為高時(shí)立即開(kāi)始接收連續數據,在檢測到rx_data_valid變低后,判斷rx_good_frame信號的電平,如果為高則繼續處理該幀數據,否則直接丟棄。 圖10-39 接收引擎的時(shí)序圖 3)流控制 流控制模塊是根據IEEE 802.3-2002標準的31項條款設計的,在發(fā)送時(shí)附帶暫停幀,接收時(shí)也需要對其處理。在GEMAC核中,它是自動(dòng)配置的,同時(shí),也提供了用戶(hù)自定義的配置端口,如表10-12所列。 表10-12 流控制接口信號 4)可選的管理接口 管理接口是一個(gè)獨立的可選端口,其地址、數據和控制信號相對于其他模塊是獨立的,提供了和CoreConnec總線(xiàn)的交互能力,可掛在MicroBlaze軟核或PowerPC硬核處理器,可用于配置GEMAC核以及通過(guò)MDIO接口直接讀寫(xiě)外部PHY芯片的內部配置寄存器。該模塊包括用戶(hù)管理的接口和MDIO接口兩部分,后者直接與PHY芯片相連,全部接口信號的簡(jiǎn)要說(shuō)明如10-13所列。 表10-13 管理模塊的接口信號 5)復位操作 管理模塊具備自己獨立的軟件復位信號,但當管理接口模塊被旁路掉,其相應的配置信號被作為configuraTIon_vector[64:0]輸入信號使用。此外,GEMAC核提供了硬件復位信號,如表10-14所列。 表10-14 復位信號列表 6)GMII模塊 GMII模塊的接收信號一般都是直接連到PHY芯片上,負責和PHY芯片的數據交互,其信號和PHY芯片的接口是一一對應的,如表10-15所列。 表10-15 GMII模塊接口信號列表 配置完成后,可在工程管理區選中GEMAC核,在過(guò)程管理區,點(diǎn)擊“View HDL Instantiation Template”命令,查看其例化代碼,它在代碼中的例化方法和一般IP Core的方法是一樣的。 10.5 本章小結 高速串行傳輸技術(shù)是FPGA未來(lái)的三大應用領(lǐng)域之一,本章主要介紹了Xilinx公司的Rocket I/O解決方案。首先給出高速傳輸的背景,指出串行方式是吉比特以及更高速率鏈路的必然選擇。其次,給出了吉比特串行傳輸的通用架構,為后文做好鋪墊。接著(zhù)重點(diǎn)介紹了Xilinx公司Rocket I/O的系統組成、相關(guān)協(xié)議、時(shí)鐘設計方案、開(kāi)發(fā)要素以及Rocket I/O的使用方法。最后說(shuō)明了千兆以太網(wǎng)MAC控制器IP Core的使用方法。讀者需要注意的是Rocket I/O是Xilinx高端FPGA中的內嵌組件,和DCM、硬核乘法器、塊RAM等的使用方法是一樣的,可通過(guò)IP Core調用。高速傳輸是一種新技術(shù),開(kāi)發(fā)難度較大,本章只是介紹了其中的主要核心部分和基本原理,還需要讀者閱讀大量的文獻和實(shí)際操作才能熟練開(kāi)發(fā)相關(guān)系統。 |