以太網(wǎng)控制器芯片的設計及實(shí)現
網(wǎng)絡(luò )控制器芯片的功能與設計實(shí)現
IEEE 802.3協(xié)議是針對以太網(wǎng)CSMA/CD標準的傳輸介質(zhì)物理層(PHY)和介質(zhì)訪(fǎng)問(wèn)控制協(xié)議(MAC、Media Access Control)來(lái)定義的。芯片由PHY、發(fā)送模塊、接收模塊、FIFO、控制模塊組成,其中控制模塊包括寄存器堆、DMA(Direct Memory Access)模塊、流量控制模塊、接收緩沖區和發(fā)送緩沖區組成。網(wǎng)絡(luò )控制器芯片的功能框圖如圖1所示。
1 IEEE 802.3以太網(wǎng)MAC數據幀結構
在發(fā)送數據時(shí),發(fā)送模塊自動(dòng)在待傳數據前加上7字節的前導碼和1字節的幀起始定界符,緊隨的是6字節的目的地址和6字節的源地址,然后長(cháng)度/類(lèi)型為2字節,接著(zhù)是數據區,然后是46~1500字節的數據。若發(fā)送時(shí),數據長(cháng)度小于最短長(cháng)度46字節,發(fā)送模塊自動(dòng)填補,以達到最小長(cháng)度,最后是4個(gè)字節的循環(huán)冗余校驗碼。
2 發(fā)送模塊
發(fā)送模塊的作用就是按照CSMA/CD協(xié)議發(fā)送數據包。發(fā)送模塊狀態(tài)機控制協(xié)調各個(gè)發(fā)送子模塊的時(shí)序,發(fā)送模塊狀態(tài)機如圖2所示。
圖2 發(fā)送模塊狀態(tài)轉換圖
S_defer狀態(tài)表示網(wǎng)絡(luò )忙,若網(wǎng)絡(luò )空閑了,經(jīng)過(guò)最小的幀間隙時(shí)間,進(jìn)入網(wǎng)絡(luò )空閑狀態(tài)S_idle。若需要發(fā)送數據包,經(jīng)過(guò)S_pre,S_data,S_pad,S_crc等狀態(tài)發(fā)送,在這當中若檢測到?jīng)_突信號,就進(jìn)入S_jam狀態(tài)。在S_jam狀態(tài)判斷是local collision還是late collision,若是local collision就進(jìn)入S_back狀態(tài),按照退避算法重發(fā)當前數據幀,否則直接進(jìn)入網(wǎng)絡(luò )忙狀態(tài),放棄該幀的發(fā)送。
3 接收模塊
接收模塊的任務(wù)就是接收數據幀。物理接口收發(fā)器PHY將收到的網(wǎng)絡(luò )數據變成二進(jìn)制數據送給接收模塊,接收模塊再把正確的數據經(jīng)過(guò)接收FIFO和DMA的控制送給接收緩沖區。接收模塊的功能還包括移除接收到幀的前導碼/幀分隔符;比較目的地址,判斷是否丟棄當前數據幀;對接收到的數據包做CRC校驗,判斷傳輸過(guò)程中數據是否出錯。接收模塊狀態(tài)機是接收模塊的核心,控制協(xié)調接收模塊的各個(gè)子模塊的工作與時(shí)序。接收模塊狀態(tài)機如圖3所示。
圖3 接收模塊狀態(tài)轉換圖
復位后,狀態(tài)機進(jìn)入S_idle狀態(tài),若數據是無(wú)效的,就停留在S_idle狀態(tài),否則進(jìn)入S_pre狀態(tài)。S_pre狀態(tài)和S_sdf狀態(tài)的作用就是去掉前導碼和幀間隔符。當幀間隔符全部檢測到,進(jìn)入S_data狀態(tài),在S_data狀態(tài)使用字節計數器,記錄所收到數據的字節個(gè)數,用于比較目的地址。若目的地址匹配則將接收到的數據寫(xiě)入到接收FIFO,否則丟棄該幀,不寫(xiě)入到FIFO。字節計數器的作用還有判斷接收到的數據包是否超過(guò)幀的最大長(cháng)度。若在S_pre狀態(tài)、S_sdf狀態(tài)或S_data狀態(tài)出現數據有效信號無(wú)效的情況,都進(jìn)入到S_drop狀態(tài)。
圖4 核心模塊的功能仿真
4 控制模塊
控制模塊包含DMA(direct memory access)模塊、流量控制模塊、緩沖區模塊、寄存器堆模塊和總線(xiàn)接口模塊。DMA模塊的功能是將接收FIFO的數據搬運到接收緩沖區,以及發(fā)送緩沖區的數據搬運到發(fā)送FIFO。流量控制模塊端口阻塞的情況下丟幀,這種方法是當接收緩沖區開(kāi)始溢出時(shí),通過(guò)將阻塞信號發(fā)送回源地址實(shí)現的。流量控制可以有效地防止由于網(wǎng)絡(luò )中瞬間的大量數據對網(wǎng)絡(luò )帶來(lái)的沖擊,保證用戶(hù)網(wǎng)絡(luò )高效而穩定地運行。兩種控制流量的方式:(1)在半雙工方式下,流量控制是通過(guò)反向壓力(backpressure),即我們通常說(shuō)的背壓計數實(shí)現的,這種計數是通過(guò)向發(fā)送源發(fā)送jamming信號使得信息源降低發(fā)送速度。(2)在全雙工方式下,流量控制一般遵循IEEE 802.3X標準,是由交換機向信息源發(fā)送“pause”幀令其暫停發(fā)送。緩沖區模塊由一塊32KB的SRAM組成,分為接收緩沖區和發(fā)送緩沖區,接收緩沖區和發(fā)送緩沖區的大小可以由用戶(hù)編程決定。緩沖區以分頁(yè)的方式來(lái)管理,256B為一頁(yè)。主機通過(guò)總線(xiàn)接口與芯片交換數據,通過(guò)讀寫(xiě)寄存器堆來(lái)控制芯片的工作。
設計驗證
本文給出核心功能的驗證過(guò)程。把這些核心功能模塊連接成一個(gè)環(huán)路(發(fā)送模塊直接與接收模塊相連接),發(fā)送模塊按照802.3協(xié)議發(fā)出數據包,接收模塊按照802.3協(xié)議處理這些數據包,符合要求的數據包送到(接收緩沖區),這些模塊在Mentor公司的ModelsimSe5.8里面功能仿真波形如圖5所示。
圖5 芯片的實(shí)現流程
圖中,clk為系統時(shí)鐘;rst為復位信號;tx_req為發(fā)送FIFO請求信號,讓DMA從發(fā)送緩沖區搬運數據到發(fā)送FIFO;tx_fifo_data_out是從發(fā)送FIFO里面出來(lái)的8數據,發(fā)送模塊封裝這些數據,發(fā)送給PHY;這里沒(méi)有對PHY進(jìn)行驗證,把發(fā)送模塊發(fā)出的數據TXD和數據使能TXEN直接與接收模塊數據端和數據有效信號分別相連接;接收模塊把TXD進(jìn)行串并轉換,得到8為rx_data;byte_cnt為接收到rx_data的個(gè)數。
功能仿真通過(guò)之后,把核心模塊連接成一個(gè)整體(SRAM直接調用Quartus II的IP Core),通過(guò)Quartus II綜合以后,下載到FPGA開(kāi)發(fā)板里面。用FPGA模擬網(wǎng)絡(luò )控制器芯片,與計算機進(jìn)行通信。FPGA與PC通過(guò)RJ-45相連。應用軟件發(fā)一數據包給FPGA,接收模塊接收到數據包后,通過(guò)DMA將數據從FIFO搬運到接收緩沖區。一包數據接收完成后,通過(guò)附加邏輯,讓FPGA發(fā)送出剛剛接收到的數據包,附加邏輯還完成了把接收到的數據按位取反的功能。應用軟件顯示PC收到的數據包,通過(guò)比較PC發(fā)給FPGA的數據包和FPGA發(fā)送給PC的數據包,驗證了核心模塊的功能正確(FPGA的附加邏輯將接收到的數據包進(jìn)行了按位取反操作)。
芯片實(shí)現
設計驗證通過(guò)以后,經(jīng)過(guò)圖5所示的流程,得到整個(gè)芯片的版圖。
本次流片采用華虹NEC 0.35μm CMOS工藝,芯片面積為5640μm×5480μm(不計劃片槽和緩沖區),芯片有100個(gè)管腳。芯片的右上部分是實(shí)現MAC層的數字區,左下區域是華虹NEC提供的IP Core--32KB的SRAM,用作緩沖區,右下區域完成PHY功能,周?chē)枪苣_。
評論