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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > FPGA通過(guò)以太網(wǎng)與PC機(jī)通信完整方案

          FPGA通過(guò)以太網(wǎng)與PC機(jī)通信完整方案

          作者: 時(shí)間:2017-06-04 來(lái)源:網(wǎng)絡(luò) 收藏

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

          一、簡(jiǎn)介

          使用以太網(wǎng)接口實(shí)現(xiàn),相對(duì)于串口而言,具有更高的傳輸速度。采用以太網(wǎng)接口的目的在于,在一定技術(shù)要求下,實(shí)現(xiàn)機(jī)和的實(shí)時(shí)數(shù)據(jù)傳輸。從而可以借助機(jī)強(qiáng)大的計(jì)算能力,降低的運(yùn)算負(fù)擔(dān)。

          成都浩然電子有限公司開(kāi)發(fā)的網(wǎng)絡(luò)模塊HS-NM5300A,作為實(shí)現(xiàn)以太網(wǎng)的主要元件。模塊以韓國(guó)Wiznet公司開(kāi)發(fā)為關(guān)鍵芯片。模塊一端為RJ45,通過(guò)網(wǎng)絡(luò)交叉線與PC機(jī)相連;另一端為外部總線,與FPGA的IO相連。模塊內(nèi)嵌10BaseT/100BaseTX的以太網(wǎng)物理層,支持自動(dòng)握手功能,支持固件TCP/IP協(xié)議,理想速率可達(dá)到50Mbps。

          接收PC機(jī)發(fā)來(lái)的數(shù)據(jù)包,進(jìn)行協(xié)議解析,并將傳輸?shù)臄?shù)據(jù)保存在其內(nèi)部寄存器中,或者將寄存器內(nèi)的數(shù)據(jù)打包封裝發(fā)送到以太網(wǎng)上。FPGA通過(guò)外部總線,訪問(wèn)的寄存器,從而對(duì)W5300A進(jìn)行配置、查詢(xún)數(shù)據(jù)包是否到來(lái)、收取/發(fā)送通信數(shù)據(jù)等等。

          二、FPGA與W5300A的硬件連接

          FPGA與W5300A的外部總線連接如下圖所示(ref:W5300_v1.2.2_english,115-115)。

          FPGA和W5300的連線,我們稱(chēng)之為外部總線。FPGA為外部總線的主機(jī),W5300為從機(jī)。通過(guò)外部總線,可以實(shí)現(xiàn)FPGA對(duì)W5300的讀/寫(xiě)。圖中DATA為十六位數(shù)據(jù)線,ADDR為10位地址線,WR為寫(xiě)使能,RD為讀使能,CS為片選使能,INT為中斷請(qǐng)求。

          三、外部總線的工作時(shí)序

          要使W5300正確讀入/輸出數(shù)據(jù),外部總線上各信號(hào)電平應(yīng)滿(mǎn)足一定的時(shí)序要求。讀時(shí)序如下圖所示(ref:P120-122):

          圖中PLL_CLK為W5300A的內(nèi)部時(shí)鐘,頻率為15OMHz。

          四、FPGA程序?qū)崿F(xiàn)

          (1)FPGA網(wǎng)口通信模塊的頂層結(jié)構(gòu)如下圖所示:

          BusDriver是核心模塊,驅(qū)動(dòng)外部總線和RX_FIFO的寫(xiě)使能以及TX_FIFO的讀使能。RX_FIFO和TX_FIFO是兩個(gè)16位的先進(jìn)先出存儲(chǔ)器。在FPGA內(nèi)部,可以通過(guò)讀取RX_FIFO的數(shù)據(jù),寫(xiě)TX_FIFO實(shí)現(xiàn)與以太網(wǎng)的數(shù)據(jù)交換。

          (2)接口定義

          引腳名稱(chēng)

          IN/

          OUT

          說(shuō)明

          有效狀態(tài)

          位置

          Enet_ADDR

          OUT

          網(wǎng)絡(luò)芯片總線的地址位

          Enet_BRDY

          IN

          Enet_CSn

          OUT

          網(wǎng)絡(luò)芯片總線的片選

          Enet_DATA

          INOUT

          網(wǎng)絡(luò)芯片總線的數(shù)據(jù)位,16位

          Enet_INTn

          IN

          網(wǎng)絡(luò)芯片總線的中斷位

          Enet_L_LINK

          IN

          網(wǎng)絡(luò)電氣連接位

          Enet_RDn

          OUT

          網(wǎng)絡(luò)芯片總線的讀使能

          Enet_RST

          OUT

          網(wǎng)絡(luò)芯片硬件復(fù)位

          Enet_WRn

          OUT

          網(wǎng)絡(luò)芯片總線的寫(xiě)使能

          RESET

          IN

          Bus_fifo模塊的初始化,包括總線模塊和FIFO

          內(nèi)

          rxfifo_dout

          OUT

          RX_FIFO的數(shù)據(jù)輸出,16位

          內(nèi)

          rxfifo_rd_en

          IN

          RX_FIFO的讀使能,如果在rxfifo_empty_p為1,有可能出現(xiàn)錯(cuò)誤。

          內(nèi)

          rxfifo_empty_p

          OUT

          當(dāng)RX_FIFO為空時(shí),輸出高電位

          內(nèi)

          rxfifo_valid

          OUT

          在rxfifo_rd_en置1后一個(gè)fifo_clk置1,標(biāo)示RX_FIFO輸出數(shù)據(jù)有效。

          內(nèi)

          txfifo_din

          IN

          TX_FIFO的數(shù)據(jù)輸入,16位

          內(nèi)

          txfifo_wr_en

          IN

          TX_FIFO的數(shù)據(jù)寫(xiě)使能

          內(nèi)

          txfifo_full

          OUT

          當(dāng)TX_FIFO滿(mǎn)時(shí),輸出高電位

          內(nèi)

          txfifo_valid

          OUT

          TX_FIFO數(shù)據(jù)輸出有效位

          內(nèi)

          fifo_clk

          IN

          RX_FIFO的讀時(shí)鐘和TX_FIFO的寫(xiě)時(shí)鐘,上升沿從FIFO中讀取或?qū)懭霐?shù)據(jù)。10M

          內(nèi)

          CLK

          IN

          bus_driver的時(shí)鐘,RX_FIFO的寫(xiě)時(shí)鐘和TX_FIFO的讀時(shí)鐘。100M

          內(nèi)

          注:表中第五列“位置”,標(biāo)示該信號(hào)線應(yīng)連接至FPGA內(nèi)部信號(hào)或者FPGA外部信號(hào)。

          (3)TCP工作模式

          PC機(jī)與W5300A通信采用TCP協(xié)議。對(duì)于TCP模式,通信的一方根據(jù)IP地址和端口號(hào)與對(duì)端建立SOCKET連接。再通過(guò)指定的SOCKET發(fā)送和接收數(shù)據(jù)。建立SOCKET的連接有兩種方式:“TCP服務(wù)器”和“TCP客戶(hù)端”。區(qū)別在于誰(shuí)首先發(fā)送連接請(qǐng)求(SYS數(shù)據(jù)包)。“TCP服務(wù)器”等待對(duì)端的連接請(qǐng)求,當(dāng)收到連接請(qǐng)求時(shí)建立SOCKET連接(被動(dòng)打開(kāi))。“TCP客戶(hù)端”主動(dòng)發(fā)出連接請(qǐng)求,與對(duì)端建立連接(主動(dòng)打開(kāi))。出于方便考慮,由PC端發(fā)起連接,設(shè)定PC端為T(mén)CP客戶(hù)端,W5300A為T(mén)CP服務(wù)端。通信流程如下圖所示(ref:90)。

          圖中的LISTEN、ESTALISHED、CLOSED為對(duì)應(yīng)SOCKET的狀態(tài)。對(duì)W5300A的SOCKET正確地初始化(OPEN)后,SOCKET處于LISTEN狀態(tài),對(duì)網(wǎng)絡(luò)進(jìn)行偵聽(tīng)。當(dāng)收到客戶(hù)端發(fā)來(lái)的連接請(qǐng)求(SYS數(shù)據(jù)包),變?yōu)镋STABLISHED狀態(tài),此時(shí)客戶(hù)端和服務(wù)器可以進(jìn)行數(shù)據(jù)通信。當(dāng)服務(wù)器斷開(kāi)連接或者收到客戶(hù)端發(fā)來(lái)的斷開(kāi)請(qǐng)求(FIN數(shù)據(jù)包),W5300A相應(yīng)的SOCKET狀態(tài)變?yōu)镃LOSED。服務(wù)器SOCKET更為詳細(xì)的狀態(tài)轉(zhuǎn)換過(guò)程可以參考W5300A手冊(cè)77頁(yè)。

          (4)busdriver模塊的工作流程

          busdriver通過(guò)外部總線對(duì)網(wǎng)絡(luò)芯片進(jìn)行復(fù)位和數(shù)據(jù)交換。通過(guò)訪問(wèn)W5300A的寄存器,實(shí)現(xiàn)網(wǎng)絡(luò)芯片的配置、監(jiān)控、數(shù)據(jù)收/發(fā)。同時(shí),busdriver監(jiān)視FIFO,如果RX_FIFO則暫緩收數(shù);如果TX_FIFO不空則發(fā)送數(shù)據(jù)。Busdriver的工作流程如下圖所示。

          圖中,重置芯片是指:對(duì)芯片硬件復(fù)位、軟件復(fù)位;基本配置包括:配置 W5300A的MAC地址、IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址,分配W5300A的存儲(chǔ)空間,中斷設(shè)置等等。中斷服務(wù)程序主要是讀取芯片的中斷寄存器,獲取中斷類(lèi)型,并復(fù)位中斷寄存器。值得注意的是,上圖所示的流程是查詢(xún)方式而不是中斷方式。啟動(dòng)SOCKET的程序主要是:設(shè)置SOCKET端口號(hào),工作模式(TCP服務(wù)器端),打開(kāi)SOCKET、開(kāi)始偵聽(tīng)等等。

          (5)以太網(wǎng)通信的程序?qū)崿F(xiàn)

          考慮到處理器是FPGA,采用VHDL語(yǔ)言描述圖中所示流程。與C語(yǔ)言順序?yàn)閳?zhí)行不同,VHDL基于硬件結(jié)構(gòu)、并發(fā)執(zhí)行。圖中用C語(yǔ)言可以很方便地描述出來(lái),但是要在FPGA里面實(shí)現(xiàn),則需要靈活運(yùn)用狀態(tài)機(jī)以控制其流程,且要盡力避免競(jìng)爭(zhēng)和險(xiǎn)象。限于正文篇幅,源程序在附錄中給出。



          關(guān)鍵詞: W5300A 通信 FPGA PC

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();