• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    NIOS在網(wǎng)絡(luò)通信系統(tǒng)中的應(yīng)用

    2013-01-14 06:12:12田青峰盧泳兵劉志鵬
    無線電工程 2013年5期
    關(guān)鍵詞:三態(tài)雙口IP地址

    田青峰,盧泳兵,劉志鵬

    (中國電子科技集團公司第五十四研究所,河北石家莊050081)

    0 引言

    基于IP的數(shù)據(jù)業(yè)務(wù)已經(jīng)成為很多系統(tǒng)的標準接口,IP數(shù)據(jù)業(yè)務(wù)接口具有接口豐富、簡單和容易二次開發(fā)等優(yōu)點,因此得到了廣泛的應(yīng)用。隨著設(shè)備小型化需求的增強,嵌入式的IP處理平臺研究和應(yīng)用越來越廣。NIOS軟核和μC/OS-II以低功耗、低成本、高實時性成為應(yīng)用廣泛的一個開發(fā)平臺,該平臺軟、硬件均可按照用戶要求進行配置,最大程度地提高了系統(tǒng)的設(shè)計靈活性。

    NIOS是ALTERA推出的一種軟核處理器,是一種完全面向用戶、高度可定制的通用精簡指令架構(gòu)(RISC)的32位嵌入式CPU。用戶使用SOPC工具對所使用的軟核進行包括CPU內(nèi)部結(jié)構(gòu)、指令集補充等的高級設(shè)計,并由QUARTUS工具綜合生成可以運行在FPGA內(nèi)部的邏輯結(jié)構(gòu)。NIOS的優(yōu)勢在于其靈活性,其可以根據(jù)用戶需要進行靈活的配置和裁剪。并且,NIOS內(nèi)部所有外設(shè)通過統(tǒng)一的Avalon總線與CPU相連,提高了CPU對外設(shè)控制的效率。

    1 平臺組成

    開發(fā)平臺主要由FPGA與片外SRAM存儲器IDT71V416、片外 FLASH 存儲器 AM29LV065D、網(wǎng)絡(luò)接口芯片LXT971A以及其他部分組成,如圖1所示。

    圖1 系統(tǒng)組成

    2 NIOS與SRAM及FLASH接口的實現(xiàn)

    FPGA支持2種啟動模式:從外部EPCS串行存貯器中啟動和從外部并行FLASH中啟動。本例中由于EPCS串行存貯器片內(nèi)資源有限,所以選擇使用片外FLASH作為程序存貯器,并從其中啟動。NIOS的程序可以存儲在片內(nèi)RAM中。本文使用ALTERA的EP2C35F484芯片作為載體,而該片內(nèi)RAM容量為483 840 bits,這對于移植一個標準版的μC/OS-II是遠遠不夠的,所以使用片外SRAM作為數(shù)據(jù)存儲器,用作數(shù)據(jù)存儲器及堆棧,F(xiàn)LASH用作程序存儲器,用來保存用戶程序。

    2.1 user_defined_interface的端口定義

    SRAM與FLASH(CFI接口)是NIOS認可的標準外設(shè),具有訪問的標準讀寫時序。SOPC也提供了相應(yīng)的HAL的實例user_defined_interface,user_defined_interface是一個標準的AVALON總線接口,可以提供讀寫時序、控制信號,如讀寫端口、數(shù)據(jù)總線和地址總線等。按照AVALON總線端口類型和位寬等分別建立端口,可以提供對 SRAM的訪問[1]。建立的端口如表1所示。

    表1 user_defined_interface端口類型

    表1中,s_Data和s_Addr共享表示FLASH和SRAM共享數(shù)據(jù)總線和地址總線,由SOPC分配不同的地址空間來分別訪問。由于FLASH和SRAM共享地址空間,需要通過三態(tài)門來分配CPU對2個空間的訪問。

    2.2 FLASH和SRAM的地址對齊

    由于FLASH和SRAM共享數(shù)據(jù)端口,而SRAM是16位數(shù)據(jù)位寬,F(xiàn)LASH是8位數(shù)據(jù)位寬,二者共用數(shù)據(jù)總線就引發(fā)了地址對齊問題。不管Avalon master的端口寬度是多少,其地址線的最低位都代表字節(jié)地址,即Avalon master的地址只有一種就是字節(jié)地址。另外,Avalon三態(tài)橋出來的地址Addr也是字節(jié)地址,所以連接Avalon三態(tài)橋的8位數(shù)據(jù)寬度的器件,最低位地址與三態(tài)橋的 Addr0相連;16位數(shù)據(jù)寬度的器件,最低地址位必須和三態(tài)橋的Addr1相連,而不是Addr0。同理,連接Avalon三態(tài)橋的32位數(shù)據(jù)寬度的器件,其最低地址位必須和三態(tài)橋的 Addr2 相連[2]。

    3 μC/OS-II的移植

    完成NIOS和FLASH以及SRAM的連接,即完成了硬件平臺的搭建,可以基于此平臺移植μC/OSII。與很多嵌入式操作系統(tǒng)一樣,μC/OS-II也不具有通用性,用戶要在目標處理器上創(chuàng)建一個多任務(wù)的實時嵌入式系統(tǒng),首先要將操作系統(tǒng)移植到目標處理器上,然后在移植好的操作系統(tǒng)平臺上開發(fā)應(yīng)用程序[3]。在操作系統(tǒng)上開發(fā)程序,主要是可以依托操作系統(tǒng)的API函數(shù)、線程操作等,實現(xiàn)一些較復(fù)雜的算法和功能。

    3.1 與編譯器有關(guān)的部分移植

    因為不同的處理器有不同的字長,為了保證μC/OS-II的可移植性,就必須定義μC/OS-II認可的數(shù)據(jù)格式,而標準C中的short、int和long等數(shù)據(jù)類型是編譯器相關(guān)的,是不被μC/OS-II認可的。μC/OS-II的數(shù)據(jù)類型關(guān)鍵字包括 BOOLEAN、INT8U、INT8S和 INT16U等,在移植 μC/OS-II到NIOS之前,需要將OS_CPU.H中數(shù)據(jù)類型定義的部分進行更改,以適應(yīng)NIOS中GCC編譯器的數(shù)據(jù)類型。

    3.2 與硬件相關(guān)的部分移植

    μC/OS-II是建立在硬件平臺上的內(nèi)核,當然需要對底層硬件進行操作。μC/OS-II的移植需要用戶編寫4個與硬件平臺相關(guān)的函數(shù):OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()和 OSTickISR()[4]。

    3.3 μC/OS-II多任務(wù)的實現(xiàn)

    μC/OS-II為占先式的實時內(nèi)核,支持多任務(wù)操作,并且每個任務(wù)都有自己的堆棧,這樣就清晰了各任務(wù)之間的界限,增強了系統(tǒng)的穩(wěn)定性。μC/OS-II還提供了很多的系統(tǒng)服務(wù),例如郵箱、消息隊列、信號量、塊大小固定的內(nèi)存的申請和釋放、時間函數(shù)等,并且還支持多達255層的中斷嵌套。利用這些系統(tǒng)服務(wù)就能完成復(fù)雜邏輯的要求。

    首先在主函數(shù)中調(diào)用OSInit()函數(shù)初始化系統(tǒng),然后建立用戶任務(wù),最后調(diào)用 OSStart()函數(shù)啟動多任務(wù)。當然,在建立主函數(shù)之前必須定義各個任務(wù)的堆棧,系統(tǒng)的全局變量和相關(guān)宏[5]。

    有關(guān)μC/OS-II的移植,任務(wù)實現(xiàn)及其他相關(guān)操作請參見文獻[1]。

    4 網(wǎng)絡(luò)協(xié)議的實現(xiàn)

    LXT971A是Intel公司生產(chǎn)的單端口10/100 Mbps以太網(wǎng)收發(fā)器。該模塊集成了IEEE802.3協(xié)議,提供MII(Media Independent Interface)接口,可以支持物理層數(shù)據(jù)處理。

    LXT971A通過一個變換器(Transformer)與外部線路相連,實現(xiàn)內(nèi)外電路電平轉(zhuǎn)換。在發(fā)端,編解碼器將MAC層數(shù)據(jù)并串變換,編解碼為曼徹斯特碼并發(fā)送給變換器。在收端則是一個相反的過程。CPU從LXT971A收到的數(shù)據(jù)中讀取到該數(shù)據(jù)幀的源地址以及目的地址,得到外部設(shè)備的地址以及數(shù)據(jù)發(fā)送的目的地址。經(jīng)過NIOS的處理,生成相應(yīng)的發(fā)送數(shù)據(jù)。

    4.1 μC/OS-II與LXT971A的數(shù)據(jù)交換

    μC/OS-II是多任務(wù)操作系統(tǒng),在系統(tǒng)內(nèi)部建立專門的讀寫任務(wù),通過AVALON總線對外部雙口RAM進行讀寫,實現(xiàn)與LXT971A的數(shù)據(jù)交換。

    在數(shù)據(jù)發(fā)送時,AVALON總線將以太網(wǎng)數(shù)據(jù)包寫入雙口RAM中,發(fā)模塊(NET_T)負責將雙口RAM中的以太網(wǎng)包由 MII接口寫入 LXT971A[6]。由于NIOS組幀是按字節(jié)處理的,而MII接口是半字節(jié),因此,在雙口RAM與發(fā)模塊之間需要進行字節(jié)到半字節(jié)的轉(zhuǎn)換(D8TO4)。在數(shù)據(jù)接收時,將MII的半字節(jié)轉(zhuǎn)換成字節(jié)(D4TO8),再寫入雙口RAM,由指示NIOS進行讀取。數(shù)據(jù)交換以雙口RAM為緩存介質(zhì),全部以硬件獨立完成,不需要軟件的干預(yù),這樣實現(xiàn)的一個好處就是實現(xiàn)了 NIOS和LXT971A的硬隔離,在NIOS里不需要對LXT971A的時序進行控制,而專心處理數(shù)據(jù)信息,提高了信息的處理速度[7]。

    4.2 μC/OS-II中簡單IP協(xié)議的移植

    CPU通過LXT971接口與外部網(wǎng)絡(luò)進行數(shù)據(jù)交換。TCP/IP協(xié)議棧就是CPU與外部接口的協(xié)議。基于TCP/IP協(xié)議棧實現(xiàn)ARP協(xié)議和IP協(xié)議等,在IP協(xié)議基礎(chǔ)上實現(xiàn)ICMP協(xié)議等,以實現(xiàn)CPU與外部的網(wǎng)絡(luò)接口。

    TCP/IP協(xié)議棧的工作即是解析與封裝網(wǎng)絡(luò)接口包,當接收到以太網(wǎng)幀時即解析,根據(jù)以太網(wǎng)幀頭部將數(shù)據(jù)包分配給IP協(xié)議處理模塊和ARP模塊等;如果是發(fā)送數(shù)據(jù),即對需要發(fā)送的數(shù)據(jù)按照協(xié)議進行封裝,然后發(fā)送至以太網(wǎng)。

    在嵌入式系統(tǒng)中,由于資源有限,一般對TCP/IP協(xié)議棧進行裁剪,只需要實現(xiàn)基本的ARP、ICMP等即足以滿足CPU與外部交換數(shù)據(jù)的需求[8]。

    4.3 ARP協(xié)議的實現(xiàn)

    地址解析協(xié)議(Address Resolution Protocol,ARP)主要工作是將網(wǎng)絡(luò)地址(IP地址)轉(zhuǎn)換成物理地址(MAC)地址。

    ARP工作時,請求主機首先廣播一個含有希望到達的IP地址的數(shù)據(jù)包,網(wǎng)絡(luò)中所有的主機在收到這個ARP請求后,檢查數(shù)據(jù)包中的目的IP是否和自己的IP地址一致。如果不一致即忽略此數(shù)據(jù)包,如果一致,則將本機的MAC地址添入一個ARP響應(yīng)數(shù)據(jù)包,返回給網(wǎng)絡(luò)。

    ARP的協(xié)議類型字為0x0806,ARP請求操作字為0x01,ARP應(yīng)答操作字為0x02,ARP協(xié)議的以太網(wǎng)包主要字段如圖2所示。在響應(yīng)ARP請求時,如果主機檢測到ARP地址請求目的地址與本機地址相同,則將以太網(wǎng)包內(nèi)目的地址換為發(fā)起主起地址,源地址換為本機地址,將ARP操作字置為0x02,即可完成ARP請求的響應(yīng)[9]。

    圖2 ARP協(xié)議的以太網(wǎng)包格式

    4.4 ICMP協(xié)議的實現(xiàn)

    網(wǎng)際控制報文協(xié)議 (Internet Control Message Protocol,ICMP)是網(wǎng)絡(luò)層的差錯和控制報文協(xié)議。ICMP協(xié)議可以通過PING和TRACERT命令網(wǎng)絡(luò)網(wǎng)絡(luò)。PING用于檢測網(wǎng)絡(luò)的可達性,本文主要討論了PING命令的實現(xiàn)。

    由于ICMP命令是基于IP的,所以其協(xié)議字為0x0800(IP協(xié)議)。PING請求命令的ICMP協(xié)議字為0x08,PING響應(yīng)命令的ICMP協(xié)議字為0x00。在PING協(xié)議的以太網(wǎng)幀格式主要字段如圖3所示。在響應(yīng)PING命令時,只需要將目的地址與源地址,源IP地址與源目的地址進行交換,不可改變IP數(shù)據(jù)字段部分,即可完成 PING 命令的響應(yīng)[10,11]。這樣,省略了對校驗字段的計算,大大加快了PING命令響應(yīng)的速度。

    圖3 PING協(xié)議的以太網(wǎng)包格式

    在響應(yīng)PING命令時,只需要在IP層將目的IP地址與源IP地址調(diào)換,目的MAC地址與源MAC地址進行調(diào)換,再將ICMP協(xié)議置位即可。

    5 結(jié)束語

    硬件方面,通過雙口RAM以信號燈為指示靈活的在操作系統(tǒng)軟件和網(wǎng)絡(luò)接口芯片之間進行數(shù)據(jù)交換,保證了信息的實時、快速的傳輸,為網(wǎng)絡(luò)數(shù)據(jù)的處理提供了通道;軟件方面,NIOS和μC/OS-II的結(jié)合,從以前的基于硬件的編程提升到基于操作系統(tǒng)的編程,大大提高了系統(tǒng)設(shè)計的靈活性。在μC/OS-II操作系統(tǒng)上完成簡單網(wǎng)絡(luò)協(xié)議棧的移植,實現(xiàn)IP、ARP等協(xié)議的處理,完成了網(wǎng)絡(luò)終端的設(shè)計。

    [1] Altera Corporation.SOPC Builder User Guide[M].USA:Altera Corporation,2012:59-66.

    [2] Altera Corporation.Nios II Processor Reference Handbook V5.1[M].USA:Altera Corporation,2008:42-43.

    [3] LABROSSE J J.嵌入式實時操作系統(tǒng)μC/OS II[M].邵貝貝,譯.北京:北京航空航天大學出版社,2003:2-4.

    [4] 胡 玨.基于μC/OS-II的實時多任務(wù)應(yīng)用研究[J].計算技術(shù)與自動化,2008,27(1):115-119.

    [5] 呂小納,徐力平.μC/OS-Ⅱ在51單片機上的移植[J].電子設(shè)計工程,2012(6):52-54.

    [6] Intel Corporation.Intel LXT971A Single-Port 10/100 Mbps PHY Transceiver Datasheet[M].USA:Intel Corp,2005:50-51.

    [7] 趙 研,屈 超,岳新宇.千兆以太網(wǎng)SOPC系統(tǒng)的實現(xiàn)[J].無線電工程,2006,36(12):10-12.

    [8] 王 珊,程志洪,李 光,等.同步數(shù)據(jù)轉(zhuǎn)以太網(wǎng)的接口設(shè)計[J].無線電工程,2009,39(3):53-55.

    [9] 陳 勇,王 群.TCP/IP網(wǎng)絡(luò)中IP地址原理及IP子網(wǎng)的劃分[J].無線電通信技術(shù),2000,26(2):57-61.

    [10]周兆清,陳立軍.TCP/IP協(xié)議在衛(wèi)星鏈路上的應(yīng)用研究[J].無線電工程,2006,36(1):47-50.

    [11]李士東.開源Linux中IP協(xié)議棧的移植方法[J].無線電工程,2012,42(6):5-7.

    猜你喜歡
    三態(tài)雙口IP地址
    雙口形式的戴維寧定理在電路分析中的應(yīng)用
    鐵路遠動系統(tǒng)幾種組網(wǎng)方式IP地址的申請和設(shè)置
    直線上空間非齊次三態(tài)量子游蕩的平穩(wěn)測度
    雙口RAM在機載嵌入式系統(tǒng)中的應(yīng)用
    電子測試(2018年4期)2018-05-09 07:28:10
    基于SNMP的IP地址管理系統(tǒng)開發(fā)與應(yīng)用
    黑龍江電力(2017年1期)2017-05-17 04:25:16
    群文閱讀理念支撐下的課堂形態(tài)
    心律失常有“三態(tài)” 自我監(jiān)測要“三看”
    中老年健康(2016年5期)2016-06-13 01:54:49
    雙口RAM讀寫正確性自動測試的有限狀態(tài)機控制器設(shè)計方法
    雙口RAM在無人機三余度飛控計算機數(shù)據(jù)交換中的應(yīng)用
    基于FPGA的三態(tài)總線設(shè)計
    西乌| 余庆县| 榆中县| 海安县| 汤阴县| 襄汾县| 武乡县| 盐城市| 湘潭县| 福海县| 昌平区| 专栏| 横山县| 武山县| 建始县| 大方县| 西充县| 潮州市| 南投市| 柯坪县| 桃园市| 西藏| 陵水| 略阳县| 绵竹市| 连城县| 北辰区| 会理县| 阳谷县| 涪陵区| 闵行区| 高雄县| 富顺县| 临江市| 平安县| 英山县| 平潭县| 贵定县| 呼伦贝尔市| 庆城县| 龙江县|