以太網(wǎng)控制器MAC設(shè)計(jì)_第1頁
以太網(wǎng)控制器MAC設(shè)計(jì)_第2頁
以太網(wǎng)控制器MAC設(shè)計(jì)_第3頁
以太網(wǎng)控制器MAC設(shè)計(jì)_第4頁
以太網(wǎng)控制器MAC設(shè)計(jì)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

以太網(wǎng)控制器MAC設(shè)計(jì)姓名:鄭文灝學(xué)號:110260125同組人:劉國陽、劉慧超指導(dǎo)老師:王新勝成績:目錄TOC\o"1-3"\h\z緒論課題研究的背景和意義III第1章課程設(shè)計(jì)的要求1課程設(shè)計(jì)的目的1課程設(shè)計(jì)的要求1第2章課程設(shè)計(jì)的內(nèi)容2設(shè)計(jì)思路2功能模塊分析3寄存器模塊3接收幀模塊3發(fā)送幀模塊62.2.4MAC控制模塊102.2.5MII模塊112.3HDL代碼闡述122.4ModelSim驗(yàn)證21第3章課程設(shè)計(jì)的總結(jié)與展望23緒論課題研究的背景和意義人類社會的進(jìn)步要求信息產(chǎn)業(yè)迅速發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)已成為全球信息產(chǎn)業(yè)的基石,高度發(fā)達(dá)的計(jì)算機(jī)互聯(lián)網(wǎng)為人類社會的信息交流和資源共享提供了良好的環(huán)境,對人類生活方式的改變和社會生產(chǎn)力的進(jìn)步產(chǎn)生了革命性的影響。在計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展過程中,以太網(wǎng)是眾多網(wǎng)絡(luò)技術(shù)中具有影響力的一種技術(shù),是當(dāng)今主流的局域網(wǎng)(LAN)技術(shù)。以太網(wǎng)最初是由Xerox公司在70年代提出的,1982年DEC、Intel和Xerox制定了DIX標(biāo)準(zhǔn),即10Mbps普通以太網(wǎng)標(biāo)準(zhǔn)。1983年,IEEE組織公布了IEEES02.3標(biāo)準(zhǔn),10Mbps以太網(wǎng)得到了國際的認(rèn)可,標(biāo)志著以太網(wǎng)標(biāo)準(zhǔn)的正式成立,同時(shí)也標(biāo)志著符合國際標(biāo)準(zhǔn)的以太網(wǎng)技術(shù)的面世。1995年IEEE通過了IEEE802.3u標(biāo)準(zhǔn),標(biāo)志著100Mbps快速以太網(wǎng)時(shí)代的到來。隨著網(wǎng)絡(luò)用戶的日益增加,10Mbps帶寬在一些環(huán)境下不能滿足人們對信息傳輸速率要求。因此快速以太網(wǎng)推出得到了廣泛的推廣??焖僖蕴W(wǎng)是在10Mbps普通以太網(wǎng)上基礎(chǔ)上發(fā)展起來的,它在保持幀格式,介質(zhì)訪問控制的前提下,工作速率比普通以太網(wǎng)快10倍。IEEE802.3u快速以太網(wǎng)標(biāo)準(zhǔn)是IEEE802.3標(biāo)準(zhǔn)的補(bǔ)充,并且兼容10Mbps以太網(wǎng)。10Mbps和100Mbps以太網(wǎng)組網(wǎng)方便,價(jià)格低廉,性能高效在局域網(wǎng)中受到了廣泛應(yīng)用。1998年通過了IEEE802.3z標(biāo)準(zhǔn),以太網(wǎng)的運(yùn)行速度達(dá)到1Gbps,目前已出現(xiàn)了10Gbps的以太網(wǎng)。與傳統(tǒng)的CAN、RS.485等相比較,以太網(wǎng)速度更快、通用性更好,而且能直接與因特網(wǎng)相連,具有更大范圍的遠(yuǎn)程訪問。相對于新興的USB,IEEEl394等總線,以太網(wǎng)在傳輸距離和控制軟件的通用性上有明顯的優(yōu)勢。近幾年隨著深亞微米集成電路工藝技術(shù)的飛速發(fā)展,SoC(SystemonaChip)已經(jīng)成為IC界關(guān)注的焦點(diǎn),單一芯片上能夠容納更多的邏輯單元成為芯片設(shè)計(jì)發(fā)展的必然趨勢。將所有的功能塊集成在一個(gè)單獨(dú)的芯片上可以大幅度降低系統(tǒng)成本,減少系統(tǒng)的面積和功耗,提高系統(tǒng)的可靠性。SoC已經(jīng)滲透到通信、多媒體、計(jì)算機(jī)控制以及其它一些數(shù)字領(lǐng)域,以太網(wǎng)技術(shù)在嵌入式系統(tǒng)中的開發(fā)應(yīng)用,已成為當(dāng)前嵌入式領(lǐng)域研究的技術(shù)熱點(diǎn)之一。嵌入式以太網(wǎng)在工業(yè)控制、商業(yè)領(lǐng)域、交通行業(yè)、家庭自動化等有著良好的應(yīng)用前景,同時(shí)嵌入式設(shè)備以其價(jià)格低廉、體積小以及實(shí)時(shí)性使得嵌入式系統(tǒng)的網(wǎng)絡(luò)化開發(fā)有著通用處理器無法比擬的優(yōu)點(diǎn)。嵌入式系統(tǒng)的網(wǎng)絡(luò)化,使得SoC有了更廣泛的應(yīng)用范圍。在嵌入式系統(tǒng)的網(wǎng)絡(luò)化開發(fā)過程中,首先要解決嵌入式設(shè)備與以太網(wǎng)絡(luò)的連接問題,即網(wǎng)絡(luò)芯片的設(shè)計(jì)。常見的具有網(wǎng)絡(luò)功能的芯片有兩類,一類是專用的以太網(wǎng)芯片,集成了MAC控制器和PHY,例如REALTEK8019AS、8039AS,這類芯片一般用于網(wǎng)卡、路由器等設(shè)備,另一類是用控制、工業(yè)領(lǐng)域的具有網(wǎng)絡(luò)功能的SoC芯片,例如,PHILIPSLPC2400,這類芯片通常集成了MAC控制器,但由于Pmr的模擬電路特性及設(shè)計(jì)工藝的兼容性問題,這類芯片一般都使用外置的PHY芯片來實(shí)現(xiàn)對以太網(wǎng)的支持。在嵌入式領(lǐng)域,通信技術(shù)的發(fā)展要求對網(wǎng)絡(luò)的支持越來越廣泛,所以研究和設(shè)計(jì)一個(gè)用于嵌入式SoC芯片的以太網(wǎng)MAC控制器,具有相當(dāng)?shù)膶?shí)際意義。當(dāng)今,以太網(wǎng)已經(jīng)極大地影響我們的生活,嵌入式系統(tǒng)上的開發(fā)應(yīng)用,已經(jīng)成為當(dāng)前嵌入式研究領(lǐng)域的技術(shù)熱點(diǎn)之一,一方面,與傳統(tǒng)的等相比較,以太網(wǎng)更加高速、通用,而且還可以直接與Internet相連接,提供更大范圍的遠(yuǎn)程訪問;另一方面,相對于新興的、IEEE1394等總線,以太網(wǎng)技術(shù)在傳輸距離、不想成本以及控制軟件的通用性上都有明顯優(yōu)勢。課程設(shè)計(jì)的要求課程設(shè)計(jì)的目的了解掌握以太網(wǎng)控制器的工作原理掌握較大工程的基本開發(fā)技能培養(yǎng)綜合運(yùn)用Modelsim,ISE工具進(jìn)行硬件開發(fā)的能力培養(yǎng)數(shù)字系統(tǒng)設(shè)計(jì)的基本能力課程設(shè)計(jì)的要求執(zhí)行以太網(wǎng)協(xié)議MAC要求的功能自動產(chǎn)生和檢查32bitCRC在發(fā)送時(shí)自動填充長度小于規(guī)定的幀監(jiān)測幀過長或過短兼容10Mbps和100Mbps兩種速率當(dāng)碰到過小的幀間隔或過長的延遲時(shí)間時(shí)自動丟棄幀在全雙工模式下控制流量并且自動產(chǎn)生控制幀在半雙工模式下進(jìn)行沖突檢測并且在沖突時(shí)自動重傳完成對發(fā)送/接收的狀態(tài)解析容納128個(gè)緩沖描述符的內(nèi)部RAM和存儲幀的內(nèi)部RAM發(fā)送和接收幀時(shí)的異步雙口FIFO發(fā)送幀模塊:處理所有有關(guān)幀發(fā)送的操作接收幀模塊:處理所有有關(guān)幀接收的操作控制模塊:在全雙工的工作模式下,處理所有有關(guān)數(shù)據(jù)流控制的操作狀態(tài)模塊:要寫入到緩沖描述符或其他模塊要調(diào)用的不同的狀態(tài)寄存器模塊:所有要在MAC層操作中用到的寄存器課程設(shè)計(jì)的內(nèi)容設(shè)計(jì)思路本文主要闡述基于FPGA對快速以太網(wǎng)MAC層功能的實(shí)現(xiàn)。采用自頂向下、分塊設(shè)計(jì)的思路,逐個(gè)實(shí)現(xiàn)MAC主要功能模塊,諸如發(fā)送模塊、接收模塊、MAC控制模塊以及物理層和主機(jī)接口模塊等,按照IP核的標(biāo)準(zhǔn)進(jìn)行設(shè)計(jì)。同時(shí)考慮到對主機(jī)和PHY總線連接,MAC內(nèi)部都采用8位數(shù)據(jù)線,32位地址線,而在和PHY接口連接時(shí)采用4位數(shù)據(jù)通道。MAC層主體框架如圖2-1所示,主要模塊有:MII模塊、MAC控制模塊、接收幀模塊、發(fā)送幀模塊、狀態(tài)模塊、寄存器模塊、存儲模塊、主機(jī)總線接口模塊,以及用于時(shí)鐘同步、復(fù)位和寄存器輸出的模塊。MAC控制器結(jié)構(gòu)框圖這里,有必要說一下IEEE幀格式,如圖2-2所示。IEEE幀格式1)Pre(Preamble):前導(dǎo)碼,7字節(jié)0x55信號,接收站點(diǎn)通過該字段知道接收到數(shù)據(jù)幀信息,并使網(wǎng)絡(luò)兩端的物理層達(dá)到穩(wěn)定同步狀態(tài)。2)SFD(Start.of-FrameDelimiter):定界符,表示一個(gè)有效幀的開始,1字節(jié)的0xD5。當(dāng)接收站收到定界符時(shí)表示一幀數(shù)據(jù)的開始。3)DA(DestinationAddress):目的地址,69節(jié)。DA字段用于識別需要接收幀的站點(diǎn)。目的地址可以分為單播地址,多播地址和廣播地址。單播地址是一個(gè)站點(diǎn)的特定的地址,當(dāng)發(fā)送地址為單播地址只有這個(gè)地址的站點(diǎn)才能接收。多播地址是一個(gè)組地址,當(dāng)發(fā)送目的地址為多播地址時(shí),這一組站點(diǎn)才能接收。廣播地址,當(dāng)發(fā)送目的地址為廣播地址時(shí),這個(gè)廣播域的地址都可以接收。廣播地址為特殊的組播地址,地址全為1。4)SA(SourceAddress):源地址,69節(jié)。SA字段用于識別發(fā)送幀的站點(diǎn)。5)Length/Type:長度/類型,29節(jié)。如果是采用可選格式組成幀結(jié)構(gòu)時(shí),該字段既表示包含在幀數(shù)據(jù)字段中的MAC數(shù)據(jù)大小,也表示幀類型。6)Data(Pad):數(shù)據(jù)和填充域,是一組n(46≤n≤1500)字節(jié)的任意值序列。由于CSMA/CD算法的限制,以太網(wǎng)幀必須不小于64字節(jié),如果小于該字節(jié)長度,則要進(jìn)行數(shù)據(jù)填充以達(dá)到最小幀長度。幀長度最長為1518字節(jié)。7)FCS(FrameCheckSequence):幀校驗(yàn),49節(jié)。該序列包括32位的循環(huán)冗余校驗(yàn)值,由發(fā)送MAC方生成,在接收時(shí)用同樣的算法進(jìn)行校驗(yàn),用來判斷這幀數(shù)據(jù)是不是在發(fā)送過程中產(chǎn)生錯誤。被校驗(yàn)的范圍包括目的地址域,源地址域,長度/類型域,數(shù)據(jù)域和填充域。功能模塊分析寄存器模塊eth_registers是MAC層的寄存器模塊。所有的寄存器都是32位寬度,但是具體用到的則由寄存器實(shí)際所需寬度所決定,其余位填0.每個(gè)寄存器都有兩個(gè)參數(shù):寬度和Reset值。Reset值定義寄存器清零后設(shè)置的默認(rèn)值。寄存器模塊共有23個(gè)寄存器。通過訪問寄存器并對寄存器內(nèi)容進(jìn)行讀寫操作便可完成一些狀態(tài)監(jiān)測和功能選擇。接收幀模塊接收幀模塊的任務(wù)就是接收幀數(shù)據(jù)。外部的以太網(wǎng)PHY芯片將串行數(shù)據(jù)傳送至MII模塊,最后成為一個(gè)個(gè)nibble(MRxD[3:0])發(fā)送到接收模塊里去,同時(shí)還有“數(shù)據(jù)有效”的掩碼位MRxDV.然后發(fā)送模塊就把這些nibble聚集成字節(jié)byte的形式,再和一些表示數(shù)據(jù)開始和結(jié)束的信號一起發(fā)送到主機(jī)總線接口。接收模塊還需要實(shí)現(xiàn)的功能包括有移除接收到的幀的前導(dǎo)碼、幀起始定界符,產(chǎn)生用于地址識別并發(fā)送到HASH表內(nèi),對所有接收到的包進(jìn)行CRC校驗(yàn)。圖2-3是該模塊的整體結(jié)構(gòu)框圖。圖中“計(jì)數(shù)匹配信號”表示當(dāng)計(jì)數(shù)器達(dá)到一些特定值時(shí),將相應(yīng)特征信號觸發(fā)輸出為1。接收模塊整體框圖接收模塊有下列子模塊組成:eth_crc——CRC(循環(huán)冗余校驗(yàn)碼)模塊eth_rxaddrcheck——地址識別模塊eth_rxcounters——與數(shù)據(jù)包接收有關(guān)的計(jì)數(shù)器模塊eth_rxstatem——接收模塊狀態(tài)機(jī)除了上述的子模塊,接收模塊還用到下列邏輯信號:產(chǎn)生CRCHash值和HashGood信號位,用于地址識別模塊鎖存從PHY芯片接收到的數(shù)據(jù)RxData_d目的地址廣播Broadcast或者組播Multicast信號產(chǎn)生信號RxValid、RxStartFrm、RxEndFrm,表征數(shù)據(jù)傳輸?shù)挠行訦ugEn,是否允許接收大包。定義與寄存器PACKETLEN、r_IFG,是否允許最小幀間隔,用于計(jì)數(shù)器模塊的判決條件r_Pro、r_Bro、r_Iam和寄存器MAC、HASH0、HASH1,用于地址識別。HASH0和HASH1是哈希算法的算法表接收數(shù)據(jù)幀的核心是各個(gè)狀態(tài)之間的轉(zhuǎn)換,如圖2-4所示為接收模塊狀態(tài)轉(zhuǎn)換圖。接收模塊狀態(tài)轉(zhuǎn)換圖通過狀態(tài)機(jī)得出接收邏輯輸出信號如下:判斷廣播幀:在Data0狀態(tài),當(dāng)計(jì)數(shù)器ByteCnt為1,鎖存的數(shù)據(jù)位0xff即目的地址第一字節(jié)全為1,為廣播幀,Broadcast置為1。判斷組播幀:在Data0狀態(tài),當(dāng)計(jì)數(shù)器ByteCnt為1,鎖存的數(shù)據(jù)字節(jié)最低位為1,為組播幀,Multicast置為1.設(shè)定開始接收位:Data0狀態(tài),當(dāng)計(jì)數(shù)器ByteCnt為1或允許CRC延遲,計(jì)數(shù)器DlyCrcCnt==3,經(jīng)兩次時(shí)鐘同步設(shè)置信號RxStartFrm為1。設(shè)定結(jié)束接收位:當(dāng)計(jì)數(shù)器ByteCnt大于2,若MRxDV從1變0,數(shù)據(jù)狀態(tài)或者接收的數(shù)據(jù)超過了最大幀限制狀態(tài)時(shí),出現(xiàn)這兩種情況表明接收幀結(jié)束,經(jīng)始終同步設(shè)置標(biāo)志位RxEndFrm為1。判斷接收數(shù)據(jù)有效:Data0狀態(tài),當(dāng)計(jì)數(shù)器ByteCnt不等于零表明接收數(shù)據(jù)都是有效的,標(biāo)致信號RxValid經(jīng)兩次時(shí)鐘同步置為1。四位/八位轉(zhuǎn)換:在數(shù)據(jù)狀態(tài),如果接收數(shù)據(jù)有效,將從MII接口接收到的四位nibbleMRxD[3:0]依次填入RxData[7:0]數(shù)據(jù)的高四位和第四位。目的地址識別模塊:eth_rxaddrcheck子模塊,地址識別模塊的功能是決定在接收一個(gè)數(shù)據(jù)幀的時(shí)候是否接受。MAC層的設(shè)計(jì)思路是開始接受所有的幀而后判斷接收幀的目的地址,將在該子模塊里面被檢查。幀接收需要以下一些條件:寄存器MODER里的Pro位被置位,所有的幀都被接收。如果該位被清零,那就必須檢查每個(gè)接收幀的目的地址。如果寄存器MODER里的Bro位被置位,那么所有包括廣播地址的幀將被拒絕接收,二球,此時(shí)Pro位必須清零。MAC——MAC私人地址在接收組播幀時(shí),出于安全上的考慮,除了要檢查MAC地址以外,還要采用哈希算法進(jìn)行加密和解密,主要是針對組播的情況。如前所述,無論待接收的幀的目的地址是否匹配,包接收都會先開始進(jìn)行。一旦接收到目的地址之后,就要檢查是否和之前所述的任一條件匹配。如果不匹配的話那么接收的整個(gè)包都將被拋棄,信號RxAbort被置位為1。該包也就不會寫入到內(nèi)存中,并且在接收緩沖FIFO里被擦除。CRC模塊:該模塊eth_crc通過對32位CRC的值進(jìn)行檢驗(yàn),判決接收進(jìn)來的數(shù)據(jù)包的正確性和有效性。該模塊同樣產(chǎn)生CRC校驗(yàn)值,并用于發(fā)送模塊。CRC發(fā)送和檢查的具體描述如下:在發(fā)送者發(fā)送數(shù)據(jù)之后,發(fā)送4字節(jié)該數(shù)據(jù)包的CRC,表明該數(shù)據(jù)包查過了4個(gè)字節(jié)。接收者接收該數(shù)據(jù)包(包括CRC數(shù)據(jù))并以此得出新的CRC值。如果新的CRC值不為0,表明接收到的數(shù)據(jù)和發(fā)送的數(shù)據(jù)有了差異,置信號CrcError為1。發(fā)送幀模塊發(fā)送模塊eth_txethmac負(fù)責(zé)發(fā)送數(shù)據(jù)幀。發(fā)送模塊從主機(jī)的總線接口得到需要被發(fā)送的字節(jié)形式的數(shù)據(jù)。該模塊也要接受表征開始數(shù)據(jù)幀發(fā)送的輸入信號TxStartFrm以及結(jié)束數(shù)據(jù)幀發(fā)送的信號TxEndFrm。圖2-5是發(fā)送模塊的整體框圖,圖中“計(jì)數(shù)匹配信號”表示當(dāng)計(jì)數(shù)器達(dá)到一些特定值是,將相應(yīng)特征信號觸發(fā)輸出為1。發(fā)送模塊整體框圖該模塊由下列四個(gè)子模塊組成:eth_crc——CRC模塊,產(chǎn)生32-bitCRC校驗(yàn)碼寫在數(shù)據(jù)域之后eth_random——當(dāng)碰到?jīng)_突(Collision),后退程序在執(zhí)行的時(shí)候需要產(chǎn)生隨機(jī)的延時(shí),用于CSMA/CD算法eth_txcounters——在數(shù)據(jù)幀發(fā)送的時(shí)候需要用到的些許計(jì)數(shù)器eth_txstatem——發(fā)送模塊狀態(tài)機(jī)該模塊同時(shí)設(shè)置了不同的信號組,想主機(jī)和以太網(wǎng)PHY芯片兩邊分別告知相關(guān)的發(fā)送操作狀態(tài),完成、重試、忽略、錯誤等。連接到以太網(wǎng)PHY芯片的信號、功能設(shè)計(jì)如下:MTxD[3:0],發(fā)送數(shù)據(jù),將通過PHY發(fā)送至以太網(wǎng),其輸出類型有:在狀態(tài)Data0,輸出發(fā)送數(shù)據(jù)低四位TxData[3:0],在狀態(tài)Data1,輸出發(fā)送數(shù)據(jù)高四位TxData[7:4]在狀態(tài)FCS,依次輸出校驗(yàn)碼{Crc[28],Crc[29],Crc[30],Crc[31],}在狀態(tài)Jam,輸出0x9在狀態(tài)Preamble,如果NibCnt等于15,輸出0xd,其他則輸出0x5空閑時(shí),MTxD[3:0]輸出為0MtxEn,發(fā)送使能信號。告知PHY數(shù)據(jù)MTxD有效并且發(fā)送程序馬上就要開始。在狀態(tài)Preamble、Data0、Data1、PAD、FCS、Jam下MtxEn信號均置為1輸出。發(fā)送錯誤標(biāo)志MtxErr,在信號TooBig或者信號UnderRun被觸發(fā)為1。連接到上層主機(jī)總線模塊的信號有:TxDone,發(fā)送數(shù)據(jù)包完成信號TxRetry,發(fā)送數(shù)據(jù)包重試信號TxAbort,發(fā)送數(shù)據(jù)包忽略信號除以上信號,發(fā)送模塊還輸出其他信號作為模塊控制,包括對CSMA/CD算法的調(diào)度和使用。具體輸出邏輯信號定義如下:WillTransmit,輸出至eth_rxethmac模塊,通知接收者發(fā)送者要開始發(fā)送數(shù)據(jù)了。在狀態(tài)Preamble、Data0、Data1、PAD、FCS、Jam以及開始前導(dǎo)碼的標(biāo)識StartPreamble,在時(shí)鐘同步下置為1ResetCollision,沖突reset信號。將異步的沖突檢測進(jìn)行同步,該信號用于對同步觸發(fā)器reset。在狀態(tài)Preamble、Data0、Data1、PAD、FCS幾個(gè)狀態(tài)下,該信號在時(shí)鐘同步下置為1ColWindow,沖突窗口。在該窗口內(nèi)每個(gè)沖突都被認(rèn)為是合法的沖突,數(shù)據(jù)幀將被重新發(fā)送。在沒有檢測到?jīng)_突并且ByteCnt小于有效窗口打下的情況下,若狀態(tài)處于Data1,或者FCS、PAD,則該信號清零。Reset時(shí)該信號位1RetryCnt[3:0],重試發(fā)送次數(shù)的計(jì)數(shù)器。在沖突狀態(tài)還沒有退回,計(jì)數(shù)器ByteCnt等于7且沖突窗口有效,或者執(zhí)行退回操作且計(jì)數(shù)到達(dá)隨機(jī)設(shè)定的時(shí)間,就在時(shí)鐘同步下對計(jì)數(shù)器加1Data_Crc[3:0],Enable_Crc,Initialize_Crc,用于CRC的產(chǎn)生。Data_Crc[3:0]從高到低在分別對應(yīng)發(fā)送數(shù)據(jù)nibble從低位到高位隨機(jī)數(shù)模塊:eth_random是發(fā)送模塊中的隨機(jī)函數(shù)子模塊。當(dāng)有沖突發(fā)生時(shí),所有相關(guān)的站都繼續(xù)發(fā)送一小段時(shí)間以保證讓所有的站都能發(fā)現(xiàn)沖突,這個(gè)過程稱為堵塞。發(fā)送模塊首先發(fā)送jam形式的碼0x99999999,然后停止發(fā)送數(shù)據(jù)。在重發(fā)開始之前,模塊先執(zhí)行后退操作。后退以后,站從頭開始處理并嘗試重發(fā)幀。如果幀發(fā)送遭遇沖突次數(shù)達(dá)到16,它將被丟棄。后退范圍被重置,上報(bào)此事件,而站繼續(xù)處理發(fā)送隊(duì)列中下一幀。任何傳送嘗試的后退時(shí)間都是一個(gè)隨機(jī)變量,由隨機(jī)數(shù)模塊產(chǎn)生的時(shí)間長度其實(shí)是偽隨機(jī)的,采用二進(jìn)制的指數(shù)算法,其取值范圍隨重發(fā)次數(shù)指數(shù)型增長。發(fā)送模塊狀態(tài)機(jī):eth_txstatem是發(fā)送模塊的狀態(tài)轉(zhuǎn)換子模塊,共有11個(gè)狀態(tài),如圖2-6所示。其中FullD信號表示全雙工模式,IPGT和IPGR2分別表示全雙工、雙工模式下幀間隔的最大時(shí)間。發(fā)送模塊狀態(tài)轉(zhuǎn)換圖在對系統(tǒng)復(fù)位之后,首先觸發(fā)的狀態(tài)時(shí)StateDefer。在此之后狀態(tài)機(jī)進(jìn)入幀間隔狀態(tài)StateIPGA,然后再進(jìn)入空閑狀態(tài)StateIdle。發(fā)送模塊通常從該狀態(tài)開始。當(dāng)發(fā)送者無事時(shí),狀態(tài)機(jī)就停留在idle狀態(tài)等待發(fā)送請求信號??偩€接口通過設(shè)置信號TxStartFrm觸發(fā)為1表示請求發(fā)送,該信號保持兩個(gè)時(shí)鐘周期,信號MtxEn被觸發(fā)為1,通知以太網(wǎng)PHY芯片開始發(fā)送幀。與此同時(shí)數(shù)據(jù)線MTxD[3:0]被設(shè)為前導(dǎo)碼的值0x5。在前導(dǎo)碼之后,發(fā)送數(shù)據(jù)幀間隔符0xd。然后狀態(tài)機(jī)進(jìn)入到StateData0狀態(tài),信號TxUsedData被觸發(fā)為1,通知主機(jī)總線提供下一個(gè)數(shù)據(jù)字節(jié)。8位數(shù)據(jù)的低四位被發(fā)送,然后狀態(tài)機(jī)進(jìn)入到StateData1狀態(tài),同時(shí)發(fā)送數(shù)據(jù)字節(jié)的高四位。狀態(tài)機(jī)在data0和data1之間反復(fù)切換直到數(shù)據(jù)包發(fā)送完畢。當(dāng)還有最后一個(gè)字節(jié)要發(fā)送的時(shí)候,主機(jī)總線設(shè)置TxEndFrm觸發(fā)為1。在數(shù)據(jù)發(fā)送完畢之后,發(fā)送狀態(tài)中會有如下可能性:如果發(fā)送數(shù)據(jù)的長度大于等于最小幀長MINFL,而且允許CRC校驗(yàn),那么狀態(tài)機(jī)就進(jìn)入到StateFCS,然后狀態(tài)機(jī)進(jìn)入狀態(tài)StateDefer如果發(fā)送數(shù)據(jù)的長度大于等于最小幀長MINFL,不允許進(jìn)行CRC校驗(yàn),那么狀態(tài)機(jī)就直接進(jìn)入到StateDefer狀態(tài)如果發(fā)送數(shù)據(jù)的長度小于MILFL,并且允許進(jìn)行擴(kuò)展填充碼,那么狀態(tài)機(jī)就要進(jìn)入到StatePAD,然后進(jìn)入到StateFCS狀態(tài),接著進(jìn)入到狀態(tài)StateDefer如果發(fā)送數(shù)據(jù)的長度小于MINFL,不允許進(jìn)行擴(kuò)展填充碼但允許CRC校驗(yàn),那么狀態(tài)機(jī)就進(jìn)入到StateFCS,接著進(jìn)入到狀態(tài)StateDeferMAC控制模塊控制模塊eth_maccontrol是執(zhí)行實(shí)時(shí)數(shù)據(jù)流量控制的模塊,僅工作在100Mbps速率下的全雙工模式。該模塊由下列兩個(gè)子模塊組成:eth_transmitcontrol,負(fù)責(zé)產(chǎn)生控制幀并發(fā)送eth_receivecontrol,負(fù)責(zé)發(fā)現(xiàn)、解析控制幀全雙工模式通過控制操作碼PAUSE實(shí)現(xiàn)流量控制。當(dāng)主機(jī)不能繼續(xù)接受傳送過來的數(shù)據(jù)包,接受FIFO就將要填滿,在FIFO溢出之前,上層主機(jī)發(fā)送PAUSE控制幀至數(shù)據(jù)發(fā)送者,該控制幀請求發(fā)送者停止發(fā)送數(shù)據(jù)一段特定時(shí)間。發(fā)送流量控制在子模塊eth_transmitcontrol完成。當(dāng)MAC接收到了一個(gè)PAUSE控制幀,就依照接收到的PAUSE時(shí)間長度值啟動PAUSE計(jì)時(shí)器。每經(jīng)過1個(gè)時(shí)隙計(jì)時(shí)器減1。當(dāng)計(jì)時(shí)器減至0,MAC發(fā)送模塊重新開始發(fā)送。由子模塊eth_receivecontrol完成。當(dāng)控制幀被發(fā)送時(shí),填充碼padding和CRC將自動產(chǎn)生。圖2-7是MAC控制模塊的整體框圖,發(fā)送MAC幀模塊產(chǎn)生控制幀,控制主模塊通過信號CtrlMux來判決是發(fā)送控制幀還是直接發(fā)送從主機(jī)過來的數(shù)據(jù)幀到發(fā)送模塊。在發(fā)送時(shí)如果沒有收到PAUSE幀,則MAC控制模塊部產(chǎn)生任何影響。MAC控制模塊框圖MII模塊eth_mii模塊是一個(gè)提供MAC層和外部以太網(wǎng)PHY芯片相連接的接口。從功能上看它可以分為兩個(gè)部分:一個(gè)是和物理層PCS子層相連接的接口信號eth_mii模塊;另一個(gè)是MII管理模塊eth_miim,主要功能室設(shè)置和讀寫物理層PHY,進(jìn)行寄存器的配置設(shè)定或從中讀取數(shù)據(jù)。MII模塊整體框圖HDL代碼闡述頂層模塊:`include"eth_defines.v"`include"timescale.v"moduleeth_top(//WISHBONEcommonwb_clk_i,wb_rst_i,wb_dat_i,wb_dat_o,//WISHBONEslavewb_adr_i,wb_sel_i,wb_we_i,wb_cyc_i,wb_stb_i,wb_ack_o,wb_err_o,//WISHBONEmasterm_wb_adr_o,m_wb_sel_o,m_wb_we_o,m_wb_dat_o,m_wb_dat_i,m_wb_cyc_o,m_wb_stb_o,m_wb_ack_i,m_wb_err_i,`ifdefETH_WISHBONE_B3m_wb_cti_o,m_wb_bte_o,`endif//TXmtx_clk_pad_i,mtxd_pad_o,mtxen_pad_o,mtxerr_pad_o,//RXmrx_clk_pad_i,mrxd_pad_i,mrxdv_pad_i,mrxerr_pad_i,mcoll_pad_i,mcrs_pad_i,//MIIMmdc_pad_o,md_pad_i,md_pad_o,md_padoe_o,int_o//Bist`ifdefETH_BIST//debugchainsignalsscanb_rst,//bistscanresetscanb_clk,//bistscanclockscanb_si,//bistscanserialinscanb_so,//bistscanserialoutscanb_en//bistscanshiftenable`endif);parameterTp=1;//WISHBONEcommoninputwb_clk_i;//WISHBONEclockinputwb_rst_i;//WISHBONEresetinput[31:0]wb_dat_i;//WISHBONEdatainputoutput[31:0]wb_dat_o;//WISHBONEdataoutputoutputwb_err_o;//WISHBONEerroroutput//WISHBONEslaveinput[11:2]wb_adr_i;//WISHBONEaddressinputinput[3:0]wb_sel_i;//WISHBONEbyteselectinputinputwb_we_i;//WISHBONEwriteenableinputinputwb_cyc_i;//WISHBONEcycleinputinputwb_stb_i;//WISHBONEstrobeinputoutputwb_ack_o;//WISHBONEacknowledgeoutput//WISHBONEmasteroutput[31:0]m_wb_adr_o;output[3:0]m_wb_sel_o;outputm_wb_we_o;input[31:0]m_wb_dat_i;output[31:0]m_wb_dat_o;outputm_wb_cyc_o;outputm_wb_stb_o;inputm_wb_ack_i;inputm_wb_err_i;`ifdefETH_WISHBONE_B3output[2:0]m_wb_cti_o;//CycleTypeIdentifieroutput[1:0]m_wb_bte_o;//BurstTypeExtension`endif//Txinputmtx_clk_pad_i;//Transmitclock(fromPHY)output[3:0]mtxd_pad_o;//Transmitnibble(toPHY)outputmtxen_pad_o;//Transmitenable(toPHY)outputmtxerr_pad_o;//Transmiterror(toPHY)//Rxinputmrx_clk_pad_i;//Receiveclock(fromPHY)input[3:0]mrxd_pad_i;//Receivenibble(fromPHY)inputmrxdv_pad_i;//Receivedatavalid(fromPHY)inputmrxerr_pad_i;//Receivedataerror(fromPHY)//CommonTxandRxinputmcoll_pad_i;//Collision(fromPHY)inputmcrs_pad_i;//Carriersense(fromPHY)//MIIManagementinterfaceinputmd_pad_i;//MIIdatainput(fromI/Ocell)outputmdc_pad_o;//MIIManagementdataclock(toPHY)outputmd_pad_o;//MIIdataoutput(toI/Ocell)outputmd_padoe_o;//MIIdataoutputenable(toI/Ocell)outputint_o;//Interruptoutput//Bist`ifdefETH_BISTinputscanb_rst;//bistscanresetinputscanb_clk;//bistscanclockinputscanb_si;//bistscanserialinoutputscanb_so;//bistscanserialoutinputscanb_en;//bistscanshiftenable`endifwire[7:0]r_ClkDiv;wirer_MiiNoPre;wire[15:0]r_CtrlData;wire[4:0]r_FIAD;wire[4:0]r_RGAD;wirer_WCtrlData;wirer_RStat;wirer_ScanStat;wireNValid_stat;wireBusy_stat;wireLinkFail;wire[15:0]Prsd;//ReadStatusData(datareadfromthePHY)wireWCtrlDataStart;wireRStatStart;wireUpdateMIIRX_DATAReg;wireTxStartFrm;wireTxEndFrm;wireTxUsedData;wire[7:0]TxData;wireTxRetry;wireTxAbort;wireTxUnderRun;wireTxDone;wire[5:0]CollValid;regWillSendControlFrame_sync1;regWillSendControlFrame_sync2;regWillSendControlFrame_sync3;regRstTxPauseRq;regTxPauseRq_sync1;regTxPauseRq_sync2;regTxPauseRq_sync3;regTPauseRq;//ConnectingMiimmoduleeth_miimmiim1(.Clk(wb_clk_i),.Reset(wb_rst_i),.Divider(r_ClkDiv),.NoPre(r_MiiNoPre),.CtrlData(r_CtrlData),.Rgad(r_RGAD),.Fiad(r_FIAD),.WCtrlData(r_WCtrlData),.RStat(r_RStat),.ScanStat(r_ScanStat),.Mdi(md_pad_i),.Mdo(md_pad_o),.MdoEn(md_padoe_o),.Mdc(mdc_pad_o),.Busy(Busy_stat),.Prsd(Prsd),.LinkFail(LinkFail),.Nvalid(NValid_stat),.WCtrlDataStart(WCtrlDataStart),.RStatStart(RStatStart),.UpdateMIIRX_DATAReg(UpdateMIIRX_DATAReg));wireRegCs;//Connectedtoregisterswire[31:0]RegDataOut;//Multiplexedtowb_dat_owirer_RecSmall;//Receivesmallframeswirer_LoopBck;//Loopbackwirer_TxEn;//TxEnablewirer_RxEn;//RxEnablewireMRxDV_Lb;//MuxedMIIreceivedatavalidwireMRxErr_Lb;//MuxedMIIReceiveErrorwire[3:0]MRxD_Lb;//MuxedMIIReceiveDatawireTransmitting;//IndicationthatTxEthMACistransmittingwirer_HugEn;//Hugepacketenablewirer_DlyCrcEn;//DelayedCRCenabledwire[15:0]r_MaxFL;//Maximumframelengthwire[15:0]r_MinFL;//MinimumframelengthwireShortFrame;wireDribbleNibble;//ExtranibblereceivedwireReceivedPacketTooBig;//Receivedpacketistoobigwire[47:0]r_MAC;//MACaddresswireLoadRxStatus;//Rxstatuswasloadedwire[31:0]r_HASH0;//HASHtable,lower4byteswire[31:0]r_HASH1;//HASHtable,upper4byteswire[7:0]r_TxBDNum;//Receivebufferdescriptornumberwire[6:0]r_IPGT;//wire[6:0]r_IPGR1;//wire[6:0]r_IPGR2;//wire[5:0]r_CollValid;//wire[15:0]r_TxPauseTV;//TransmitPAUSEvaluewirer_TxPauseRq;//TransmitPAUSErequestwire[3:0]r_MaxRet;//wirer_NoBckof;//wirer_ExDfrEn;//wireTX_BD_NUM_Wr;//WriteenablethatwritesRX_BD_NUMtotheregisters.wirer_TxFlow;//Txflowcontrolenablewirer_IFG;//MinimuminterframegapforincomingpacketswireTxB_IRQ;//InterruptTxBufferwireTxE_IRQ;//InterruptTxErrorwireRxB_IRQ;//InterruptRxBufferwireRxE_IRQ;//InterruptRxErrorwireBusy_IRQ;//InterruptBusy(lackofbuffers)wireDWord;wireBDAck;wire[31:0]BD_WB_DAT_O;//wb_dat_othatcomesfromtheWishbonemodule(forbufferdescriptorsread/write)wireBDCs;//BufferdescriptorCSwireCsMiss;//Whenaccesstotheaddressbetween0x800and0xfffoccurs,acknowledgeisset//butdataisnotvalid.wiretemp_wb_ack_o;wire[31:0]temp_wb_dat_o;wiretemp_wb_err_o;`ifdefETH_REGISTERED_OUTPUTSregtemp_wb_ack_o_reg;reg[31:0]temp_wb_dat_o_reg;regtemp_wb_err_o_reg;`endifassignDWord=&wb_sel_i;assignRegCs=wb_stb_i&wb_cyc_i&DWord&~wb_adr_i[11]&~wb_adr_i[10];//0x0-0x3FFassignBDCs=wb_stb_i&wb_cyc_i&DWord&~wb_adr_i[11]&wb_adr_i[10];//0x400-0x7FFassignCsMiss=wb_stb_i&wb_cyc_i&DWord&wb_adr_i[11];//0x800-0xfFFassigntemp_wb_ack_o=RegCs|BDAck;assigntemp_wb_dat_o=(RegCs&~wb_we_i)?RegDataOut:BD_WB_DAT_O;assigntemp_wb_err_o=wb_stb_i&wb_cyc_i&(~DWord|CsMiss);`ifdefETH_REGISTERED_OUTPUTSassignwb_ack_o=temp_wb_ack_o_reg;assignwb_dat_o[31:0]=temp_wb_dat_o_reg;assignwb_err_o=temp_wb_err_o_reg;`elseassignwb_ack_o=temp_wb_ack_o;assignwb_dat_o[31:0]=temp_wb_dat_o;assignwb_err_o=temp_wb_err_o;`endif`ifdefETH_REGISTERED_OUTPUTSalways@(posedgewb_clk_iorposedgewb_rst_i)beginif(wb_rst_i)begintemp_wb_ack_o_reg<=#Tp1'b0;temp_wb_dat_o_reg<=#Tp32'h0;temp_wb_err_o_reg<=#Tp1'b0;endelsebegintemp_wb_ack_o_reg<=#Tptemp_wb_ack_o&~temp_wb_ack_o_reg;temp_wb_dat_o_reg<=#Tptemp_wb_dat_o;temp_wb_err_o_reg<=#Tptemp_wb_err_o&~temp_wb_err_o_reg;endend`endif//ConnectingEthernetregisterseth_registersethreg1(.DataIn(wb_dat_i),.Address(wb_adr_i[9:2]),.Rw(wb_we_i),.Cs(RegCs),.Clk(wb_clk_i),.Reset(wb_rst_i),.DataOut(RegDataOut),.r_RecSmall(r_RecSmall),.r_Pad(r_Pad),.r_HugEn(r_HugEn),.r_CrcEn(r_CrcEn),.r_DlyCrcEn(r_DlyCrcEn),.r_FullD(r_FullD),.r_ExDfrEn(r_ExDfrEn),.r_NoBckof(r_NoBckof),.r_LoopBck(r_LoopBck),.r_IFG(r_IFG),.r_Pro(r_Pro),.r_Iam(),.r_Bro(r_Bro),.r_NoPre(r_NoPre),.r_TxEn(r_TxEn),.r_RxEn(r_RxEn),.Busy_IRQ(Busy_IRQ),.RxE_IRQ(RxE_IRQ),.RxB_IRQ(RxB_IRQ),.TxE_IRQ(TxE_IRQ),.TxB_IRQ(TxB_IRQ),.r_IPGT(r_IPGT),.r_IPGR1(r_IPGR1),.r_IPGR2(r_IPGR2),.r_MinFL(r_MinFL),.r_MaxFL(r_MaxFL),.r_MaxRet(r_MaxRet),.r_CollValid(r_CollValid),.r_TxFlow(r_TxFlow),.r_RxFlow(r_RxFlow),.r_PassAll(r_PassAll),.r_MiiNoPre(r_MiiNoPre),.r_ClkDiv(r_ClkDiv),.r_WCtrlData(r_WCtrlData),.r_RStat(r_RStat),.r_ScanStat(r_ScanStat),.r_RGAD(r_RGAD),.r_FIAD(r_FIAD),.r_CtrlData(r_CtrlData),.NValid_stat(NValid_stat),.Busy_stat(Busy_stat),.LinkFail(LinkFail),.r_MAC(r_MAC),.WCtrlDataStart(WCtrlDataStart),.RStatStart(RStatStart),.UpdateMIIRX_DATAReg(UpdateMIIRX_DATAReg),.Prsd(Prsd),.r_TxBDNum(r_TxBDNum),.TX_BD_NUM_Wr(TX_BD_NUM_Wr),.int_o(int_o),.r_HASH0(r_HASH0),.r_HASH1(r_HASH1),.r_TxPauseRq(r_TxPauseRq),.r_TxPauseTV(r_TxPauseTV),.RstTxPauseRq(RstTxPauseRq),.TxCtrlEndFrm(TxCtrlEndFrm),.StartTxDone(StartTxDone),.TxClk(mtx_clk_pad_i),.RxClk(mrx_clk_pad_i),.SetPauseTimer(SetPauseTimer));wire[7:0]RxData;wireRxValid;wireRxStartFrm;wireRxEndFrm;wireRxAbort;wireWillTransmit;//Willtransmit(toRxEthMAC)wireResetCollision;//ResetCollision(forsynchronizingcollision)wire[7:0]TxDataOut;//TransmitPacketData(toTxEthMAC)wireWillSendControlFrame;wireReceiveEnd;wireReceivedPacketGood;wireReceivedLengthOK;wireInvalidSymbol;wireLatchedCrcError;wireRxLateCollision;wire[3:0]RetryCntLatched;wire[3:0]RetryCnt;wireStartTxAbort;wireMaxCollisionOccured;wireRetryLimit;wireStatePreamble;wire[1:0]StateData;//ConnectingMACControleth_maccontrolmaccontrol1(.MTxClk(mtx_clk_pad_i),.TPauseRq(TPauseRq),.TxPauseTV(r_TxPauseTV),.TxDataIn(TxData),.TxStartFrmIn(TxStartFrm),.TxEndFrmIn(TxEndFrm),.TxUsedDataIn(TxUsedDataIn),.TxDoneIn(TxDoneIn),.TxAbortIn(TxAbortIn),.MRxClk(mrx_clk_pad_i),.RxData(RxData),.RxValid(RxValid),.RxStartFrm(RxStartFrm),.RxEndFrm(RxEndFrm),.ReceiveEnd(ReceiveEnd),.ReceivedPacketGood(ReceivedPacketGood),.TxFlow(r_TxFlow),.RxFlow(r_RxFlow),.DlyCrcEn(r_DlyCrcEn),.MAC(r_MAC),.PadIn(r_Pad|PerPacketPad),.PadOut(PadOut),.CrcEnIn(r_CrcEn|PerPacketCrcEn),.CrcEnOut(CrcEnOut),.TxReset(wb_rst_i),.RxReset(wb_rst_i),.ReceivedLengthOK(ReceivedLengthOK),.TxDataOut(TxDataOut),.TxStartFrmOut(TxStartFrmOut),.TxEndFrmOut(TxEndFrmOut),.TxUsedDataOut(TxUsedData),.TxDoneOut(TxDone),.TxAbortOut(TxAbort),.WillSendControlFrame(WillSendControlFrame),.TxCtrlEndFrm(TxCtrlEndFrm),.ReceivedPauseFrm(ReceivedPauseFrm),.ControlFrmAddressOK(ControlFrmAddressOK),.SetPauseTimer(SetPauseTimer),.RxStatusWriteLatched_sync2(RxStatusWriteLatched_sync2),.r_PassAll(r_PassAll));wireTxCarrierSense;//SynchronizedCarrierSense(toTxclock)wireCollision;//SynchronizedCollisionregCarrierSense_Tx1;regCarrierSense_Tx2;regCollision_Tx1;regCollision_Tx2;regRxEnSync;//SynchronizedReceiveEnableregCarrierSense_Rx1;regRxCarrierSense;//SynchronizedCarrierSense(toRxclock)regWillTransmit_q;regWillTransmit_q2;//MuxedMIIreceivedatavalidassignMRxDV_Lb=r_LoopBck?mtxen_pad_o:mrxdv_pad_i&RxEnSync;//MuxedMIIReceiveErrorassignMRxErr_Lb=r_LoopBck?mtxerr_pad_o:mrxerr_pad_i&RxEnSync;//MuxedMIIReceiveDataassignMRxD_Lb[3:0]=r_LoopBck?mtxd_pad_o[3:0]:mrxd_pad_i[3:0];//ConnectingTxEthMACeth_txethmactxethmac1(.MTxClk(mtx_clk_pad_i),.Reset(wb_rst_i),.CarrierSense(TxCarrierSense),.Collision(Collision),.TxData(TxDataOut),.TxStartFrm(TxStartFrmOut),.TxUnderRun(TxUnderRun),.TxEndFrm(TxEndFrmOut),.Pad(PadOut),.MinFL(r_MinFL),.CrcEn(CrcEnOut),.FullD(r_FullD),.HugEn(r_HugEn),.DlyCrcEn(r_DlyCrcEn),.IPGT(r_IPGT),.IPGR1(r_IPGR1),.IPGR2(r_IPGR2),.CollValid(r_CollValid),.MaxRet(r_MaxRet),.NoBckof(r_NoBckof),.ExDfrEn(r_ExDfrEn),.MaxFL(r_MaxFL),.MTxEn(mtxen_pad_o),.MTxD(mtxd_pad_o),.MTxErr(mtxerr_pad_o),.TxUsedData(TxUsedDataIn),.TxDone(TxDoneIn),.TxRetry(TxRetry),.TxAbort(TxAbortIn),.WillTransmit(WillTransmit),.ResetCollision(ResetCollision),.RetryCnt(RetryCnt),.StartTxDone(StartTxDone),.StartTxAbort(StartTxAbort),.MaxCollisionOccured(MaxCollisionOccured),.LateCollision(LateCollision),.DeferIndication(DeferIndication),.StatePreamble(StatePreamble),.StateData(StateData));wire[15:0]RxByteCnt;wireRxByteCntEq0;wireRxByteCntGreat2;wireRxByteCntMaxFrame;wireRxCrcError;wireRxStateIdle;wireRxStatePreamble;wireRxStateSFD;wire[1:0]RxStateData;wireAddressMiss;//ConnectingRxEthMACeth_rxethmacrxethmac1(.MRxClk(mrx_clk_pad_i),.MRxDV(MRxDV_Lb),.MRxD(MRxD_Lb),.Transmitting(Transmitting),.HugEn(r_HugEn),.DlyCrcEn(r_DlyCrcEn),.MaxFL(r_MaxFL),.r_IFG(r_IFG),.Reset(wb_rst_i),.RxData(RxData),.RxValid(RxValid),.RxStartFrm(RxStartFrm),.RxEndFrm(RxEndFrm),.ByteCnt(RxByteCnt),.ByteCntEq0(RxByteCntEq0),.ByteCntGreat2(RxByteCntGreat2),.ByteCntMaxFrame(RxByteCntMaxFrame),.CrcError(RxCrcError),.StateIdle(RxStateIdle),.StatePreamble(RxStatePreamble),.StateSFD(RxStateSFD),.StateData(RxStateData),.MAC(r_MAC),.r_Pro(r_Pro),.r_Bro(r_Bro),.r_HASH0(r_HASH0),.r_HASH1(r_HASH1),.RxAbort(RxAbort),.AddressMiss(AddressMiss),.PassAll(r_PassAll),.ControlFrmAddressOK(ControlFrmAddressOK));//MIICarrierSenseSynchronizationalways@(posedgemtx_clk_pad_iorposedgewb_rst_i)beginif(wb_rst_i)beginCarrierSense_Tx1<=#Tp1'b0;CarrierSense_Tx2<=#Tp1'b0;endelsebeginCarrierSense_Tx1<=#Tpmcrs_pad_i;CarrierSense_Tx2<=#TpCarrierSense_Tx1;endendassignTxCarrierSense=~r_FullD&CarrierSense_Tx2;//MIICollisionSynchronizationalways@(posedgemtx_clk_pad_iorposedgewb_rst_i)beginif(wb_rst_i)beginCollision_Tx1<=#Tp1'b0;Collision_Tx2<=#Tp1'b0;endelsebeginCollision_Tx1<=#Tpmcoll_pad_i;if(ResetCollision)Collision_Tx2<=#Tp1'b0;elseif(Collision_Tx1)Collision_Tx2<=#Tp1'b1;endend//SynchronizedCollisionassignCollision=~r_FullD&Collision_Tx2;//Carriersenseissynchronizedtoreceiveclock.always@(posedgemrx_clk_pad_iorposedgewb_rst_i)beginif(wb_rst_i)beginCarrierSense_Rx1<=#Tp1'h0;RxCarrierSense<=#Tp1'h0;endelsebeginCarrierSense_Rx1<=#Tpmcrs_pad_i;RxCarrierSense<=#TpCarrierSense_Rx1;endend//DelayedWillTransmitalways@(posedgemrx_clk_pad_i)beginWillTransmit_q<=#TpWillTransmit;WillTransmit_q2<=#TpWillTransmit_q;endassignTransmitting=~r_FullD&WillTransmit_q2;//SynchronizedReceiveEnablealways@(posedgemrx_clk_pad_iorposedgewb_rst_i)beginif(wb_rst_i)RxEnSync<=#Tp1'b0;elseif(~RxCarrierSense|RxCarrierSense&Transmitting)RxEnSync<=#Tpr_RxEn;end//SynchronizingWillSendControlFrametoWB_CLK;always@(posedgewb_clk_iorposedgewb_rst_i)beginif(wb_rst_i)WillSendControlFrame_sync1<=1'b0;elseWillSendControlFrame_sync1<=#TpWillSendControlFrame;endalways@(posedgewb_clk_iorposedgewb_rst_i)beginif(wb_rst_i)WillSendControlFrame_sync2<=1'b0;elseWillSendControlFrame_sync2<=#TpWillSendControlFrame_sync1;endalw

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論