新聞中心

        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.104case.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)行配置、查詢數(shù)據(jù)包是否到來(lái)、收取/發(fā)送通信數(shù)據(jù)等等。

        二、FPGA與W5300A的硬件連接

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

        FPGA和W5300的連線,我們稱之為外部總線。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)滿足一定的時(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)接口定義

        引腳名稱

        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滿時(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客戶端”。區(qū)別在于誰(shuí)首先發(fā)送連接請(qǐng)求(SYS數(shù)據(jù)包)。“TCP服務(wù)器”等待對(duì)端的連接請(qǐng)求,當(dāng)收到連接請(qǐng)求時(shí)建立SOCKET連接(被動(dòng)打開(kāi))。“TCP客戶端”主動(dòng)發(fā)出連接請(qǐng)求,與對(duì)端建立連接(主動(dòng)打開(kāi))。出于方便考慮,由PC端發(fā)起連接,設(shè)定PC端為TCP客戶端,W5300A為TCP服務(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)收到客戶端發(fā)來(lái)的連接請(qǐng)求(SYS數(shù)據(jù)包),變?yōu)镋STABLISHED狀態(tài),此時(shí)客戶端和服務(wù)器可以進(jìn)行數(shù)據(jù)通信。當(dāng)服務(wù)器斷開(kāi)連接或者收到客戶端發(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ù)程序主要是讀取芯片的中斷寄存器,獲取中斷類型,并復(fù)位中斷寄存器。值得注意的是,上圖所示的流程是查詢方式而不是中斷方式。啟動(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ù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 云南省| 大理市| 普兰店市| 开阳县| 汉寿县| 庆元县| 六枝特区| 崇义县| 工布江达县| 大埔县| 达尔| 南皮县| 凤城市| 京山县| 麻城市| 双柏县| 高雄市| 同德县| 连山| 石家庄市| 吉木萨尔县| 辽宁省| 时尚| 甘肃省| 仁怀市| 遂川县| 准格尔旗| 辽宁省| 云林县| 淮阳县| 化州市| 永修县| 富平县| 卢氏县| 镇原县| 山阴县| 建平县| 尉氏县| 长武县| 察雅县| 神池县|