<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于A(yíng)ltera FPGA無(wú)操作系統的LWIP移植

基于A(yíng)ltera FPGA無(wú)操作系統的LWIP移植

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

Ethernetif. c的編寫(xiě)移植者應根據自身使用的網(wǎng)卡特性完善這一函數。源碼提供者將ethernetif. c中的函數實(shí)現為一個(gè)框架形式??傮w而言,在文件ethernetif. c中已有5個(gè)函數的框架,包括函數名、函數參數、函數內容等,要完成如下5個(gè)函數的編寫(xiě):

基于A(yíng)ltera FPGA無(wú)操作系統的LWIP移植

這5個(gè)函數中,前3個(gè)與網(wǎng)卡功能密切相關(guān)。low_level_init為網(wǎng)卡初始化函數,其主要用于完成網(wǎng)卡復位及參數初始化,同時(shí)根據實(shí)際網(wǎng)卡特性,還需設置協(xié)議棧網(wǎng)絡(luò )接口管理結構neitif中與網(wǎng)卡屬性相關(guān)的字段,例如網(wǎng)卡MAC地址長(cháng)度等;low_level_output為網(wǎng)卡數據包發(fā)送函數,該函數的主要工作是將內核數據結構pbuf描述的數據包發(fā)送出去;low_level_input為網(wǎng)卡數據包接收函數;ethernetif_input的主要作用是調用網(wǎng)卡數據包接收函數low_level_input從網(wǎng)卡處讀取一個(gè)數據包,然后解析該數據包的類(lèi)型,最后將數據包遞交給上層;ethernetif_init,是上層在管理網(wǎng)絡(luò )接口結構netif時(shí)會(huì )調用的函數,該函數主要完成netif結構中某些字段的初始化,并最終調用low_level_init,完成網(wǎng)卡的初始化。到此,關(guān)于網(wǎng)卡驅動(dòng)的移植就基本完成了。

1.5 協(xié)議棧的初始化

基于A(yíng)ltera FPGA無(wú)操作系統的LWIP移植
基于A(yíng)ltera FPGA無(wú)操作系統的LWIP移植

在使用協(xié)議棧之前,協(xié)議棧內核必須完成初始化,若要使用網(wǎng)卡進(jìn)行通信,則網(wǎng)卡相關(guān)的網(wǎng)絡(luò )接口結構也需被注冊到內核中。在此用函數lwip_init_task來(lái)完成協(xié)議棧的初始化和網(wǎng)卡信息的注冊。初始化工作主要是調用內核函數1wip_init來(lái)完成的,其依次調用各模塊的初始化函數,例如內存初始化函數、數據包結構初始化函數、網(wǎng)絡(luò )接口結構初始化函數、IP初始化函數、TCP初始化函數等。接口結構注冊通過(guò)調用函數netif_add完成,該函數除了使用3個(gè)IP地址作為參數外,還需另外兩個(gè)函數地址作為參數,即etherne tif_init和ethernet_input。這兩個(gè)函數地址會(huì )被賦值給netif結構的相關(guān)字段,內核通過(guò)這些字段指向的函數來(lái)完成網(wǎng)卡的初始化以及向上層遞交數據。

2 運行和測試

利用FPGA上的JTAG接口將程序燒寫(xiě)至串行配置芯片EPCS64中,再通過(guò)中CPU的配置,將RESET VECTOR指向EPCS_FLASH_CONTROLLER,此時(shí)程序會(huì )被下載到串行配置芯片中,串行配置芯片在通電時(shí),將運行程序拷貝到代碼運行區,并從reset address啟動(dòng)。SOPC中的exception address指定的是系統異常處理代碼的存放處。若exception address和reset address不同,則程序從reset address啟動(dòng)后將放在reset address處的系統異常處理代碼拷貝到exception address,設置如圖5所示。

基于A(yíng)ltera FPGA無(wú)操作系統的LWIP移植

利用移植的協(xié)議棧中UDP協(xié)議,調用udpsend()函數往計算機發(fā)送數據,在計算機端,打開(kāi)TCPUDP測試工具,在FPGA中模擬數據產(chǎn)生模塊,并向上位機發(fā)送遞增碼,從測試工具欄中,看到上位機接收到的數據。從接收窗口中,能看到捕獲的udp數據包,是正常的16進(jìn)制遞增碼,如圖6所示。

基于A(yíng)ltera FPGA無(wú)操作系統的LWIP移植

3 結束語(yǔ)

通過(guò)提出基于FPGA的SOPC自定義MAC IP核的設計思路,用Verilog HDL硬件語(yǔ)言編程,滿(mǎn)足特殊器件的特殊要求,其從設計到實(shí)現驗證,充分感受到SOPC的優(yōu)勢。SOPC將中央處理器和外圍接口集成到一塊芯片上,具有體積小、成本低、高精度的優(yōu)點(diǎn)。而NIOS的可定制性,可根據需要添加組件,同時(shí)也可根據需要編寫(xiě)IP模塊,具有較強的靈活性。此外,還可直接由C語(yǔ)言完成軟件系統的開(kāi)發(fā)設計,調用現成C語(yǔ)言算法,提高工作效率,且具有良好的便捷性和靈活性。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: SOPC Builder NiosⅡ LWIP

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>