基于Altera FPGA無(wú)操作系統(tǒng)的LWIP移植
Ethernetif. c的編寫(xiě)移植者應(yīng)根據(jù)自身使用的網(wǎng)卡特性完善這一函數(shù)。LWIP源碼提供者將ethernetif. c中的函數(shù)實(shí)現(xiàn)為一個(gè)框架形式??傮w而言,在文件ethernetif. c中已有5個(gè)函數(shù)的框架,包括函數(shù)名、函數(shù)參數(shù)、函數(shù)內(nèi)容等,要完成如下5個(gè)函數(shù)的編寫(xiě):
這5個(gè)函數(shù)中,前3個(gè)與網(wǎng)卡功能密切相關(guān)。low_level_init為網(wǎng)卡初始化函數(shù),其主要用于完成網(wǎng)卡復(fù)位及參數(shù)初始化,同時(shí)根據(jù)實(shí)際網(wǎng)卡特性,還需設(shè)置協(xié)議棧網(wǎng)絡(luò)接口管理結(jié)構(gòu)neitif中與網(wǎng)卡屬性相關(guān)的字段,例如網(wǎng)卡MAC地址長(zhǎng)度等;low_level_output為網(wǎng)卡數(shù)據(jù)包發(fā)送函數(shù),該函數(shù)的主要工作是將內(nèi)核數(shù)據(jù)結(jié)構(gòu)pbuf描述的數(shù)據(jù)包發(fā)送出去;low_level_input為網(wǎng)卡數(shù)據(jù)包接收函數(shù);ethernetif_input的主要作用是調(diào)用網(wǎng)卡數(shù)據(jù)包接收函數(shù)low_level_input從網(wǎng)卡處讀取一個(gè)數(shù)據(jù)包,然后解析該數(shù)據(jù)包的類(lèi)型,最后將數(shù)據(jù)包遞交給上層;ethernetif_init,是上層在管理網(wǎng)絡(luò)接口結(jié)構(gòu)netif時(shí)會(huì)調(diào)用的函數(shù),該函數(shù)主要完成netif結(jié)構(gòu)中某些字段的初始化,并最終調(diào)用low_level_init,完成網(wǎng)卡的初始化。到此,關(guān)于網(wǎng)卡驅(qū)動(dòng)的移植就基本完成了。
1.5 協(xié)議棧的初始化
在使用協(xié)議棧之前,協(xié)議棧內(nèi)核必須完成初始化,若要使用網(wǎng)卡進(jìn)行通信,則網(wǎng)卡相關(guān)的網(wǎng)絡(luò)接口結(jié)構(gòu)也需被注冊(cè)到內(nèi)核中。在此用函數(shù)lwip_init_task來(lái)完成協(xié)議棧的初始化和網(wǎng)卡信息的注冊(cè)。初始化工作主要是調(diào)用內(nèi)核函數(shù)1wip_init來(lái)完成的,其依次調(diào)用各模塊的初始化函數(shù),例如內(nèi)存初始化函數(shù)、數(shù)據(jù)包結(jié)構(gòu)初始化函數(shù)、網(wǎng)絡(luò)接口結(jié)構(gòu)初始化函數(shù)、IP初始化函數(shù)、TCP初始化函數(shù)等。接口結(jié)構(gòu)注冊(cè)通過(guò)調(diào)用函數(shù)netif_add完成,該函數(shù)除了使用3個(gè)IP地址作為參數(shù)外,還需另外兩個(gè)函數(shù)地址作為參數(shù),即etherne tif_init和ethernet_input。這兩個(gè)函數(shù)地址會(huì)被賦值給netif結(jié)構(gòu)的相關(guān)字段,內(nèi)核通過(guò)這些字段指向的函數(shù)來(lái)完成網(wǎng)卡的初始化以及向上層遞交數(shù)據(jù)。
2 運(yùn)行和測(cè)試
利用FPGA上的JTAG接口將程序燒寫(xiě)至串行配置芯片EPCS64中,再通過(guò)SOPC Builder中CPU的配置,將RESET VECTOR指向EPCS_FLASH_CONTROLLER,此時(shí)程序會(huì)被下載到串行配置芯片中,串行配置芯片在通電時(shí),將運(yùn)行程序拷貝到代碼運(yùn)行區(qū),并從reset address啟動(dòng)。SOPC中的exception address指定的是系統(tǒng)異常處理代碼的存放處。若exception address和reset address不同,則程序從reset address啟動(dòng)后將放在reset address處的系統(tǒng)異常處理代碼拷貝到exception address,設(shè)置如圖5所示。
利用移植的協(xié)議棧中UDP協(xié)議,調(diào)用udpsend()函數(shù)往計(jì)算機(jī)發(fā)送數(shù)據(jù),在計(jì)算機(jī)端,打開(kāi)TCPUDP測(cè)試工具,在FPGA中模擬數(shù)據(jù)產(chǎn)生模塊,并向上位機(jī)發(fā)送遞增碼,從測(cè)試工具欄中,看到上位機(jī)接收到的數(shù)據(jù)。從接收窗口中,能看到捕獲的udp數(shù)據(jù)包,是正常的16進(jìn)制遞增碼,如圖6所示。
3 結(jié)束語(yǔ)
通過(guò)提出基于FPGA的SOPC自定義MAC IP核的設(shè)計(jì)思路,用Verilog HDL硬件語(yǔ)言編程,滿足特殊器件的特殊要求,其從設(shè)計(jì)到實(shí)現(xiàn)驗(yàn)證,充分感受到SOPC的優(yōu)勢(shì)。SOPC將中央處理器和外圍接口集成到一塊芯片上,具有體積小、成本低、高精度的優(yōu)點(diǎn)。而NIOS的可定制性,可根據(jù)需要添加組件,同時(shí)也可根據(jù)需要編寫(xiě)IP模塊,具有較強(qiáng)的靈活性。此外,還可直接由C語(yǔ)言完成軟件系統(tǒng)的開(kāi)發(fā)設(shè)計(jì),調(diào)用現(xiàn)成C語(yǔ)言算法,提高工作效率,且具有良好的便捷性和靈活性。
評(píng)論