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