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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于Xilinx FPGA的千兆以太網(wǎng)控制器的開發(fā)

          基于Xilinx FPGA的千兆以太網(wǎng)控制器的開發(fā)

          作者: 時間:2010-08-27 來源:網(wǎng)絡(luò) 收藏

            1)發(fā)送引擎

            發(fā)送引擎通過客戶發(fā)送端口接收以太網(wǎng)的數(shù)據(jù)幀,并在幀頭添加幀引導(dǎo)區(qū)域,甚至在幀長小于最短要求時,添加一定的冗余比特。同時,該模塊還會在連續(xù)的數(shù)據(jù)幀之間插入以太網(wǎng)協(xié)議所規(guī)定的最小延時,將用戶數(shù)據(jù)轉(zhuǎn)化成標(biāo)準(zhǔn)的GMII數(shù)據(jù)幀,并送至GMII模塊。在應(yīng)用時,面向用戶的操作就是將用戶數(shù)據(jù)讀入GEMAC核內(nèi)部

            該模塊接口信號的簡要信息如表10-10所列。

          表10-10 發(fā)送引擎接口信號列表

          發(fā)送引擎接口信號列表

            發(fā)送引擎的時序如圖10-38所示。當(dāng)客戶端有數(shù)據(jù)發(fā)送時,將tx_data_valid拉高,同時將數(shù)據(jù)的第一個字節(jié)置于tx_data端口;當(dāng)GEMAC將第一字節(jié)數(shù)據(jù)讀入后,會將tx_ack信號拉高,用戶端邏輯檢測到tx_ack為高時,要在下一個時鐘上升沿將其余的數(shù)據(jù)發(fā)送到數(shù)據(jù)端口上,當(dāng)數(shù)據(jù)發(fā)送完畢后,將x_data_valid拉低。

          基于Xilinx FPGA的千兆以太網(wǎng)控制器的開發(fā)

          圖10-38 發(fā)送引擎的時序圖

            2)接收引擎

            接收引擎接收來自GMII模塊的數(shù)據(jù),去掉幀頭的引導(dǎo)區(qū)域,包括為了增加幀長的冗余比特。此外,該模塊還能根據(jù)數(shù)據(jù)幀中的檢驗序列區(qū)域、接收到的GMII錯誤碼字以及幀長信息完成錯誤檢測,主要接口信號的簡要說明如表10-11所列。

          表10-11 接收引擎接口信號列表

          基于Xilinx FPGA的千兆以太網(wǎng)控制器的開發(fā)

            接收引擎的時序如圖10-39所示。客戶端邏輯必須在任何時候都準(zhǔn)備好接收數(shù)據(jù),因為在GEMAC核中沒有接收緩存,有時延就會丟失數(shù)據(jù),因此用戶可自己添加緩沖邏輯。rx_data_valid為高時立即開始接收連續(xù)數(shù)據(jù),在檢測到rx_data_valid變低后,判斷rx_good_frame信號的電平,如果為高則繼續(xù)處理該幀數(shù)據(jù),否則直接丟棄。

          接收引擎的時序圖

          圖10-39 接收引擎的時序圖



          關(guān)鍵詞: FPGA 千兆以太網(wǎng) Virtex

          評論


          相關(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); })();