万兆以太网MAC设计(12)万兆UDP协议栈上板与主机网卡通信

一、设置IP以及MAC

顶层模块设置源MAC地址

module XC7Z100_Top#(
    parameter       P_SRC_MAC = 48'h01_02_03_04_05_06,
    parameter       P_DST_MAC = 48'hff_ff_ff_ff_ff_ff
)(
    input           i_sys_clk_p     ,
    input           i_sys_clk_n     ,
    input           i_gt_refclk_p   ,
    input           i_gt_refclk_n   ,
    input           i_gt_rxp        ,
    input           i_gt_rxn        ,
    output          o_gt_txp        ,
    output          o_gt_txn        ,
    output          o_tx_disable
);

在UDP协议栈当中设置IP地址和UDP端口。

然后数据进行回环测试和板卡满带宽发数据,主机向板卡发送数据然后板卡向主机返回相同的数据。

UDP_10G_Stack#(
    .P_SRC_MAC        (P_SRC_MAC                    ),
    .P_DST_MAC        (P_DST_MAC                    ),
    .P_SRC_IP_ADDR    ({8'd192,8'd168,8'd100,8'd100} ),
    .P_DST_IP_ADDR    ({8'd192,8'd168,8'd100,8'd90}),
    .P_SRC_UDP_PORT   (16'h8080                     ),
    .P_DST_UDP_PORT   (16'h8080                     )

)UDP_10G_Stack_u0(
    .i_xgmii_clk                (w_xgmii_clk        ),
    .i_xgmii_rst                (w_xgmii_rst || (!w_block_sync)),
    .i_xgmii_rxd                (w_xgmii_rxd        ),
    .i_xgmii_rxc                (w_xgmii_rxc        ),
    .o_xgmii_txd                (w_xgmii_txd        ),
    .o_xgmii_txc                (w_xgmii_txc        ),
    .i_dynamic_src_mac          (48'd0),
    .i_dynamic_src_mac_valid    (0),
    .i_dynamic_dst_mac          (48'd0),
    .i_dynamic_dst_mac_valid    (0),
    .i_dymanic_src_port         (0),
    .i_dymanic_src_port_valid   (0),
    .i_dymanic_dst_port         (0),
    .i_dymanic_dst_port_valid   (0),
    .i_dynamic_src_ip           (0),
    .i_dynamic_src_ip_valid     (0),
    .i_dynamic_dst_ip           (0),
    .i_dynamic_dst_ip_valid     (0),
    .i_arp_active               (0),
    .i_arp_active_dst_ip        (0),
    /****user data****/
    .m_axis_user_data           (wm_axis_user_data  ),
    .m_axis_user_user           (wm_axis_user_user  ),
    .m_axis_user_keep           (wm_axis_user_keep  ),
    .m_axis_user_last           (wm_axis_user_last  ),
    .m_axis_user_valid          (wm_axis_user_valid ),
    .s_axis_user_data           (wm_axis_user_data  ),
    .s_axis_user_user           (wm_axis_user_user  ),
    .s_axis_user_keep           (wm_axis_user_keep  ),
    .s_axis_user_last           (wm_axis_user_last  ),
    .s_axis_user_valid          (wm_axis_user_valid ),
    .s_axis_user_ready          ( ) 
);

二、上板效果

2.1、板卡与主机数据回环测试

通过网口调试助手发送数据,可以看到数据正确被回环。
在这里插入图片描述
通过wireshark可以看到发送数据过程,首先是主机发送一个ARP请求,然后板卡会返回ARP回复包,然后主机即可获取板卡的MAC地址信息,我们设置的正是01020040506,接下来主机向板卡发送数据,板卡接收到数据后返回给主机,一发一收全部正常。
在这里插入图片描述

2.2、板卡满带宽发送数据

带宽满速率下9.7G左右,可以减少一些打拍逻辑,可以提升一定的速率。
在这里插入图片描述

  • 23
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
万兆UDP协议(Gigabit UDP Protocol)是一种在高速网络通信中使用的协议。这种协议基于UDP(用户数据报协议),可以实现高速、可靠且低延迟的数据传输。而Verilog是一种硬件描述语言,适用于FPGA(现场可编程门阵列)的设计开发。 在使用万兆UDP协议进行通信时,我们可以利用Verilog语言编写FPGA的逻辑电路,实现万兆UDP协议的功能。通过Verilog代码,我们可以描述FPGA中各个模块的状态和行为,从而实现数据的收发、校验和错误处理等功能。 在实现万兆UDP协议的FPGA设计中,我们需要考虑以下几个方面: 1. 数据帧处理:通过Verilog代码实现数据帧的解析和封装,包括MAC地址的识别、IP地址的提取、端口号的识别等。 2. 数据交换:通过Verilog代码实现数据的接收和发送,包括从网络中接收数据帧并将其传输给合适的模块进行处理,以及将处理后的数据帧发送到网络中。 3. 错误检测和纠正:通过Verilog代码实现校验和的计算和检查,以及对错误数据的处理,如丢弃或重新发送。 4. 数据缓存和流控制:通过Verilog代码实现数据的暂存和流控制,以保证数据的稳定传输。 总之,通过使用Verilog语言编写FPGA的逻辑电路,结合万兆UDP协议,我们可以实现高速、可靠且低延迟的数据传输。这种设计在网络通信、数据中心和高性能计算等领域具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顺子学不会FPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值