物聯(lián)傳媒 旗下網(wǎng)站
登錄 注冊(cè)

在嵌入FPGA的IP核8051上實(shí)現(xiàn)TCP/IP的設(shè)計(jì)

作者:羅侄敬
來(lái)源:電子元器件應(yīng)用
日期:2007-08-01 09:34:40
摘要:該便攜式接觸網(wǎng)故障信號(hào)分析儀采用圖形化程序設(shè)計(jì)語(yǔ)言LabVIEW開發(fā)設(shè)計(jì), 可實(shí)現(xiàn)數(shù)據(jù)的高速實(shí)時(shí)采集、在線分析、自動(dòng)存儲(chǔ)、顯示等功能。

引言
隨著芯片規(guī)模的越來(lái)越大、資源的越來(lái)越豐富, 芯片的設(shè)計(jì)復(fù)雜度也大大增加。事實(shí)上, 在芯片設(shè)計(jì)完成后, 有時(shí)還需要根據(jù)情況改變一些控制, 這在使用過(guò)程中會(huì)經(jīng)常遇到。這時(shí)候如果再對(duì)芯片設(shè)計(jì)進(jìn)行改變將是很不可取的, 因?yàn)樾枰O(shè)計(jì)人員參與這種改變, 這無(wú)論是對(duì)設(shè)計(jì)者還是用戶都是不能接受的。于是就有必要讓這種可以改變的簡(jiǎn)單控制在芯片設(shè)計(jì)時(shí)就存在, 而且同時(shí)還應(yīng)該使這種改變相對(duì)容易, 比較通用, 并且與芯片的其它設(shè)計(jì)部分盡量不相關(guān)。為了滿足上述的要求, 在FPGA中嵌入一個(gè)比較理想的選擇, 而這個(gè)即通用又控制簡(jiǎn)單的IP核最好選擇8051微處理器。 

在FPGA中植入8051后, 還可在上面實(shí)現(xiàn)簡(jiǎn)單的TCP/IP協(xié)議, 以支持遠(yuǎn)程訪問或進(jìn)行遠(yuǎn)程調(diào)試, 這只是在嵌入FPGA的8051上的一個(gè)應(yīng)用。為了保證用戶能夠?qū)?051實(shí)現(xiàn)不同的控制操作,設(shè)計(jì)時(shí)也可以采用一個(gè)外部flash對(duì)8051進(jìn)行加載, 這樣, 用戶只需要將編譯好的匯編語(yǔ)言代碼加到flash就可以控制8051的工作, 而此時(shí)用戶完全不需要對(duì)FPGA進(jìn)行操作就能實(shí)現(xiàn)簡(jiǎn)單的控制,而這需要的僅僅只是keil的編譯環(huán)境。 

1 IP核8051的FPGA實(shí)現(xiàn) 

現(xiàn)在有許多免費(fèi)的8051核可以利用, 這些核都可通過(guò)硬件描述語(yǔ)言來(lái)實(shí)現(xiàn), 并且基本上都可綜合, 也就是直接拿來(lái)就能用, 需要的只是根據(jù)自身的具體需求做一些簡(jiǎn)單修改即可??偟恼f(shuō)來(lái), IP核8051的移植是比較簡(jiǎn)單的。 

本系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)可以采用oregano system的mc8051內(nèi)核, 并且加入定時(shí)計(jì)數(shù)的和串口模塊, 8051單片機(jī)的設(shè)計(jì)結(jié)構(gòu)框圖如圖1所示。


在8051核的FPGA設(shè)計(jì)中, 完全可以實(shí)現(xiàn)包括計(jì)時(shí)/計(jì)數(shù)、中斷、串口、數(shù)據(jù)及程序存儲(chǔ)器、特殊寄存器、布爾處理的位處理機(jī)等的所有功能, 而且兼容所有指令, 只是在具體的移植過(guò)程中做一些改變而已。 

