RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

通過MDIO接口管理PHY芯片的驗證設(shè)計方案

電子設(shè)計 ? 來源:CSDN 博主 ? 作者:沒落騎士 ? 2020-12-29 14:17 ? 次閱讀

作者:沒落騎士

一、前言

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

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

二、設(shè)計分析

管理幀格式如下:

pIYBAF9uJGqACwMAAACSYAVCGb4696.png

讀寫操作時序:

pIYBAF9uJGyALZKxAAEE7tAwkg4900.jpg

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

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

pIYBAF9uJG6AcesnAACVxy3jJus811.jpg

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

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

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

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

o4YBAF9uJG-AZFSGAABz9_IsX0I507.png

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

o4YBAF9uJHGAUMFwAAEZh510o9o357.png

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

四、代碼編寫

MDIO控制模塊:
`timescale 1ns / 1ps

module mdio_ctrl(
input clk,//100M
input rst_n,

input en,
output reg chk_result =0,
output reg chk_vld =0,

input rdy,
output reg rd_en =0,
output reg [5-1:0] phy_addr =0,
output reg [5-1:0] reg_addr =0,
input [16-1:0] rd_data,
input rd_vld
);

parameter MS_CYC = 100_000;

localparam IDLE = 0 ;
localparam WAIT = 1 ;
localparam RD_PHY = 2 ;
localparam CHECK = 3 ;

localparam WAIT_MS = 10;

localparam BMSR = 5'h01,
PHYSR = 5'h11;

reg [4-1:0] state_c = 0,state_n = 0;
wire idle2wait,wait2rd_phy,rd_phy2check,check2idle,check2wait;
wire link_up;
reg [16-1:0] rd_memory [0:1];
reg [ (17-1):0] ms_cnt =0 ;
wire add_ms_cnt ;
wire end_ms_cnt ;
reg [ (4-1):0] wait_cnt =0 ;
wire add_wait_cnt ;
wire end_wait_cnt ;
reg [ (2-1):0] rd_cnt =0 ;
wire add_rd_cnt ;
wire end_rd_cnt ;
reg [ (2-1):0] rdata_cnt =0 ;
wire add_rdata_cnt ;
wire end_rdata_cnt ;
wire [5*2-1:0] registers;
reg rd_finish = 0;

initial begin
rd_memory[0] = 0;
rd_memory[1] = 0;
end

always @(posedge clk or negedge rst_n) begin
if (rst_n==0) begin
state_c end
else begin
state_c end
end

always @(*) begin
case(state_c)
IDLE :begin
if(idle2wait)
state_n = WAIT ;
else
state_n = state_c ;
end
WAIT :begin
if(wait2rd_phy)
state_n = RD_PHY ;
else
state_n = state_c ;
end
RD_PHY :begin
if(rd_phy2check)
state_n = CHECK ;
else
state_n = state_c ;
end
CHECK :begin
if(check2idle)
state_n = IDLE ;
else if(check2wait)
state_n = WAIT ;
else
state_n = state_c ;
end
default : state_n = IDLE ;
endcase
end

assign idle2wait = state_c==IDLE && (en);
assign wait2rd_phy = state_c==WAIT && (end_wait_cnt);
assign rd_phy2check = state_c==RD_PHY && (end_rdata_cnt);
assign check2idle = state_c==CHECK && (link_up);
assign check2wait = state_c==CHECK && (!link_up);

assign link_up = rd_memory[0][5] == 1'b1 && rd_memory[1][15:13] == 3'b10_1;//auto_nego && gigabit && full_duplex

//計數(shù)器
always @(posedge clk or negedge rst_n) begin
if (rst_n==0) begin
ms_cnt end
else if(add_ms_cnt) begin
if(end_ms_cnt)
ms_cnt else
ms_cnt end
end
assign add_ms_cnt = (state_c == WAIT);
assign end_ms_cnt = add_ms_cnt && ms_cnt == (MS_CYC)-1 ;//100MHZ時鐘100_000

always @(posedge clk or negedge rst_n) begin
if (rst_n==0) begin
wait_cnt end
else if(add_wait_cnt) begin
if(end_wait_cnt)
wait_cnt else
wait_cnt end
end
assign add_wait_cnt = (end_ms_cnt);
assign end_wait_cnt = add_wait_cnt && wait_cnt == (WAIT_MS)-1 ;

always @(posedge clk or negedge rst_n) begin
if (rst_n==0) begin
rd_cnt end
else if(add_rd_cnt) begin
if(end_rd_cnt)
rd_cnt else
rd_cnt end
end
assign add_rd_cnt = (state_c == RD_PHY && rdy && !rd_finish);
assign end_rd_cnt = add_rd_cnt && rd_cnt == (2)-1 ;

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
rd_finish end
else if(end_rd_cnt)begin
rd_finish end
else if(state_c == CHECK)
rd_finish end

always @(posedge clk or negedge rst_n) begin
if (rst_n==0) begin
rdata_cnt end
else if(add_rdata_cnt) begin
if(end_rdata_cnt)
rdata_cnt else
rdata_cnt end
end
assign add_rdata_cnt = (rd_vld);
assign end_rdata_cnt = add_rdata_cnt && rdata_cnt == (2)-1 ;

//接口信號邏輯
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
rd_en phy_addr reg_addr end
else if(add_rd_cnt)begin
rd_en phy_addr reg_addr end
else begin
rd_en phy_addr reg_addr end
end

assign registers = {BMSR,PHYSR};//5'h01,5'h11

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
rd_memory[0] rd_memory[1] end
else if(add_rdata_cnt)begin
rd_memory[rdata_cnt] end
end

//用戶側(cè)輸出檢測結(jié)果
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
chk_vld end
else if(state_c == CHECK)begin
chk_vld end
else
chk_vld end

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
chk_result end
else if(check2idle)begin
chk_result end
else if(check2wait)
chk_result end

endmodule

mdio_ctrl

MDIO時序接口模塊:
`timescale 1ns / 1ps

