前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于FPGA的千兆以太网开发(3)

基于FPGA的千兆以太网开发(3)

作者头像
FPGA开源工作室
发布2021-03-15 09:28:59
1.3K0
发布2021-03-15 09:28:59
举报
文章被收录于专栏:FPGA开源工作室

基于FPGA的千兆以太网开发(1)和基于FPGA的千兆以太网开发(2)中介绍了以太网的基本信息和接口介绍,本节将下板一步步调试。

1 RGMII接口

在 千兆以太网模式下,TXC和RXC的时钟为125MHZ,TXC由MAC产生,RXC由PHY产生。TXD[3:0]和RXD[3:0]数据传输在TXC和RXC的上升沿和下降沿传输。

2 RX和TX短接测试硬件

此目的为了验证硬件环路没有问题。

代码语言:javascript
复制
module ETH_TOP(
        input clk,   
        input rstn,
        output [7:0] led,
        
       // output  eth_reset_n2,
        output[3:0] rgmii_txd1,
        output rgmii_txctl1,
        output rgmii_txc1,
        input[3:0] rgmii_rxd1,
        input rgmii_rxctl1,
        input rgmii_rxc1
    );
    
//test-------------------------
assign rgmii_txd1 =rgmii_rxd1;
assign rgmii_txctl1=rgmii_rxctl1;
assign rgmii_txc1 =rgmii_rxc1;

ila_1 ila_1 (
	.clk(rgmii_rxc1), // input wire clk


	.probe0(rgmii_rxd1), // input wire [3:0]  probe0  
	.probe1(rgmii_rxctl1), // input wire [0:0]  probe1 
	.probe2(rgmii_txd1), // input wire [3:0]  probe2 
	.probe3(rgmii_txctl1) // input wire [0:0]  probe3
);
endmodlue

3 RGMII 转GMII

代码语言:javascript
复制
`timescale 1ns / 1ps  

module ethernet_test(
    input       sys_clk_50m,
    input       rst_n,

	output[3:0] rgmii_txd,
	output      rgmii_txctl,
	output      rgmii_txc,
	
	input[3:0]  rgmii_rxd,
	input       rgmii_rxctl,
	input       rgmii_rxc
    );
wire            reset_n;
(*mark_debug="true"*)wire   [ 7:0]   gmii_txd;
(*mark_debug="true"*)wire            gmii_tx_en;
(*mark_debug="true"*)wire            gmii_tx_er;
(*mark_debug="true"*)wire            gmii_tx_clk;
wire            gmii_crs;
wire            gmii_col;
(*mark_debug="true"*)wire   [ 7:0]   gmii_rxd;
(*mark_debug="true"*)wire            gmii_rx_dv;
(*mark_debug="true"*)wire            gmii_rx_er;
(*mark_debug="true"*)wire            gmii_rx_clk;
wire            duplex_mode;     // 1 full, 0 half
wire            rgmii_rxcpll;

wire  [31:0]    pack_total_len ;

wire [1:0]      speed      ;
wire            link       ;
wire            e_rx_dv    ;
wire [7:0]      e_rxd      ;
wire            e_tx_en    ;
wire [7:0]      e_txd      ;
wire            e_rst_n    ; 

 assign duplex_mode = 1'b1;
 assign speed= 2'b10;
 assign link='b1;
 

ila_0 ila_0 (
	.clk(rgmii_rxc), // input wire clk


	.probe0(rgmii_rxd), // input wire [7:0]  probe0  
	.probe1(rgmii_rxctl), // input wire [0:0]  probe1 
	.probe2(gmii_rxd), // input wire [7:0]  probe2 
	.probe3(gmii_rx_dv) // input wire [0:0]  probe3
);

util_gmii_to_rgmii util_gmii_to_rgmii_m0(
.reset(~rst_n),
//RGMII tx
.rgmii_td           (rgmii_txd      ),
.rgmii_tx_ctl       (rgmii_txctl    ),
.rgmii_txc          (rgmii_txc      ),
//RGMII rx
.rgmii_rd_i         (rgmii_rxd      ),
.rgmii_rx_ctl_i     (rgmii_rxctl    ),
.rgmii_rxc          (rgmii_rxc      ),//add

//GMII RX
.gmii_rx_clk        (gmii_rx_clk    ),
.gmii_rx_dv         (gmii_rx_dv     ),
.gmii_rx_er         (gmii_rx_er     ),
.gmii_rxd           (gmii_rxd       ),

//GMII TX
.gmii_txd           (e_txd        ),
.gmii_tx_en         (e_tx_en      ),
.gmii_tx_er         (1'b0           ),
.gmii_tx_clk        (gmii_tx_clk    ),

.gmii_crs           (gmii_crs       ),
.gmii_col           (gmii_col       ),

.speed_selection    (speed          ),
.duplex_mode        (duplex_mode    )

);

通过debug发现发进FPGA通过RGMII转GMII顺序不正确。

调整如下:

代码语言:javascript
复制
  BUFG bufmr_rgmii_rxc(
    .I(~rgmii_rxc),
    .O(gmii_rx_clk)
   );
修改为:
  BUFG bufmr_rgmii_rxc(
    .I(rgmii_rxc),
    .O(gmii_rx_clk)
   );

接收顺序正确。

FPGA验证

发出正确。

发送接收测试OK。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA开源工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 RGMII接口
  • 2 RX和TX短接测试硬件
  • 3 RGMII 转GMII
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档