這種方法對(duì)程序存儲(chǔ)器不再做內(nèi)外之分, 因?yàn)镕PGA內(nèi)部存儲(chǔ)容量已經(jīng)能夠滿足要求, 同時(shí)將程序存儲(chǔ)器的容量擴(kuò)大了一倍 (變?yōu)?KB), 以滿足大程序的容量需求; 為了讓8051更為強(qiáng)大且更具有通用性, 可將數(shù)據(jù)存儲(chǔ)器RAM的容量擴(kuò)大一倍, 變?yōu)?56字節(jié)??梢钥闯? 在設(shè)計(jì)過(guò)程中將8051的功能也進(jìn)行了加強(qiáng), 但是并不影響對(duì)它的控制, 僅僅是在硬件上對(duì)存儲(chǔ)器的容量進(jìn)行了擴(kuò)大, 而這種擴(kuò)大只是改變了地址線的寬度, 完全不影響111條指令的正確執(zhí)行。對(duì)用戶來(lái)說(shuō)這只是可以使用的內(nèi)部RAM增加了, 控制并沒有任何改變。當(dāng)然, 在資源比較緊張, 而且程序容量比較小時(shí), 也可以將存儲(chǔ)器的容量改小, 這種改變也相當(dāng)方便, 只需要改變地址線的寬度就能達(dá)到目的。由此可見, 設(shè)計(jì)時(shí)完全可以根據(jù)需要改變IP核的設(shè)計(jì), 而不局限于8051。 

雖然整個(gè)8051IP核能正確執(zhí)行所有指令, 并能實(shí)現(xiàn)串口、計(jì)時(shí)器及中斷控制, 且整個(gè)IP的核工作時(shí)鐘也在20 MHz以上, 但是, 由于這時(shí)候的所有指令周期并不與真實(shí)的8051完全一致, IP核中有的指令需要比真正的8051多執(zhí)行幾個(gè)周期才能完成, 這就使得分析IP核的工作時(shí)鐘復(fù)雜起來(lái)了, 因?yàn)橄鄬?duì)于真正的8051不能有一個(gè)精確的工作時(shí)鐘對(duì)比。但是經(jīng)過(guò)分析仍然可以認(rèn)為, IP核應(yīng)該可以工作在15 MHz左右, 也就是比真實(shí)的8051快了15倍左右。這對(duì)于芯片整體來(lái)說(shuō), 其速度可能相對(duì)較低, 但是由于這部分與芯片其它部分的邏輯相關(guān)性極小, 所以并不會(huì)影響芯片的整體性能, 而對(duì)于一些簡(jiǎn)單控制來(lái)說(shuō), 這個(gè)速度還是能夠滿足要求的。 

2 UIP協(xié)議棧 

2.1 UIP簡(jiǎn)介 

在FPGA中實(shí)現(xiàn)TCP/IP協(xié)議的主要目的是為了滿足設(shè)計(jì)人員對(duì)芯片的遠(yuǎn)程調(diào)試。而滿足這種要求實(shí)際上并不需要很強(qiáng)大和快速的傳輸功能。功能過(guò)于強(qiáng)大將會(huì)占用過(guò)多的資源, 而且實(shí)際上, 很多功能并沒有實(shí)際作用; 同時(shí)也不需要很快的傳輸速度。畢竟對(duì)于一個(gè)芯片的設(shè)計(jì)來(lái)說(shuō),無(wú)論是設(shè)計(jì)文檔或是設(shè)計(jì)程序, 容量都是非常有限的。綜合考慮, 則應(yīng)選擇一個(gè)實(shí)現(xiàn)簡(jiǎn)單、占用資源少, 但能夠比較穩(wěn)定地進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議, 為此, 本文選擇了相對(duì)簡(jiǎn)單的UIP協(xié)議棧,而放棄了功能比較強(qiáng)大的LWIP協(xié)議棧。選擇UIP還有一個(gè)好處, 就是這個(gè)協(xié)議棧是專門針對(duì)單片機(jī)等微控制器設(shè)計(jì)的TCP/IP協(xié)議棧, 它能夠利用嵌入的IP核8051來(lái)實(shí)現(xiàn)TCP/IP協(xié)議, 而不再需要額外的邏輯單元。 

UIP的特點(diǎn)是代碼量和數(shù)據(jù)量都比較小, 因而可以為存儲(chǔ)器比較緊張的地方提供合適的實(shí)現(xiàn)方案, 包括TCP/IP所需的最小實(shí)現(xiàn)方案和只包含TCP、IP、ICMP (ping) 以及簡(jiǎn)單的UDP協(xié)議, 其具體的實(shí)現(xiàn)方法如圖2所示, 圖2中, 帶“×”的表示已經(jīng)實(shí)現(xiàn)。 

2.2 UIP協(xié)議棧的實(shí)現(xiàn)方法  