module mdio_interface#(parameter MDC_CYC = 800)//ns
(
input clk,//100M時鐘
input rst_n,

input rd_en,
input [5-1:0] phy_addr,
input [5-1:0] reg_addr,
output reg [16-1:0] rd_data =0,
output reg rd_vld =0,
output reg rdy =0,

output reg mdo =1,
output reg mdo_en =0,
input mdi,
output reg mdc =1
);

localparam N = MDC_CYC/10;

localparam IDLE = 0 ;
localparam WRI_COM = 1 ;
localparam RD_DATA = 2 ;

localparam PRE = 32'hffff_ffff,
START = 2'b01,
OP = 2'b10,
TA = 2'b11;

reg [3-1:0] state_c =0,state_n =0;
wire idle2wri_com,wri_com2rd_data,rd_data2idle;
reg [ (7-1):0] div_cnt =0 ;
wire add_div_cnt ;
wire end_div_cnt ;
reg [ (6-1):0] bit_cnt =0 ;
wire add_bit_cnt ;
wire end_bit_cnt ;
reg [6-1:0] M =0;
wire [48-1:0] command;
reg rd_flag =0 ;
reg [5-1:0] phy_addr_tmp = 0;
reg [5-1:0] reg_addr_tmp = 0;

//寄存地址
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
phy_addr_tmp reg_addr_tmp end
else if(rd_en)begin
phy_addr_tmp reg_addr_tmp end
end

always@(*)begin
if(state_c == IDLE && !rd_en && !rd_flag)
rdy else
rdy end

always @(posedge clk or negedge rst_n) begin
if (rst_n==0) begin
state_c end
else begin
state_c end
end

always @(*) begin
case(state_c)
IDLE :begin
if(idle2wri_com)
state_n = WRI_COM ;
else
state_n = state_c ;
end
WRI_COM :begin
if(wri_com2rd_data)
state_n = RD_DATA ;
else
state_n = state_c ;
end
RD_DATA :begin
if(rd_data2idle)
state_n = IDLE ;
else
state_n = state_c ;
end
default : state_n = IDLE ;
endcase
end

