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