通過(guò)UIP可實(shí)現(xiàn)TCP/IP協(xié)議集的四個(gè)基本協(xié)議, 包括ARP地址解析協(xié)議、IP網(wǎng)際互聯(lián)協(xié)議,ICMP網(wǎng)絡(luò)控制報(bào)文協(xié)議和TCP傳輸控制協(xié)議。為了在8位、16位處理器上應(yīng)用, UIP協(xié)議棧在實(shí)現(xiàn)各層協(xié)議時(shí)采用有針對(duì)性的方法來(lái)保證代碼大小和存儲(chǔ)器使用量最小。 

實(shí)現(xiàn)ARP地址解析協(xié)議時(shí), 為節(jié)省存儲(chǔ)器,ARP應(yīng)答包可直接覆蓋ARP請(qǐng)求包; 而在實(shí)現(xiàn)IP網(wǎng)絡(luò)協(xié)議時(shí), 則對(duì)原協(xié)議進(jìn)行了極大的簡(jiǎn)化, 并沒有實(shí)現(xiàn)分片和重組; 當(dāng)實(shí)現(xiàn)ICMP網(wǎng)絡(luò)控制報(bào)文協(xié)議時(shí), 只需實(shí)現(xiàn)echo (回響) 服務(wù)。UIP在生成回響報(bào)文時(shí), 并不重新分配存儲(chǔ)器空間, 而是直接修改echo請(qǐng)求報(bào)文來(lái)生成回響報(bào)文。設(shè)計(jì)時(shí)可將ICMP類型字段從“echo”改變成 “echo re-ply”類型, 并重新計(jì)算校驗(yàn)和修改校驗(yàn)和字段。UIP里的TCP沒有實(shí)現(xiàn)發(fā)送和接收數(shù)據(jù)的滑動(dòng)窗口。每個(gè)TCP連接的狀態(tài)均由uip_conn結(jié)構(gòu)保存。uip_conn結(jié)構(gòu)包括當(dāng)?shù)睾瓦h(yuǎn)端的TCP端口編號(hào)、遠(yuǎn)程主機(jī)的IP地址、重發(fā)時(shí)間值、上一段重發(fā)的編號(hào)以及連接段的最大尺寸等信息。uip_conn結(jié)構(gòu)數(shù)組可用于保存所有的連接, 數(shù)組的大小等于可支持同時(shí)連接的最大數(shù)量。為了減少儲(chǔ)存器的使用量, 在處理重發(fā)時(shí), UIP并不緩存發(fā)送的數(shù)據(jù)包, 而是由應(yīng)用程序在需要重發(fā)時(shí)重新生成發(fā)送的數(shù)據(jù)。 

2.3 UIP協(xié)議棧的接口 

為了UIP協(xié)議棧能具有最大的通用性, 在實(shí)現(xiàn)時(shí)可將底層硬件驅(qū)動(dòng)和頂層應(yīng)用層之外的所有協(xié)議集“打包”在一個(gè)“庫(kù)”里。協(xié)議棧通過(guò)接口與底層硬件和頂層應(yīng)用進(jìn)行通信。通過(guò)這種方式可使uIP具有極高的通用性和獨(dú)立性, 以便移植到不同的系統(tǒng)和方便地實(shí)現(xiàn)不同的應(yīng)用, 很好的體現(xiàn)TCP/IP協(xié)議平臺(tái)無(wú)關(guān)性的特點(diǎn)。UIP協(xié)議棧與系統(tǒng)底層和應(yīng)用程序之間的接口如圖3所示。圖中, 各接口之間都是由一系列函數(shù)來(lái)實(shí)現(xiàn)的。 

3 UIP協(xié)議棧在IP核8051上的實(shí)現(xiàn) 

3.1 UIP協(xié)議棧在IP核8051上的移植 

由于UIP協(xié)議棧是專門針對(duì)微處理器編寫的,所以移植也是非常的方便, 但需注意以下幾點(diǎn): 

(1) 協(xié)議棧是用C語(yǔ)言編寫的, 故在移植時(shí)需要再加上兩個(gè)頭文件, 一個(gè)是8051的頭文件, 另一個(gè)是8051的硬件初始化頭文件; 

(2) 通過(guò)keil c編譯器編譯時(shí), 在選器件時(shí)需要注意, 只有選取數(shù)據(jù)寄存器為256個(gè)字節(jié)才能順利通過(guò)編譯, 這也是為什么前面8051IP核的數(shù)據(jù)存儲(chǔ)器RAM需要擴(kuò)展至256個(gè)字節(jié)的原因。不對(duì)RAM進(jìn)行擴(kuò)展, 就會(huì)出現(xiàn)“不能寫B(tài)9地址”的錯(cuò)誤, 因?yàn)樵跊]有對(duì)RAM擴(kuò)展前, 根本不存在B9地址; 