assign idle2wri_com = state_c==IDLE && end_div_cnt && (rd_flag || rd_en);
assign wri_com2rd_data = state_c==WRI_COM && end_bit_cnt;
assign rd_data2idle = state_c==RD_DATA && end_bit_cnt;

always @(posedge clk or negedge rst_n )begin
if(rst_n==0) begin
rd_flag end
else if(state_c == IDLE && rd_en)begin
rd_flag end
else if(state_c == WRI_COM)
rd_flag end

//分頻計數(shù)器
always @(posedge clk or negedge rst_n) begin
if (rst_n==0) begin
div_cnt end
else if(add_div_cnt) begin
if(end_div_cnt)
div_cnt else
div_cnt end
end
assign add_div_cnt = (1);
assign end_div_cnt = add_div_cnt && div_cnt == (N)-1 ;

//比特計數(shù)器
always @(posedge clk or negedge rst_n) begin
if (rst_n==0) begin
bit_cnt end
else if(add_bit_cnt) begin
if(end_bit_cnt)
bit_cnt else
bit_cnt end
end
assign add_bit_cnt = (end_div_cnt && state_c != IDLE);
assign end_bit_cnt = add_bit_cnt && bit_cnt == (M)-1 ;

always@(*)begin
case(state_c)
WRI_COM:M = 48;
RD_DATA:M = 16;
default:M = 10;
endcase
end

//mdc時鐘
always @(posedge clk or negedge rst_n )begin
if(rst_n==0) begin
mdc end
else if(add_div_cnt && div_cnt == (N>>1) - 1)begin
mdc end
else if(end_div_cnt)
mdc end

//mdio輸出
always @(posedge clk or negedge rst_n )begin
if(rst_n==0) begin
mdo end
else if(add_bit_cnt && state_c == WRI_COM)begin
mdo end
else if(state_c != WRI_COM)
mdo end

assign command = {PRE,START,OP,phy_addr_tmp,reg_addr_tmp,TA};

always @(posedge clk or negedge rst_n )begin
if(rst_n==0) begin
mdo_en end
else if(state_c == WRI_COM && add_bit_cnt)
case(bit_cnt)
0: mdo_en 46:mdo_en default:;
endcase
end

//mdio輸入
always @(posedge clk or negedge rst_n )begin
if(rst_n==0) begin
rd_data end
else if(add_bit_cnt && state_c == RD_DATA)begin
rd_data[16-1-bit_cnt] end
end

always @(posedge clk or negedge rst_n )begin
if(rst_n==0) begin
rd_vld end
else if(rd_data2idle)begin
rd_vld end
else
rd_vld end

endmodule

mdio_interface

頂層封裝:
`timescale 1ns / 1ps

module phy_manage(
input clk,
input rst_n,

input mdio_en,
output link_up,
output chk_done,

output mdc,
inout mdio
);

wire rdy;
wire rd_en;
wire [5-1:0] phy_addr;
wire [5-1:0] reg_addr;
(*DONT_TOUCH = "TRUE"*)wire [16-1:0] rd_data;
wire rd_vld;
wire mdo_en,mdo,mdi;

mdio_ctrl mdio_ctrl(
.clk (clk) ,//100M
.rst_n (rst_n) ,

.en (mdio_en) ,
.chk_result(link_up) ,
.chk_vld (chk_done) ,

.rdy (rdy) ,
.rd_en (rd_en) ,
.phy_addr (phy_addr) ,
.reg_addr (reg_addr) ,
.rd_data (rd_data) ,
.rd_vld (rd_vld)
);

mdio_interface#(.MDC_CYC(800))//ns
mdio_interface
(
.clk (clk) ,//100M時鐘
.rst_n (rst_n) ,

.rd_en (rd_en) ,
.phy_addr (phy_addr) ,
.reg_addr (reg_addr) ,
.rd_data (rd_data) ,
.rd_vld (rd_vld) ,
.rdy (rdy) ,

.mdo (mdo) ,
.mdo_en (mdo_en) ,
.mdi (mdi) ,
.mdc (mdc)
);

//三態(tài)門
assign mdio = mdo_en ? mdo : 1'bz;
assign mdi = mdio;

endmodule

phy_manage

五、功能仿真

之后編寫testbench進(jìn)行行為仿真:
`timescale 1 ns/1 ps

