日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > ZYNQ
		


一、前言

本文設(shè)計(jì)思想采用明德?lián)P至簡(jiǎn)設(shè)計(jì)法。以太網(wǎng)這一高效實(shí)用的數(shù)據(jù)傳輸方式應(yīng)用于各個(gè)領(lǐng)域,如網(wǎng)絡(luò)交換設(shè)備,高速網(wǎng)絡(luò)相機(jī)等。雖然各FPGA廠商都提供MAC IP核,但大多收費(fèi),有時(shí)無(wú)法破解。不同廠家之間無(wú)法移植,而且為了通用性考慮犧牲了效率,因此自己動(dòng)手寫(xiě)一個(gè)以太網(wǎng)MAC是個(gè)不錯(cuò)的選擇。

本博文討論通過(guò)MDIO接口管理PHY芯片來(lái)驗(yàn)證其正確工作,為在此基礎(chǔ)上設(shè)計(jì)MAC邏輯開(kāi)個(gè)頭。PHY芯片采用RTL8211EGVB,選用GMII接口與MAC連接。下面我們來(lái)開(kāi)始第一步,在此之前明確設(shè)計(jì)目的:檢測(cè)PHY芯片是否完成自動(dòng)協(xié)商 鏈路速率是否達(dá)到1000M。所以要從datasheet中了解到芯片引腳 寄存器地址 接口時(shí)序。

二、設(shè)計(jì)分析

管理幀格式如下:

讀寫(xiě)操作時(shí)序:

MDC為MAC驅(qū)動(dòng)時(shí)鐘信號(hào),MDIO是串行數(shù)據(jù)總線,需要連接上拉電阻保證idle狀態(tài)下高電平。其中前導(dǎo)碼包含32個(gè)比特“1”,PHY地址根據(jù)芯片引腳連接而定,此處為01.turn around域是為了防止讀操作時(shí)數(shù)據(jù)沖突,在讀操作過(guò)程中MAC和PHY均在第1比特處進(jìn)入高阻態(tài),PHY在第2比特處驅(qū)動(dòng)MDIO接口為低電平以占據(jù)總線控制權(quán)。注意兩點(diǎn):第一如果時(shí)鐘信號(hào)在讀寫(xiě)操作后停止,時(shí)鐘必須保證至少7個(gè)時(shí)鐘周期持續(xù)翻轉(zhuǎn)且MDIO高電平從而保證之前的操作完成。故在設(shè)計(jì)中可以等待一段時(shí)間后再拉低時(shí)鐘使能信號(hào)。第二兩個(gè)操作之間至少一個(gè)idle比特。

正確驅(qū)動(dòng)接口時(shí)序需要關(guān)注AC characterisics.

很明顯MAC驅(qū)動(dòng)總線時(shí),在MDC下降沿更新數(shù)據(jù)。而PHY驅(qū)動(dòng)總線時(shí),MDC上升沿后更新數(shù)據(jù)。根據(jù)datasheet中的timing參數(shù)設(shè)定MDC時(shí)鐘周期是800ns,MAC接收PHY數(shù)據(jù)時(shí)下降沿采樣。

接下來(lái)關(guān)注要訪問(wèn)的內(nèi)部寄存器地址,首先讀取PHY寄存器數(shù)據(jù)以檢測(cè)其工作狀態(tài),若發(fā)現(xiàn)異常再考慮寫(xiě)入數(shù)據(jù)。這里讀取基本模式狀態(tài)寄存器0X01的bit5,若為1說(shuō)明自動(dòng)協(xié)商完成。第二個(gè)寄存器是PHY特定狀態(tài)寄存器0X11中的[15:14]和13,分別是當(dāng)前速率和全/半雙工通信模式。若檢測(cè)到自動(dòng)協(xié)商完成,且工作在1000M全雙工模式下,說(shuō)明工作正確。

三、硬件架構(gòu)與狀態(tài)機(jī)設(shè)計(jì)

所有準(zhǔn)備工作完成,現(xiàn)在開(kāi)始設(shè)計(jì)。按照“自頂向下”設(shè)計(jì)原則,規(guī)劃好整體結(jié)構(gòu)和模塊間接口,再設(shè)計(jì)內(nèi)部狀態(tài)機(jī)一步步實(shí)現(xiàn)邏輯功能。

Mdio_ctrl模塊負(fù)責(zé)完成PHY芯片的配置與檢測(cè)邏輯,Mdio接口模塊完成讀寫(xiě)操作時(shí)序。此處僅通過(guò)讀操作簡(jiǎn)單檢測(cè)PHY狀態(tài),暫不進(jìn)行配置,故兩模塊工作狀態(tài)跳轉(zhuǎn)如圖所示:

剩下的工作就是把兩個(gè)狀態(tài)機(jī)實(shí)現(xiàn)出來(lái),非常簡(jiǎn)單。有需要的朋友可以參考一下,關(guān)于芯片的具體參數(shù)詳見(jiàn):Realtek RTL8211E(G)-VB(VL)-CG Datasheet 1.8.上代碼!

四、代碼編寫(xiě)

MDIO控制模塊:

MDIO時(shí)序接口模塊:

頂層封裝:

五、功能仿真

之后編寫(xiě)testbench進(jìn)行行為仿真:

1 `timescale 1 ns/1 ps 2  3 `define BIT_CNT uut.mdio_interface.bit_cnt 4  5 module phy_manage_tb(); 6  7 //時(shí)鐘和復(fù)位 8 reg clk  ; 9 reg rst_n; 10  11 //uut的輸入信號(hào) 12 reg mdio_en; 13  14 //uut的輸出信號(hào) 15 wire link_up; 16 wire chk_done; 17 wire mdc; 18 wire mdio; 19 wire [16-1:0] back_data1,back_data2; 20  21 //時(shí)鐘周期,單位為ns,可在此修改時(shí)鐘周期。 22 parameter CYCLE    = 10; 23  24 //復(fù)位時(shí)間,此時(shí)表示復(fù)位3個(gè)時(shí)鐘周期的時(shí)間。 25 parameter RST_TIME = 2 ; 26  27 defparam uut.mdio_ctrl.MS_CYC = 100; 28  29 //待測(cè)試的模塊例化 30 phy_manage uut( 31 .clk       (clk) , 32 .rst_n     (rst_n) , 33  34 .mdio_en   (mdio_en) , 35 .link_up   (link_up) , 36 .chk_done  (chk_done) , 37  38 .mdc       (mdc) , 39 .mdio      (mdio)  40 ); 41  42  43 //生成本地時(shí)鐘50M 44 initial begin 45 clk = 1; 46 forever 47 #(CYCLE/2) 48 clk=~clk; 49 end 50  51 //產(chǎn)生復(fù)位信號(hào) 52 initial begin 53 rst_n = 1; 54 #1; 55 rst_n = 0; 56 #(CYCLE*RST_TIME); 57 rst_n = 1; 58 end 59  60 //輸入信號(hào)din0賦值方式 61 initial begin 62 #1; 63 //賦初值 64 mdio_en = 0; 65 #(10*CYCLE); 66 mdio_en = 1; 67 #(1*CYCLE); 68 mdio_en = 0; 69 //開(kāi)始賦值 70 #100_000; 71 $stop; 72 end 73  74 //模擬PHY響應(yīng) 75  76 //data 77 assign back_data1 = {16'b0000_0000_0010_0000}; 78 assign back_data2 = {16'b1010_0000_0000_0000}; 79  80 integer i = 0,j = 0; 81 initial begin 82 forever begin 83 wait(uut.mdio_interface.state_c == 1 && `BIT_CNT == 47 ); 84 @(posedge mdc); 85 force mdio = 0; 86 @(posedge mdc); 87 j = j+1; 88 if(j == 1) 89 force mdio = back_data1[16-1-i+1]; 90 else 91 force mdio = back_data2[16-1-i+1]; 92  93 wait(uut.mdio_interface.state_c == 0); 94 @(posedge mdc); 95 release mdio; 96 end 97 end 98  99 initial begin100 forever begin101 @(posedge mdc);102 if(uut.mdio_interface.state_c == 2)begin103 #10;104 i = i+1;105 end106 else 107 i = 0;108 end109 end110 111 112 endmodule phy_manage_tb

testbench中利用force強(qiáng)迫更新mdio雙向端口方式模擬PHY芯片響應(yīng)。仿真波形上半部分為MDIO控制模塊信號(hào),下半部分則是MDIO時(shí)序接口模塊信號(hào)??梢?jiàn)當(dāng)讀取寄存器數(shù)值滿足PHY工作需求時(shí),link_up信號(hào)拉高,證明此時(shí)MAC可以傳輸數(shù)據(jù)給PHY。

六、板級(jí)調(diào)試

完整的設(shè)計(jì),板級(jí)調(diào)試是必不可少的。真正地將接口調(diào)通,PHY芯片正確響應(yīng)才能說(shuō)明達(dá)到設(shè)計(jì)目的。頂層封裝測(cè)試工程,內(nèi)部例化:差分時(shí)鐘緩沖原語(yǔ)、PLL、PHY管理頂層封裝以及VIO ILA調(diào)試IP。我們來(lái)看下原理圖頂層:

測(cè)試工程頂層:

mdio_test

時(shí)鐘引腳約束文件:

clk_pin

有一點(diǎn)相信調(diào)試過(guò)以太網(wǎng)的人大多都跳過(guò)一個(gè)坑:沒(méi)有驅(qū)動(dòng)PHY的復(fù)位輸入信號(hào)。本人也在此處栽過(guò)跟頭,這里直接連續(xù)賦值拉高PHY芯片復(fù)位信號(hào)。關(guān)于板級(jí)調(diào)試還有個(gè)小技巧,根據(jù)高亞軍老師的書(shū)籍得知,將set up debug生成的ILA探針相關(guān)約束命令單獨(dú)放入一個(gè)約束文件便于調(diào)試IP的管理和修改,debug約束文件就不貼出來(lái)了。

查看debug波形,MDIO時(shí)序接口模塊在釋放MDIO串行總線時(shí),由于存在上拉電阻為高電平,下一個(gè)MDC時(shí)鐘上升沿時(shí)刻,PHY拉低MDIO信號(hào)響應(yīng)并得到總線控制權(quán),開(kāi)始輸出數(shù)據(jù)。

得到讀取的兩個(gè)寄存器數(shù)據(jù),根據(jù)數(shù)值分析滿足:PHY自動(dòng)協(xié)商完成,且工作在全雙工1000Mbps速率下。

最終RJ45接口綠色指示燈常亮,表明自動(dòng)協(xié)商完成,網(wǎng)絡(luò)連接正確。到此簡(jiǎn)易的PHY芯片檢測(cè)管理模塊設(shè)計(jì)完成。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