<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用FPGA實(shí)現(xiàn)MAC核所要完成的功能

          用FPGA實(shí)現(xiàn)MAC核所要完成的功能

          作者: 時(shí)間:2017-10-13 來源:網(wǎng)絡(luò) 收藏

          發(fā)送模塊

            發(fā)送模塊可將上層協(xié)議提供的數(shù)據(jù)封裝之后通過接口發(fā)送給PHY。發(fā)送模塊可接收主機(jī)接口模塊的數(shù)據(jù)幀開始和數(shù)據(jù)幀結(jié)束標(biāo)志,并通過 主機(jī)接口從外部存儲器中讀取要發(fā)送的數(shù)據(jù),然后對數(shù)據(jù)進(jìn)行封裝,然后通過PHY提供的載波偵聽和沖突檢測信號,在信道空閑時(shí)通過接口將數(shù)據(jù)以4位的 寬度發(fā)送給PHY,最后由PHY將數(shù)據(jù)發(fā)送到網(wǎng)絡(luò)上。
            發(fā)送模塊由CRC生成模塊(crc_gen)、隨機(jī)數(shù)生成模塊(random_gen)、發(fā)送計(jì)數(shù)模塊(tx_cnt) 和發(fā)送狀態(tài)機(jī)(tx_statem_模塊等四個(gè)子模塊組成。

          本文引用地址:http://www.ex-cimer.com/article/201710/365687.htm

          CRC生成模塊(crc_gen)

            該模塊用于計(jì)算發(fā)送數(shù)據(jù)的CRC值,并將CRC值添加到數(shù)據(jù)幀的幀校驗(yàn)序列字段(FCS)內(nèi)。為了提高效率,并考慮到與PHY的數(shù)據(jù)通道 為4位,設(shè)計(jì)時(shí)可采用4位并行CRC計(jì)算方法,算法中可使用一個(gè)次態(tài)函數(shù),并通過循環(huán)迭代來模擬移位操作。這樣,發(fā)送模塊就可以在邊發(fā)送數(shù)據(jù)到PHY的同 時(shí),一邊計(jì)算CRC,這樣當(dāng)數(shù)據(jù)發(fā)送完時(shí),CRC值也計(jì)算完成了。

          隨機(jī)數(shù)生成模塊(random_gen)

            如在發(fā)送過程中檢測到?jīng)_突,發(fā)送模塊就先發(fā)送擁塞碼(jam),隨后停止發(fā)送。在下次重新發(fā)送之前,發(fā)送模塊會(huì)先執(zhí)行一個(gè)后退 (backoff)操作,即發(fā)送模塊等待一個(gè)半隨機(jī)(生成的隨機(jī)數(shù)有范圍限制)的時(shí)間之后再開始發(fā)送。該隨機(jī)數(shù)就是由隨機(jī)數(shù)生成模塊產(chǎn)生的,它采用經(jīng)典的 截?cái)喽笖?shù)后退算法,后退的時(shí)間是一個(gè)與發(fā)生沖突次數(shù)有關(guān)的隨機(jī)數(shù),隨著沖突的次數(shù)增多,用于生成該隨機(jī)數(shù)的范同也將逐漸增大,以減少?zèng)_突的概率。

          發(fā)送計(jì)數(shù)模塊(tx_cnt)

            發(fā)送計(jì)數(shù)模塊由半字節(jié)計(jì)數(shù)器(nibcnt)、字節(jié)計(jì)數(shù)器和重試次數(shù)計(jì)數(shù)器(retrycnt)三個(gè)計(jì)數(shù)器組成。其中重試次數(shù)計(jì)數(shù)器 (retrycnt)可對發(fā)送某個(gè)幀時(shí)產(chǎn)生沖突次數(shù)進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)器的值達(dá)到最大重試次數(shù)時(shí),它將放棄重試,并丟棄發(fā)送緩沖器內(nèi)的數(shù)據(jù)。同時(shí),重試計(jì)數(shù) 器的值還被隨機(jī)數(shù)生成模塊用于計(jì)算下次重試之前需要后退(backoff)的時(shí)隙的個(gè)數(shù)。
            半字節(jié)計(jì)數(shù)器和字節(jié)計(jì)數(shù)器分別用于對發(fā)送過程中的半字節(jié)(bibble)和字節(jié)進(jìn)行計(jì)數(shù)。
            信道忙時(shí),發(fā)送模塊會(huì)一直等待,半字節(jié)計(jì)算器一直計(jì)數(shù)。當(dāng)計(jì)數(shù)到額定等待時(shí)間時(shí)(最大幀長度的兩倍,即3036字節(jié)時(shí)間),系統(tǒng)會(huì)根據(jù)設(shè)置放棄 發(fā)送或是一直等待(可選功能)。一旦信道空閑再進(jìn)入幀間間隙周期(≥96個(gè)比特時(shí)間),南半字節(jié)計(jì)數(shù)器從零開始計(jì)數(shù)。幀間間隙分為兩個(gè)部分,在前2/3個(gè) 周期中,如果檢測到信道忙信號,則半字節(jié)計(jì)數(shù)器復(fù)位,發(fā)送模塊重新開始等待;在后l/3周期中,即使檢測到信道忙信號,半字節(jié)計(jì)數(shù)器也不會(huì)復(fù)位,而是繼續(xù) 計(jì)數(shù),以保證每個(gè)站點(diǎn)公平的競爭信道。而當(dāng)半字節(jié)計(jì)數(shù)器的值達(dá)到幀問間隙周期時(shí),此時(shí)如果有數(shù)據(jù)等待發(fā)送,發(fā)送模塊就開始發(fā)送數(shù)據(jù)。此外,半字節(jié)計(jì)算器還 用于前序碼的生成和短幀的判斷,在數(shù)據(jù)幀的長度小于最小幀時(shí),發(fā)送模塊必須根據(jù)系統(tǒng)設(shè)置進(jìn)行填充或不填充。
            字節(jié)計(jì)算器還可用于滯后沖突(late collision)和超長幀的判斷。當(dāng)滯后沖突發(fā)生時(shí),正在發(fā)送的數(shù)據(jù)將被丟棄。超長幀的判斷則是從對幀內(nèi)容(包括FCS)進(jìn)行字節(jié)計(jì)數(shù),如果字節(jié)計(jì)數(shù) 器的值大于最大有效幀的長度(1518個(gè)字節(jié)),發(fā)送模塊就根據(jù)系統(tǒng)設(shè)置(是否支持超長幀)丟棄或發(fā)送。

          發(fā)送狀態(tài)機(jī)模塊(tx_statem)

            發(fā)送狀態(tài)機(jī)模塊是整個(gè)發(fā)送模塊的核心,主要用于控制整個(gè)發(fā)送過程。發(fā)送狀態(tài)機(jī)由I-die_State、Preamble_State、 Data0_State、 Da-tal_State、 PAD_State、 FCS_State、 IPG_State、Jam_State、BackOff_State、Defer_State等十個(gè)狀態(tài)組成。
            系統(tǒng)復(fù)位后,發(fā)送模塊即進(jìn)入Defer_State狀態(tài),并一直檢測載波偵聽(CarrierSense)信號。當(dāng)載波偵聽信號變成無效(表示 信道空閑)時(shí),狀態(tài)機(jī)進(jìn)人IPG_State狀態(tài)。爾后,在等待一個(gè)幀間間隙之后,狀態(tài)機(jī)則進(jìn)入Idle_State狀態(tài)。如果在幀間間隙的前2/3個(gè)周 期檢測到信道忙信號,狀態(tài)機(jī)將重新回到Defer_State狀態(tài)。
            狀態(tài)機(jī)進(jìn)入Idle_State狀態(tài)之后,發(fā)送模塊將檢測載波偵聽信號和主機(jī)接口的發(fā)送請求。若主機(jī)模塊請求發(fā)送,狀態(tài)機(jī)將進(jìn)入 Preamble_State狀態(tài),發(fā)送模塊即通知PHY發(fā)送開始,同時(shí)開始發(fā)送前序碼(7個(gè)0x5),然后發(fā)送幀起始定界符(SFD,0xd)。狀態(tài)機(jī) 進(jìn)入Data0_State后,發(fā)送模塊將發(fā)送一個(gè)數(shù)據(jù)字節(jié)的低4位(LSB nibble),將當(dāng)其進(jìn)入Data1_State狀態(tài)后,發(fā)送模塊則發(fā)送數(shù)據(jù)字節(jié)的高4位(MSB nibble)。隨后,狀態(tài)機(jī)一直在data0和data1之間循環(huán),直到數(shù)據(jù)發(fā)送完畢。當(dāng)還剩一個(gè)字節(jié)時(shí),主機(jī)模塊將通過發(fā)送幀結(jié)束信號來通知發(fā)送模 塊。如果數(shù)據(jù)幀的長度大于最小幀并且小于最大幀,狀態(tài)機(jī)就進(jìn)入FCS_State狀態(tài),此時(shí)發(fā)送模塊則將CRC生成模塊生成的CRC值添加到幀的FCS字 段中并發(fā)送給PHY。幀發(fā)送完之后,狀態(tài)機(jī)進(jìn)入Defer_State狀態(tài),之后是IPG_State和Idle_State狀態(tài)。此后狀態(tài)機(jī)又回到初始 狀態(tài),以重新等待新的發(fā)送請求。
            如果數(shù)據(jù)幀的長度小于最短幀,狀態(tài)機(jī)就進(jìn)入PAD_State狀態(tài),發(fā)送模塊根據(jù)系統(tǒng)設(shè)置是否在數(shù)據(jù)之后來添加填充碼。然后,狀態(tài)機(jī)進(jìn)入 FCS_State狀態(tài)。如果數(shù)據(jù)幀的長度大于最大幀,而系統(tǒng)設(shè)置又支持發(fā)送超長幀,那么,狀態(tài)機(jī)就進(jìn)入FCS_State狀態(tài);如果不支持發(fā)送超長幀, 發(fā)送模塊將放棄發(fā)送,狀態(tài)機(jī)直接進(jìn)入Defer狀態(tài),然后是IPG狀態(tài),最后回到Idle狀態(tài)。
            在發(fā)送數(shù)據(jù)的過程中,發(fā)送模塊會(huì)一直檢查沖突檢測信號(collision detected)。如果發(fā)現(xiàn)沖突且狀態(tài)機(jī)正處于Preamble_State,狀態(tài)機(jī)將在發(fā)送完前序碼和SFD之后進(jìn)入Jam_State,并發(fā)送擁塞 碼,然后進(jìn)入BackOff狀態(tài),以等待重試。之后,狀態(tài)機(jī)經(jīng)過Defer和IPG回到Idle狀態(tài)。如果此時(shí)重試次數(shù)計(jì)數(shù)器的值沒有達(dá)到額定值,發(fā)送模 塊將重新開始發(fā)送剛才的幀,并將重試次數(shù)計(jì)數(shù)器的值加1;如果發(fā)現(xiàn)沖突且狀態(tài)機(jī)處于data0、da-tal或FCS狀態(tài),而且沒有超過沖突時(shí)間窗,那么 狀態(tài)機(jī)將馬上進(jìn)入Jam狀態(tài)發(fā)送擁塞碼,之后經(jīng)過BackOff、Defer、IPG、回到Idle,并根據(jù)重試計(jì)數(shù)器的值決定是否重新發(fā)送剛才的數(shù)據(jù) 幀;如果檢測到發(fā)生沖突的時(shí)間超過了沖突時(shí)間窗,狀態(tài)機(jī)將進(jìn)入Defer狀態(tài),然后經(jīng)過IPG到IDLE狀態(tài),并放棄重試。
            在全雙工模式中發(fā)送幀時(shí),不會(huì)進(jìn)行延遲(defer),發(fā)送的過程中也不會(huì)產(chǎn)生沖突。此時(shí),發(fā)送模塊將忽略PHY的載波偵聽和沖突檢測信號。當(dāng) 然,幀與幀之間仍然需遵守幀間間隙的規(guī)則。因此,全雙工模式下的發(fā)送狀態(tài)機(jī)沒有Jam_State、。BackOff_State、 Defer_State三個(gè)狀態(tài)。

          MAC接收模塊

            MAC接收模塊負(fù)責(zé)數(shù)據(jù)幀的接收。當(dāng)外部PHY將通信信道的串行數(shù)據(jù)轉(zhuǎn)換為半字節(jié)長的并行數(shù)據(jù)并發(fā)送給接收模塊后,接收模塊會(huì)將這些半字節(jié)數(shù)據(jù) 轉(zhuǎn)換為字節(jié)數(shù)據(jù),然后經(jīng)過地址識別、CRC校驗(yàn)、長度判斷等操作后,再通過主機(jī)接口寫入外部存儲器,并在主機(jī)接口模塊的接收隊(duì)列中記錄幀的相關(guān)信息。此 外,接收模塊還負(fù)責(zé)前序碼和CRC的移除。
            接收模塊由CRC校驗(yàn)?zāi)K、地址識別模塊、接收計(jì)數(shù)器模塊和接收狀態(tài)機(jī)模塊等四部分組成。
            接收模塊中的CRC校驗(yàn)?zāi)K可通過檢查輸入幀的CRC值來驗(yàn)證幀的正確性。其算法與CRC生成模塊相同。
            地址識別模塊用于決定是否接收收到的幀,接收模塊首先接收輸入幀而不管目的地址,隨后由地址識別模塊檢查幀中的目的地址。若MAC被設(shè)置為混雜模式(Promiscuous mode)且目的地址為廣播地址,同時(shí)允許接收廣播幀,幀則被接收。否則,幀被丟棄。
            接收計(jì)數(shù)器模塊由字節(jié)計(jì)數(shù)器(Bytecnt)和幀間間隙計(jì)數(shù)器(IFGcnt)組成。字節(jié)計(jì)數(shù)器在接收幀過程中將對字節(jié)進(jìn)行計(jì)數(shù),以用于識別 幀中的各個(gè)字段(前序碼、目的地址字段、數(shù)據(jù)、FCS等)以及判斷超長幀。幀間間隙計(jì)數(shù)器則對兩幀之間的間隔時(shí)間進(jìn)行計(jì)數(shù),以用于判斷下一幀數(shù)據(jù)的開始。 IEEE 802.3規(guī)定,兩幀之間的間隔至少必須為96個(gè)比特時(shí)間(10 Mbps中為9 600ns,100 Mbps中為960 ns)。如果兩幀之間的間隔小于要求,幀將被丟棄。
            接收狀態(tài)機(jī)為接收模塊的核心,用于控制整個(gè)接收過程。接收狀態(tài)機(jī)由Idle_State、Drop_State、Preamble_State、 SFD_State、 Da-ta0_State、Data1_State等六個(gè)狀態(tài)組成。
            系統(tǒng)復(fù)位后,狀態(tài)機(jī)處于Drop_State。如果此時(shí)的數(shù)據(jù)有效信號(MRxDV)無效,狀態(tài)機(jī)馬上進(jìn)入Idle_State狀態(tài),并一直處于Idle等待接收輸入幀。
            當(dāng)接收模塊檢測到數(shù)據(jù)有效信號之后,狀態(tài)機(jī)將進(jìn)入Preamble_State,并開始接收前序碼。此后再狀態(tài)機(jī)進(jìn)入SFD_State,接收 一個(gè)字節(jié)的幀起始定界符,之后,根據(jù)IFGcnt計(jì)數(shù)器的值進(jìn)入不同的狀態(tài)。如果,IFGcnt所確定的時(shí)間大于96個(gè)比特時(shí)間,狀態(tài)機(jī)將進(jìn)入Data0 狀態(tài)以接收字節(jié)的低4位,然后是Data1狀態(tài),并接收字節(jié)的高4位,之后又回到Data0狀態(tài)。狀態(tài)機(jī)就一直在這兩個(gè)狀態(tài)之間循環(huán),直到數(shù)據(jù)接收完畢 (PHY清除MRxDV信號)后進(jìn)入Idle,以重新等待接收新的數(shù)據(jù);如果接收到幀起始定界符時(shí),IFGcnt計(jì)數(shù)器所確定的時(shí)間小于96個(gè)比特時(shí)間, 那么狀態(tài)機(jī)將進(jìn)入Drop_State狀態(tài),并一直維持該狀態(tài)直到數(shù)據(jù)有效信號結(jié)束(PHY清除MRxDV信號)。之后,狀態(tài)機(jī)再同到Idle等待接收新 的數(shù)據(jù)。
            如果在接收前序碼、幀起始定界符和數(shù)據(jù)期間,數(shù)據(jù)有效信號被清除,那么,狀態(tài)機(jī)將回到Idle。

          MAC的其它模塊

          MAC狀態(tài)模塊

            在接收過程的狀態(tài)信息中,接收錯(cuò)誤表明PHY在接收過程中檢測到了錯(cuò)誤;接收到無效符號則表明接收到的幀中包括無效(PHY無法識別)的符號; 滯后沖突表明接收幀時(shí)檢測到滯后沖突信號;超短幀表明接收到的幀小于最短有效的長度;超長幀表明接收到的幀大于最大有效幀的長度;半字節(jié)對齊錯(cuò)誤表明接收 到的半字節(jié)不是偶數(shù)(即幀的長度不是字節(jié)的整數(shù)倍);接收溢出則表明接收模塊來不及處理接收到的數(shù)據(jù)而導(dǎo)致接收FIFO溢出。
            在發(fā)送過程的狀態(tài)信息中,超過重試限制表示由于沖突導(dǎo)致的重試次數(shù)超過了額定值;滯后沖突表示發(fā)送幀的過程中檢測到的沖突信號超過了規(guī)定的沖突時(shí)間窗;延遲,表明在發(fā)送幀之前檢測到信道忙。

          MAC控制模塊

            MAC控制模塊提供有全雙工操作中的流量控制功能,流量控制可通過發(fā)送和接收PAUSE的MAC控制幀來實(shí)現(xiàn)。當(dāng)接收站點(diǎn)的接收緩沖區(qū)(Rx FIFO)快溢出而主機(jī)接口義來不及取走數(shù)據(jù)時(shí),系統(tǒng)就會(huì)發(fā)出流量控制請求。MAC在接收到流量控制請求之后,即發(fā)送PAUSE控制幀,以使數(shù)據(jù)發(fā)送站點(diǎn) 在指定的時(shí)間內(nèi)暫停發(fā)送數(shù)據(jù)。
            數(shù)據(jù)發(fā)送站點(diǎn)接收到PAUSE控制幀后,便可根據(jù)幀中的參數(shù)設(shè)置PAUSE定時(shí)器。PAUSE定時(shí)器在減到0之前,發(fā)送模塊將暫停發(fā)送數(shù)據(jù)(PAUSE控制幀除外)。PAUSE定時(shí)器減到0之后,發(fā)送模塊將恢復(fù)發(fā)送數(shù)據(jù)。

          MII管理模塊

            MII管理模塊用于控制MAC與外部PHY之間的接口,以用于對PHY進(jìn)行配置并讀取其狀態(tài)信息。該接口由時(shí)鐘信號MDC和雙向數(shù)據(jù)信號MDIO組成。MII管理模塊則由時(shí)鐘生成模塊、移位寄存器模塊和輸出控制模塊三部分組成。
            時(shí)鐘生成模塊可以根據(jù)系統(tǒng)時(shí)鐘和系統(tǒng)設(shè)置中的分頻系數(shù)來產(chǎn)生MII管理模塊的時(shí)鐘信號MDC(10 Mbps速率時(shí)為2.5 MHz,100 Mbps速率時(shí)為25 MHz)。
            移位寄存器模塊既可用于對PHY的控制數(shù)據(jù)進(jìn)行寫入操作,也可用于對PHY的狀態(tài)信息進(jìn)行讀出操作。寫控制數(shù)據(jù)時(shí),移位寄存器根據(jù)其他模塊的控 制信號將并行控制數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù);而在讀狀態(tài)信息時(shí),移位寄存器則將PHY的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù),MAC中的其他模塊可將該并行數(shù)據(jù)寫入適當(dāng)?shù)募?存器。
            由于MDIO是雙向信號,因此,輸出控制模塊就用來決定MDIO是處于輸入狀態(tài)還是輸出狀態(tài)。當(dāng)MDIO處于輸出狀態(tài)時(shí),移位寄存器輸出的串行控制數(shù)據(jù)在經(jīng)過時(shí)鐘同步后發(fā)送到PHY;當(dāng)MDIO處于輸入狀態(tài)時(shí),移位寄存器將數(shù)據(jù)線上的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)。

          主機(jī)接口模塊

            主機(jī)接口是運(yùn)行以太網(wǎng)的上層協(xié)議(如TCP/IP協(xié)議)與MAC控制器的接口。通過該接口,上層協(xié)議可以設(shè)置MAC的工作模式并讀取MAC的狀態(tài)信息。該接口還可用于上層協(xié)議與MAC之間的數(shù)據(jù)交換。
            主機(jī)接口模塊內(nèi)有一組寄存器,可用于存儲上層協(xié)議對MAC設(shè)置的參數(shù)以及MAC的狀態(tài)信息。上層協(xié)議對MAC設(shè)置的參數(shù)包括接收超短幀的使能、 添加填充碼使能、持發(fā)送超長幀的使能、添加CRC校驗(yàn)值使能、全雙工模式或半雙工模式、持超長延遲(Defer)使能、混雜模式 (Promiscuous)、接收廣播幀使能、發(fā)送和接收使能、中斷源和中斷使能、幀間間隙的長度、最大幀和最小幀的長度、重試限制和沖突時(shí)間窗、MII 地址和MII控制命令、接收和發(fā)送隊(duì)列的長度以及本機(jī)MAC地址等。
            上層協(xié)議通過MAC發(fā)送和接收數(shù)據(jù)的操作主要由主機(jī)接口模塊內(nèi)的兩個(gè)隊(duì)列來進(jìn)行管理,這兩個(gè)隊(duì)列用于對等待發(fā)送的多個(gè)幀和接收到的多個(gè)幀進(jìn)行排隊(duì)。
            發(fā)送隊(duì)列主要記錄等待發(fā)送的幀的相關(guān)信息、發(fā)送該幀時(shí)對MAC的設(shè)置以及該幀發(fā)送完之后產(chǎn)生的狀態(tài)信息。幀的相關(guān)信息包括幀的長度、幀在外部存 儲器中的地址、該幀是否準(zhǔn)備好發(fā)送以及隊(duì)列中是否還有其它幀等待發(fā)送;對MAC的設(shè)置則包括中斷使能、填充使能、CRC使能;產(chǎn)生的狀態(tài)信息包括成功發(fā)送 之前的重試次數(shù)、由于達(dá)到重試限制而放棄發(fā)送、發(fā)送時(shí)產(chǎn)生的滯后沖突以及成功發(fā)送之前發(fā)生過的延遲。
            接收隊(duì)列主要對接收到的數(shù)據(jù)幀進(jìn)行排隊(duì)并記錄每個(gè)接收到的幀信息。這些信息包括幀的長度、是控制幀還是普通數(shù)據(jù)幀、幀中包含無效符號、接收到的 幀太長或太短、發(fā)生CRC錯(cuò)誤、接收的過程中發(fā)生滯后沖突、幀是否接收完、隊(duì)列中是否還有其它已接收到的幀以及幀存儲在外部存儲器中的地址等。該位同時(shí)隊(duì) 列中還有針對每個(gè)幀的設(shè)置位,用來設(shè)置是否在接收到幀時(shí)產(chǎn)生中斷。
            發(fā)送隊(duì)列和接收隊(duì)列的長度都可以在控制寄存器中進(jìn)行設(shè)置。



          關(guān)鍵詞: FPGA MAC MII

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();