`define BIT_CNT uut.mdio_interface.bit_cnt

module phy_manage_tb();

//時鐘和復(fù)位
reg clk ;
reg rst_n;

//uut的輸入信號
reg mdio_en;

//uut的輸出信號
wire link_up;
wire chk_done;
wire mdc;
wire mdio;
wire [16-1:0] back_data1,back_data2;

//時鐘周期,單位為ns,可在此修改時鐘周期。
parameter CYCLE = 10;

//復(fù)位時間,此時表示復(fù)位3個時鐘周期的時間。
parameter RST_TIME = 2 ;

defparam uut.mdio_ctrl.MS_CYC = 100;

//待測試的模塊例化
phy_manage uut(
.clk (clk) ,
.rst_n (rst_n) ,

.mdio_en (mdio_en) ,
.link_up (link_up) ,
.chk_done (chk_done) ,

.mdc (mdc) ,
.mdio (mdio)
);

//生成本地時鐘50M
initial begin
clk = 1;
forever
#(CYCLE/2)
clk=~clk;
end

//產(chǎn)生復(fù)位信號
initial begin
rst_n = 1;
#1;
rst_n = 0;
#(CYCLE*RST_TIME);
rst_n = 1;
end

//輸入信號din0賦值方式
initial begin
#1;
//賦初值
mdio_en = 0;
#(10*CYCLE);
mdio_en = 1;
#(1*CYCLE);
mdio_en = 0;
//開始賦值
#100_000;
$stop;
end

//模擬PHY響應(yīng)

//data
assign back_data1 = {16'b0000_0000_0010_0000};
assign back_data2 = {16'b1010_0000_0000_0000};

integer i = 0,j = 0;
initial begin
forever begin
wait(uut.mdio_interface.state_c == 1 && `BIT_CNT == 47 );
@(posedge mdc);
force mdio = 0;
@(posedge mdc);
j = j+1;
if(j == 1)
force mdio = back_data1[16-1-i+1];
else
force mdio = back_data2[16-1-i+1];

wait(uut.mdio_interface.state_c == 0);
@(posedge mdc);
release mdio;
end
end

initial begin
forever begin
@(posedge mdc);
if(uut.mdio_interface.state_c == 2)begin
#10;
i = i+1;
end
else
i = 0;
end
end

endmodule

phy_manage_tb

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

六、板級調(diào)試

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

