新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Xilinx FPGA的千兆以太網控制器的開發

        基于Xilinx FPGA的千兆以太網控制器的開發

        作者: 時間:2010-08-27 來源:網絡 收藏

          2.MAC控制器結構和工作流程

          1)MAC發送模塊

          MAC發送模塊可將上層協議提供的數據封裝之后通過MII接口發送給PHY。發送模塊可接收主機接口模塊的數據幀開始和數據幀結束標志,并通過主機接口從外部存儲器中讀取要發送的數據,然后對數據進行封裝,再通過PHY提供的載波偵聽和沖突檢測信號,在信道空閑時由MII接口將數據以4位的寬度發送給PHY芯片,最后由PHY將數據發送到網絡上。

          發送模塊由CRC生成模塊(crc_gen)、隨機數生成模塊(random_gen)、發送計數模塊(tx_cnt)和發送狀態機(tx_statem_machine)模塊等四個主要子模塊組成,其內部結構如圖10-31所示。

        基于Xilinx FPGA的千兆以太網控制器的開發

        圖10-31 以太網MAC發送模塊的結構示意圖

          發送狀態機由Idle_State、Preamble_State、Data0_State、Data1_State、PAD_State、FCS_State、IPG_State、Jam_State、BackOff_State、Defer_State 等十個狀態組成。其狀態轉移圖如圖10-32所示。

        發送狀態機的狀態轉移圖

        圖10-32 發送狀態機的狀態轉移圖

          系統復位后,發送模塊即進入Defer_State狀態,并一直檢測載波偵聽(CarrierSense)信號。當載波偵聽信號變成無效(表示信道空閑)時,狀態機進入IPG_State狀態。此后,在等待一個幀間間隙之后,狀態機進入Idle_State狀態。如果在幀間間隙的前2/3個周期檢測到信道忙信號,狀態機將重新回到Defer_State狀態。

          狀態機進入Idle_State狀態之后,發送模塊將檢測載波偵聽信號和主機接口的發送請求。若主機模塊請求發送,狀態機將進入Preamble_State狀態,發送模塊即通知PHY發送開始,同時開始發送前序碼(7個0x5), 然后發送幀起始定界符(SFD, 0xd)。狀態機進入Data0_State后,發送模塊將發送一個數據字節的低4位(LSB nibble),當其進入Data1_State狀態后,發送模塊則發送數據字節的高4位(MSB nibble)。隨后,狀態機一直在data0和data1之間循環,直到數據發送完畢。當還剩一個字節時,主機模塊將通過發送幀結束信號來通知發送模塊。如果數據幀的長度大于最小幀并且小于最大幀,狀態機就進入FCS_State狀態,此時發送模塊則將CRC生成模塊生成的CRC值添加到幀的FCS字段中并發送給PHY。

          幀發送完之后,狀態機進入Defer_State 狀態,之后是IPG_State和Idle_State狀態。此后狀態機又回到初始狀態,以重新等待新的發送請求。如果數據幀的長度小于最短幀,狀態機就進入PAD_State狀態,發送模塊根據系統設置確定是否在數據之后添加填充碼。然后,狀態機進入FCS_State狀態。如果數據幀的長度大于最大幀,而系統設置又支持發送超長幀,那么,狀態機就進入FCS_State狀態;如果不支持發送超長幀,發送模塊將放棄發送,狀態機直接進入Defer狀態,然后是IPG狀態,最后回到Idle狀態。

          在發送數據的過程中,發送模塊會一直檢查沖突檢測信號(collision detected)。如果發現沖突且狀態機正處于Preamble_State,狀態機將在發送完前序碼和SFD之后進入Jam_State,并發送擁塞碼,然后進入BackOff狀態,以等待重試。之后,狀態機經過Defer和IPG回到Idle狀態。如果此時重試次數計數器的值沒有達到額定值,發送模塊將重新開始發送剛才的幀,并將重試次數計數器的值加1;如果發現沖突且狀態機處于data0、data1或FCS狀態,而且沒有超過沖突時間窗,那么狀態機將馬上進入Jam狀態發送擁塞碼,之后經過BackOff、Defer、IPG、回到Idle,并根據重試計數器的值決定是否重新發送剛才的數據幀;如果檢測到發生沖突的時間超過了沖突時間窗,狀態機將進入Defer狀態,然后經過IPG到IDLE狀態,并放棄重試。

          在全雙工模式中發送幀時,不會進行延遲(defer), 發送的過程中也不會產生沖突。此時,發送模塊將忽略PHY的載波偵聽和沖突檢測信號。當然,幀與幀之間仍然需遵守幀間間隙的規則。因此,全雙工模式下的發送狀態機沒有Jam_State、BackOff_State、Defer_State三個狀態。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 文化| 云梦县| 普安县| 德江县| 永兴县| 五寨县| 江安县| 厦门市| 新乡县| 湾仔区| 房山区| 介休市| 永丰县| 荔浦县| 漯河市| 沂水县| 长岛县| 黄山市| 大方县| 南汇区| 滦南县| 张北县| 微博| 苍溪县| 淮滨县| 尚志市| 巴中市| 德化县| 阿拉尔市| 新泰市| 临城县| 东安县| 双流县| 长春市| 全州县| 华蓥市| 嵩明县| 泾阳县| 太保市| 小金县| 咸丰县|