FPGA控制DM9000A進行以太網數據收發的Verilog實現
>激活PHY
設置GPR(REG_1F)CEPIO0bit[0]=0;
復位后,DM9000A恢復默認的休眠狀態,以降低功耗,因此需要首先喚醒PHY。
>進行兩次軟復位,步驟如下:
設置NCR(REG_00)bit[2:0]=011,至少保持20μs;
清除NCR(REG_00)bit[2:0]=000;
設置NCR(REG_00)bit[2:0]=011,至少保持20μs;
清除NCR(REG_00)bit[2:0]=000;
>配置NCR寄存器;
設置NCR(REG_00)bit[2:1]=00;配置為正常模式。
通過改變該寄存器可以選擇設置內部或者外部PHY、全雙工或者半雙工模式、使能喚醒事件等網絡操作。
>清除發送狀態;
設置NSR(REG_01)bit[5]=1bit[3]=1 bit[2]=1;
>設置IMR寄存器(REG_FF)PAR bit[7]=1,以肩用RX/TX FIFOSRAM讀/寫地址指針自動返回功能;
>通過IMR寄存器(REG_FF)PRM bit[0]/PTM bit[1],對RX/TX中斷使能。如果需要在一個數據幀發送完后產生一個中斷,就應該將PTM bit[1]置1,如果需要在接收到一幀新數據時產生一個中斷,就應該將PRM bit[1]置1;
>設置RCR寄存器,使能數據接收功能。
通過以上步驟,可以通過LED指示燈觀測到DM9000A是否已成功初始化。
發送模塊
DM9000A中的發送緩沖區可以同時存儲兩幀數據,可以按照先后順序命名為幀I和幀II。DM9000A上電初始化后,發送緩存區的起始地址是00H,當前數據幀編號為幀I。兩幀數據的狀態控制字分別記錄在DM9000A的狀態寄存器03H和04H中。發送過程如下:
首先,FPGA利用寫操作寄存器MWCMD(REG_F8)向DM9000A的發送緩存區中寫入發送數據幀,即需要先寫入6字節的目的MAC地址,再寫入6字節的源MAC地址,最后再寫入發送數據。隨后,FPGA利用寫操作寄存器MWCMD(REG_F8)將數據幀長度寫入寄存器FCH和FDH,數據長度為16位,將高8位寫入寄存器FCH,低8位寫入寄存器FDH。最后,FPGA將發送控制寄存器TCR(REG_02)的bit[1]置為高電平,向DM9000A發出發送數據指令。DM9000A會自動做一些處理才將數據發往以太網,這包括:插入報頭和幀起始分隔符;插入來自上層協議的數據,如果數據量小于64字節,則自動補齊64字節;根據目標地址、源地址、長度/類型和數據產牛CRC校驗序列,并插入校驗序列位。這些處理都無需FPGA干預。處理完畢后,DM9000A即開始發送幀I,在幀I發送的同時,幀II的數據即可寫入發送緩存區。在幀I發送完后,將幀II的數據長度寫入寄存器FCH和FDH,最后將發送控制寄存器NSR(REG_01)的bit[1]置為高電平,即可開始幀II的發送。依此類推,下面發送的幀將會繼續編號為幀I、幀II、幀I、幀II……按照同樣的方式發送。
如果FPGA將中斷屏蔽寄存器 IMR(REG_FF)的bit[1]置為高電平,那么發送完畢后,DM9000A將會產生一個指示發送完成的中斷信號。在發送過程中,FPGA可以查詢寄存器標志位寄存器NSR(REG_01)中的TX1END bit[2]或者TX2END bit[3],得到數據幀的發送狀態。
發送流程,寄存器ISR中的PTS標志位是發送中斷標志位,當一幀數據發送完畢,PTS=0,FPCA檢測到該標志后,應清除標志位以便發送新的數據幀。這里需要注意的是,向FC、FD所寫的幀長度應該包含目的MAC地址段、源MAC地址段和有效數據的總長度。
接收模塊
DM9000A中的接收緩存區是一個環形結構,初始化后的起始地址為0C00H,每幀數據都有4字節長的首部,然后是有效數據和CRC校驗序列。首部4字節依次是01H、狀態、長度低字節和長度高字節。 首部4字節含義如下:
第一個字節用來檢測接收緩存區中是否有數據,如果這個字節是01H,表明接收到了數據;如果為00H,則說明沒有數據。但是,如果第一個字節既不是01H,也不是00H,DM9000A就必須作一次軟復位來從這種異常狀態中恢復。
第二個字節存儲著以太網幀狀態,由此可判斷所接收幀是否正確。
第三和第四字節存儲著以太網幀長度。后續的字節就是有效數據。
接收過程如下:
查看中斷狀態寄存器,如果接收到新數據,寄存器ISR的PRS位將被置為0;如果檢測到PRS=0,清除PRS,FPGA開始讀接收緩存區數據。如果第一字節是01H,則說明有數據,00H說明無數據,否則要進行復位; 根據獲取的長度信息,判斷是否讀完一幀,如果讀完,接著讀下一幀,直到遇到首字節是00H的幀,說明接收數據已讀完。FPGA可以重新查看中斷狀態寄存器,等待新的有效數據幀。
結語
本文對以太網控制器DM9000A進行了原理和功能介紹,并結合自行開發的SDR基帶信號處理平臺,基于FPGA設計實現了100M以太剛接口,其設計思路新穎,硬件連接簡單。整體系統具有功耗低,體積小,運行穩定可靠等優點。
評論