測試工程頂層:
`timescale 1ns / 1ps

module mdio_test(
input sys_clk_p,
input sys_clk_n,
input rst_n,

output mdc,
inout mdio,

output phy_reset//PHY芯片復(fù)位信號 低有效
);

wire sys_clk_ibufg;
wire clk;
wire en;
wire chk_done;
wire link_up;

assign phy_reset = 1'b1;//始終不復(fù)位

IBUFGDS #
(
.DIFF_TERM ("FALSE"),
.IBUF_LOW_PWR ("FALSE")
)
u_ibufg_sys_clk
(
.I (sys_clk_p), //差分時鐘的正端輸入,需要和頂層模塊的端口直接連接
.IB (sys_clk_n), // 差分時鐘的負(fù)端輸入,需要和頂層模塊的端口直接連接
.O (sys_clk_ibufg) //時鐘緩沖輸出
);

clk_wiz_0 u_clk
(
// Clock out ports
.clk_out1(clk), // output clk_out1 100Mhz
// Clock in ports
.clk_in1(sys_clk_ibufg)); // input clk_in1

vio_0 u_vio (
.clk(clk), // input wire clk
.probe_out0(en) // output wire [0 : 0] probe_out0
);

phy_manage phy_manage(
.clk (clk) ,
.rst_n (rst_n) ,

.mdio_en (en) ,
.link_up (link_up) ,
.chk_done (chk_done) ,

.mdc (mdc) ,
.mdio (mdio)
);

endmodule

mdio_test

時鐘引腳約束文件:
create_clock -period 5.000 [get_ports sys_clk_p]
set_property PACKAGE_PIN R4 [get_ports sys_clk_p]
set_property IOSTANDARD DIFF_SSTL15 [get_ports sys_clk_p]

set_property PACKAGE_PIN T6 [get_ports rst_n]
set_property IOSTANDARD LVCMOS15 [get_ports rst_n]

set_property PACKAGE_PIN W10 [get_ports mdc]
set_property IOSTANDARD LVCMOS33 [get_ports mdc]

set_property PACKAGE_PIN V10 [get_ports mdio]
set_property IOSTANDARD LVCMOS33 [get_ports mdio]

set_property PACKAGE_PIN L15 [get_ports phy_reset]
set_property IOSTANDARD LVCMOS33 [get_ports phy_reset]

clk_pin

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

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

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

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

編輯:hfy


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 以太網(wǎng)
    +關(guān)注

    關(guān)注

    40

    文章

    5419

    瀏覽量

    171595
  • PHY
    PHY
    +關(guān)注

    關(guān)注

    2

    文章

    301

    瀏覽量

    51732
  • MDIO
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    11209
收藏 人收藏

    評論

    相關(guān)推薦

    基于DWC_ether_qos的以太網(wǎng)驅(qū)動開發(fā)-MDIO驅(qū)動編寫與測試

    本文轉(zhuǎn)自公眾號歡迎關(guān)注 基于DWC_ether_qos的以太網(wǎng)驅(qū)動開發(fā)-MDIO驅(qū)動編寫與測試 一.前言 以太網(wǎng)驅(qū)動的編寫與調(diào)試往往從MDIO接口開始,MDIO是MAC訪問
    的頭像 發(fā)表于 08-30 09:37 ?3736次閱讀
    基于DWC_ether_qos的以太網(wǎng)驅(qū)動開發(fā)-<b class='flag-5'>MDIO</b>驅(qū)動編寫與測試

    請教關(guān)于c6748的MDIO接口讀寫phy的問題

    ,PhyAddr從0到31,重復(fù)掃描。請問:1、6748通過MDIO接口掃描32個Phy的現(xiàn)象,什么時候會停止?是掃到硬件的Phy就停止?2
    發(fā)表于 07-25 07:38

    MAC和內(nèi)部PHY之間的MDIO連接疑問

    你好,當(dāng)MAC內(nèi)部連接到以太網(wǎng)1000base-X時,我對MDIO配置有疑問。在pg051-TEMAC用戶指南中,有一些關(guān)于mdio連接到外部PHY或外部AND內(nèi)部PHY(兩者都在一起
    發(fā)表于 03-26 11:09

    【正點原子FPGA連載】 第二十四章MDIO接口讀寫測試實驗-領(lǐng)航者ZYNQ之FPGA開發(fā)指南

    PHY芯片的工作模式以及獲取PHY芯片的若干狀態(tài)信息。本章我們來學(xué)習(xí)如何通過領(lǐng)航者ZYNQ開發(fā)板實現(xiàn)對P
    發(fā)表于 09-27 18:05

    【正點原子FPGA連載】 第二十四章MDIO接口讀寫測試實驗-領(lǐng)航者ZYNQ之FPGA開發(fā)指南

    PHY芯片的工作模式以及獲取PHY芯片的若干狀態(tài)信息。本章我們來學(xué)習(xí)如何通過領(lǐng)航者ZYNQ開發(fā)板實現(xiàn)對P
    發(fā)表于 09-29 18:10

    PHY_MDIO 接口設(shè)計 精選資料分享

    在以太網(wǎng)通信中,設(shè)備之間的物理局鏈路均由 PHY 芯片建立。PHY 芯片內(nèi)部含有一些列寄存器,用戶可通過這些寄存器來配置
    發(fā)表于 07-20 07:28

    驗證DSO上的mdio寫周期信號,需要做什么設(shè)置?

    我已經(jīng)配置了 MDI 和 MDIO 引腳,想驗證 DSO 上的 mdio 寫周期信號。那么除了 MDC 和 MDIO 管腳配置之外還需要做什么設(shè)置。我需要初始化 MDC 時鐘嗎?MDC
    發(fā)表于 01-09 08:10

    無法使用MDIO總線配置PHY怎么解決?

    我正在使用自定義 P2041 板。有兩個 SGMII PHY,但此 PHY(作為硬件)沒有 MDIO 總線。簡而言之,我無法使用 MDIO 總線配置
    發(fā)表于 05-04 06:00

    MDIO接口的基礎(chǔ)知識詳解

    MDIO接口,是Management Data Input/Output的縮寫。MDIO接口包含在IEEE802.3協(xié)議中,是專用于以太PHY
    發(fā)表于 09-29 14:55 ?4.8w次閱讀
    <b class='flag-5'>MDIO</b><b class='flag-5'>接口</b>的基礎(chǔ)知識詳解

    Marvell交換芯片介紹之MII、MDIO

    一個管理接口,這個管理接口通常稱為 MDIO,MIIM 或者 SMI。   這個接口用于 M
    的頭像 發(fā)表于 01-26 16:02 ?7547次閱讀

    以太網(wǎng)PHY的控制器驅(qū)動框架分析

    PHY芯片為OSI的最底層-物理層(Physical Layer),通過MII/GMII/RMII/SGMII/XGMII等多種媒體獨立接口(介質(zhì)無關(guān)
    的頭像 發(fā)表于 05-04 10:06 ?1452次閱讀
    以太網(wǎng)<b class='flag-5'>PHY</b>的控制器驅(qū)動框架分析

    PHY的控制器驅(qū)動框架分析

    PHY芯片為OSI的最底層-物理層(Physical Layer),通過MII/GMII/RMII/SGMII/XGMII等多種媒體獨立接口(介質(zhì)無關(guān)
    的頭像 發(fā)表于 07-26 11:46 ?1387次閱讀

    以太網(wǎng)PHY芯片的MII接口MDIO接口介紹

    本文主要介紹以太網(wǎng)的MAC(Media Access Control,即媒體訪問控制子層協(xié)議)和PHY(物理層)之間的MII(Media Independent Interface ,媒體獨立接口),以及MII的各種衍生版本——GMII、SGMII、RMII、RGMII等
    的頭像 發(fā)表于 07-26 11:48 ?1.2w次閱讀
    以太網(wǎng)<b class='flag-5'>PHY</b><b class='flag-5'>芯片</b>的MII<b class='flag-5'>接口</b>和<b class='flag-5'>MDIO</b><b class='flag-5'>接口</b>介紹

    基于FPGA的MDIO接口讀寫測試方案

    ,MAC控制器和PHY可以整合到同一芯片內(nèi),也可以分開,即MAC控制器由FPGA實現(xiàn),PHY由以太網(wǎng)芯片實現(xiàn)。PHY
    的頭像 發(fā)表于 10-01 09:46 ?2607次閱讀
    基于FPGA的<b class='flag-5'>MDIO</b><b class='flag-5'>接口</b>讀寫測試<b class='flag-5'>方案</b>

    適用于工業(yè)應(yīng)用的使用MDIO的以太網(wǎng)PHY配置

    電子發(fā)燒友網(wǎng)站提供《適用于工業(yè)應(yīng)用的使用MDIO的以太網(wǎng)PHY配置.pdf》資料免費下載
    發(fā)表于 09-21 10:24 ?0次下載
    適用于工業(yè)應(yīng)用的使用<b class='flag-5'>MDIO</b>的以太網(wǎng)<b class='flag-5'>PHY</b>配置
    RM新时代网站-首页