基于Xilinx FPGA的千兆以太網(wǎng)控制器的開發(fā)
2)MAC接收模塊
MAC接收模塊結(jié)構(gòu)如圖10-33所示,負(fù)責(zé)數(shù)據(jù)幀的接收。當(dāng)外部PHY將通信信道的串行數(shù)據(jù)轉(zhuǎn)換為半字節(jié)長的并行數(shù)據(jù)并發(fā)送給接收模塊后,接收模塊會將這些半字節(jié)數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)據(jù),然后經(jīng)過地址識別、CRC校驗、長度判斷等操作后,再通過主機接口寫入外部存儲器,并在主機接口模塊的接收隊列中記錄幀的相關(guān)信息。此外,接收模塊還負(fù)責(zé)前序碼和CRC的移除。
圖10-33 以太網(wǎng)MAC接收模塊的結(jié)構(gòu)示意圖
接收過程的接收狀態(tài)機由Idle_State、Drop_State、Preamble_State、SFD_State、Data0_State、Data1_State等六個狀態(tài)組成, 其狀態(tài)轉(zhuǎn)移圖如圖10-34所示。
圖10-34 接收狀態(tài)機的狀態(tài)轉(zhuǎn)移圖
當(dāng)接收模塊檢測到數(shù)據(jù)有效信號之后,,狀態(tài)機將進(jìn)入Preamble_State,并開始接收前序碼。此后狀態(tài)機進(jìn)入SFD_State,接收一個字節(jié)的幀起始定界符,之后根據(jù)IFGcnt計數(shù)器的值進(jìn)入不同的狀態(tài)。如果IFGcnt所確定的時間大于96個比特時間,狀態(tài)機將進(jìn)入Data0狀態(tài)以接收字節(jié)的低4位,然后是Data1狀態(tài),并接收字節(jié)的高4位,之后又回到Data0狀態(tài)。狀態(tài)機就一直在這兩個狀態(tài)之間循環(huán),直到數(shù)據(jù)接收完畢(PHY清除MRxDV信號)后進(jìn)入Idle,以重新等待接收新的數(shù)據(jù);如果接收到幀起始定界符時,IFGcnt計數(shù)器所確定的時間小于96個比特時間,那么狀態(tài)機將進(jìn)入Drop_State狀態(tài),并一直維持該狀態(tài)直到數(shù)據(jù)有效信號結(jié)束(PHY清除MRxDV信號)。之后,狀態(tài)機再回到Idle等待接收新的數(shù)據(jù)。如果在接收前序碼、幀起始定界符和數(shù)據(jù)期間,數(shù)據(jù)有效信號被清除,那么狀態(tài)機將回到Idle。
3)MII管理模塊
MII管理模塊用于控制MAC與外部PHY之間的接口,用于對PHY進(jìn)行配置并讀取其狀態(tài)信息。該接口由時鐘信號MDC和雙向數(shù)據(jù)信號MDIO組成。MII管理模塊則由時鐘生成模塊、移位寄存器模塊和輸出控制模塊三部分組成。
時鐘生成模塊可以根據(jù)系統(tǒng)時鐘和系統(tǒng)設(shè)置中的分頻系數(shù)來產(chǎn)生MII 管理模塊的時鐘信號MDC(10 Mbps速率時為2.5 MHz, 100 Mbps速率時為25 MHz)。移位寄存器模塊既可用于對PHY的控制數(shù)據(jù)進(jìn)行寫入操作,也可用于對PHY的狀態(tài)信息進(jìn)行讀出操作。寫控制數(shù)據(jù)時,移位寄存器根據(jù)其他模塊的控制信號將并行控制數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù);而在讀狀態(tài)信息時,移位寄存器則將PHY的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù),MAC中的其他模塊可將該并行數(shù)據(jù)寫入適當(dāng)?shù)募拇嫫鳌?
由于MDIO是雙向信號,因此輸出控制模塊就用來決定MDIO是處于輸入狀態(tài)還是輸出狀態(tài)。當(dāng)MDIO處于輸出狀態(tài)時,移位寄存器輸出的串行控制數(shù)據(jù)在經(jīng)過時鐘同步后發(fā)送到PHY;當(dāng)MDIO處于輸入狀態(tài)時,移位寄存器將數(shù)據(jù)線上的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)
4)主機接口模塊
主機接口是運行以太網(wǎng)的上層協(xié)議(如TCP/IP協(xié)議)與MAC控制器的接口。通過該接口,上層協(xié)議可以設(shè)置MAC的工作模式并讀取MAC的狀態(tài)信息。該接口還可用于上層協(xié)議與MAC之間的數(shù)據(jù)交換。
主機接口模塊內(nèi)有一組寄存器,可用于存儲上層協(xié)議對MAC設(shè)置的參數(shù)以及MAC的狀態(tài)信息。上層協(xié)議對MAC設(shè)置的參數(shù)包括接收超短幀的使能、添加填充碼使能、發(fā)送超長幀的使能、添加CRC校驗值使能、全雙工模式或半雙工模式、持超長延遲使能、混雜模式(Promiscuous)、接收廣播幀使能、發(fā)送和接收使能、中斷源和中斷使能、幀間間隙的長度、最大幀和最小幀的長度、重試限制和沖突時間窗、MII地址和MII控制命令、接收和發(fā)送隊列的長度以及本機MAC地址等。
上層協(xié)議通過MAC發(fā)送和接收數(shù)據(jù)的操作主要由主機接口模塊內(nèi)的兩個隊列來進(jìn)行管理,這兩個隊列用于對等待發(fā)送的多個幀和接收到的多個幀進(jìn)行排隊。發(fā)送隊列主要記錄等待發(fā)送的幀的相關(guān)信息、發(fā)送該幀時對MAC的設(shè)置以及該幀發(fā)送完之后產(chǎn)生的狀態(tài)信息。幀的相關(guān)信息包括幀的長度、幀在外部存儲器中的地址、該幀是否準(zhǔn)備好發(fā)送以及隊列中是否還有其它幀等待發(fā)送;對MAC的設(shè)置則包括中斷使能、填充使能、CRC使能;產(chǎn)生的狀態(tài)信息包括成功發(fā)送之前的重試次數(shù)、由于達(dá)到重試限制而放棄發(fā)送、發(fā)送時產(chǎn)生的滯后沖突以及成功發(fā)送之前發(fā)生過的延遲。
接收隊列主要對接收到的數(shù)據(jù)幀進(jìn)行排隊并記錄每個接收到的幀信息。這些信息包括幀的長度、是控制幀還是普通數(shù)據(jù)幀、幀中包含無效符號、接收到的幀太長或太短、發(fā)生CRC錯誤、接收的過程中發(fā)生滯后沖突、幀是否接收完、隊列中是否還有其它已接收到的幀以及幀存儲在外部存儲器中的地址等。同時隊列中還有針對每個幀的設(shè)置位,用來設(shè)置是否在接收到幀時產(chǎn)生中斷。發(fā)送隊列和接收隊列的長度都可以在控制寄存器中進(jìn)行設(shè)置。
評論