(3) 將軟件keil編譯生成的hex文件送入到8051的程序存儲(chǔ)器, 即可在IP核8051上實(shí)現(xiàn)簡(jiǎn)單的TCP/IP協(xié)議。這在軟件測(cè)試時(shí), 與實(shí)際工作將有所不同。軟件測(cè)試時(shí)需要將hex文件作為程序存儲(chǔ)器的初始化輸入, 即在EDA軟件編譯8051時(shí), 將程序存儲(chǔ)器的初始化文件mif的路徑設(shè)置為hex所在的路徑, 在完成綜合布線后, hex文件的內(nèi)容就進(jìn)入了程序存儲(chǔ)器。這樣, 仿真時(shí)就能在8051IP上實(shí)現(xiàn)TCP/IP協(xié)議了。 

3.2 UIP的工作流程 

TCP/IP協(xié)議在嵌入到FPGA的IP核8051上的工作流程, 實(shí)際上也是簡(jiǎn)化后的TCP/IP協(xié)議的工作流程, 這跟正式的TCP/IP協(xié)議有所不同。下面的工作流程以輸入一個(gè)同步幀 (即: 三向握手的第一次握手) 為例。對(duì)于8051實(shí)現(xiàn)的UIP來(lái)說(shuō), 它屬于被動(dòng)建立連接, 其正確的輸出結(jié)果應(yīng)該是三向握手的第二次握手, 送出一個(gè)確認(rèn)同步幀是所期望的結(jié)果。 

下面簡(jiǎn)單介紹UIP的整個(gè)工作流程: 

(1) 在P0端口有數(shù)據(jù)前, 讀取數(shù)據(jù)函數(shù)并反復(fù)執(zhí)行, 以對(duì)P0端口進(jìn)行監(jiān)視 (此種情況只是在測(cè)試時(shí), 實(shí)際工作中物理層通過(guò)控制信號(hào)通知讀數(shù)函數(shù)P0口是否有數(shù)據(jù)); 

(3) 為信號(hào)的第8級(jí)分解小波模極大值圖; (4) 為信號(hào)各級(jí) (共9級(jí)) 的高頻分量即小波系數(shù)。 

由圖4可以看出, 該故障信號(hào)分析儀能有效采集實(shí)時(shí)故障信號(hào), 并可在對(duì)信號(hào)經(jīng)過(guò)小波分析后有效的提取故障特征, 而且故障點(diǎn)定位明顯。  

4 結(jié)束語(yǔ) 

該便攜式接觸網(wǎng)故障信號(hào)分析儀采用圖形化程序設(shè)計(jì)語(yǔ)言LabVIEW開發(fā)設(shè)計(jì), 可實(shí)現(xiàn)數(shù)據(jù)的高速實(shí)時(shí)采集、在線分析、自動(dòng)存儲(chǔ)、顯示等功能。高速數(shù)字化儀NI PXI- 5112卡采樣速度高、性能穩(wěn)定可靠, 適宜對(duì)高速變化信號(hào)的實(shí)時(shí)監(jiān)測(cè)。將軟件安裝在PXI- 1042工控機(jī)上, 具有體積小、抗干擾能力強(qiáng)、攜帶方便等特點(diǎn), 同時(shí)具有故障性質(zhì)判斷、故障定位功能。該系統(tǒng)目前已經(jīng)在石家莊變電所現(xiàn)場(chǎng)運(yùn)行, 效果良好。 

參考文獻(xiàn) 

[1] 劉君華.基于LabVIEW的虛擬儀器設(shè)計(jì)[M].北京: 電子工業(yè)出版社,2003:115- 127. 
[2] Rober H. Bishop.LabVIEW6i 實(shí)用教程[M].北京: 電子工業(yè)出版社,2003:209- 265. 
[3] LabVIEW Data Acqusition Basics Manual on NI- 5112[M].National Instrument Corpration,1998. 
[4] Mok Aloysius K,Srusrt Douglas.RTT seman tics forLabVIEW.IEEE Aerospace Applications ConrerenceProceedings,1998:61- 71. 
[5] 楊樂平, 李海濤,等.LabVIEW高級(jí)程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2003:390- 392.