10G Ethernet Subsystem 基于K7芯片的UDP通讯

news/2024/5/18 13:38:59 标签: udp, 网络协议, 网络

此文章只用于教程开发笔记,不做过多的废话介绍。

IP核的建立

此选项不进行共享时钟逻辑。优点接口少好操作,缺点只可以建立一个IP核。(我有一篇文章介绍了如何进行多个核互联)传送门:FPGA光纤Aurora_8B_10B_fpga aurora的实际带宽-CSDN博客

//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
axi_10g_ethernet_0 your_instance_name (
  .tx_axis_aresetn(tx_axis_aresetn),                // 复位   。 需拉低一段时间 
  .rx_axis_aresetn(rx_axis_aresetn),                // 复位   。 需拉低一段时间 
  .tx_ifg_delay(tx_ifg_delay),                      // input wire [7 : 0] tx_ifg_delay
  .dclk(dclk),                                      // DRP 时钟
  .txp(txp),                                        // 光口
  .txn(txn),                                        // 光口
  .rxp(rxp),                                        // 光口
  .rxn(rxn),                                        // 光口
  .signal_detect(signal_detect),                    // input wire signal_detect
  .tx_fault(tx_fault),                              // 检测光模块 状态信号
  .tx_disable(tx_disable),                          // 连接光模块的控制
  .pcspma_status(pcspma_status),                    // output wire [7 : 0] pcspma_status
  .sim_speedup_control(sim_speedup_control),        // 使用此信号,可缩短计算时间1 用于仿真
  .rxrecclk_out(rxrecclk_out),                      // 时钟
  .s_axi_aclk(s_axi_aclk),                          // input wire s_axi_aclk
  .s_axi_aresetn(s_axi_aresetn),                    // input wire s_axi_aresetn
  .xgmacint(xgmacint),                              // output wire xgmacint
  .areset_datapathclk_out(areset_datapathclk_out),  // output wire areset_datapathclk_out
  .txusrclk_out(txusrclk_out),                      // output wire txusrclk_out
  .txusrclk2_out(txusrclk2_out),                    // output wire txusrclk2_out
  .gttxreset_out(gttxreset_out),                    // output wire gttxreset_out
  .gtrxreset_out(gtrxreset_out),                    // output wire gtrxreset_out
  .txuserrdy_out(txuserrdy_out),                    // output wire txuserrdy_out
  .coreclk_out(coreclk_out),                        // output wire coreclk_out
  .resetdone_out(resetdone_out),                    // output wire resetdone_out
  .reset_counter_done_out(reset_counter_done_out),  // output wire reset_counter_done_out
  .qplllock_out(qplllock_out),                      // output wire qplllock_out
  .qplloutclk_out(qplloutclk_out),                  // output wire qplloutclk_out
  .qplloutrefclk_out(qplloutrefclk_out),            // output wire qplloutrefclk_out
  .refclk_p(refclk_p),                              // input wire refclk_p
  .refclk_n(refclk_n),                              // input wire refclk_n
  .reset(reset),                                    // input wire reset
  .s_axi_araddr(s_axi_araddr),                      // input wire [10 : 0] s_axi_araddr
  .s_axi_arready(s_axi_arready),                    // output wire s_axi_arready
  .s_axi_arvalid(s_axi_arvalid),                    // input wire s_axi_arvalid
  .s_axi_awaddr(s_axi_awaddr),                      // input wire [10 : 0] s_axi_awaddr
  .s_axi_awready(s_axi_awready),                    // output wire s_axi_awready
  .s_axi_awvalid(s_axi_awvalid),                    // input wire s_axi_awvalid
  .s_axi_bready(s_axi_bready),                      // input wire s_axi_bready
  .s_axi_bresp(s_axi_bresp),                        // output wire [1 : 0] s_axi_bresp
  .s_axi_bvalid(s_axi_bvalid),                      // output wire s_axi_bvalid
  .s_axi_rdata(s_axi_rdata),                        // output wire [31 : 0] s_axi_rdata
  .s_axi_rready(s_axi_rready),                      // input wire s_axi_rready
  .s_axi_rresp(s_axi_rresp),                        // output wire [1 : 0] s_axi_rresp
  .s_axi_rvalid(s_axi_rvalid),                      // output wire s_axi_rvalid
  .s_axi_wdata(s_axi_wdata),                        // input wire [31 : 0] s_axi_wdata
  .s_axi_wready(s_axi_wready),                      // output wire s_axi_wready
  .s_axi_wvalid(s_axi_wvalid),                      // input wire s_axi_wvalid
  //axis_tx数据接口   发送
  .s_axis_tx_tdata(s_axis_tx_tdata),                // input wire [63 : 0] s_axis_tx_tdata
  .s_axis_tx_tkeep(s_axis_tx_tkeep),                // input wire [7 : 0] s_axis_tx_tkeep
  .s_axis_tx_tlast(s_axis_tx_tlast),                // input wire s_axis_tx_tlast
  .s_axis_tx_tready(s_axis_tx_tready),              // output wire s_axis_tx_tready
  .s_axis_tx_tuser(s_axis_tx_tuser),                // input wire [0 : 0] s_axis_tx_tuser
  .s_axis_tx_tvalid(s_axis_tx_tvalid),              // input wire s_axis_tx_tvalid
  .s_axis_pause_tdata(s_axis_pause_tdata),          // input wire [15 : 0] s_axis_pause_tdata
  .s_axis_pause_tvalid(s_axis_pause_tvalid),        // input wire s_axis_pause_tvalid
 //axis_rx数据接口    接收
  .m_axis_rx_tdata(m_axis_rx_tdata),                // output wire [63 : 0] m_axis_rx_tdata
  .m_axis_rx_tkeep(m_axis_rx_tkeep),                // output wire [7 : 0] m_axis_rx_tkeep
  .m_axis_rx_tlast(m_axis_rx_tlast),                // output wire m_axis_rx_tlast
  .m_axis_rx_tuser(m_axis_rx_tuser),                // output wire m_axis_rx_tuser
  .m_axis_rx_tvalid(m_axis_rx_tvalid),              // output wire m_axis_rx_tvalid
  .tx_statistics_valid(tx_statistics_valid),        // 数据有效信号
  .tx_statistics_vector(tx_statistics_vector),      // 状态标志信号
  .rx_statistics_valid(rx_statistics_valid),        // 数据有效信号
  .rx_statistics_vector(rx_statistics_vector)       // 状态标志信号
);

顶层接口定义

module 10G_ethernet(
    input  sys_clk_100m      ,//板卡的系统时钟
    input  refclk_n_0        ,//光口时钟
    input  refclk_p_0        ,
    input  rxn_0             ,//光口接收
    input  rxp_0             ,
    output txp_0             ,//光口发送
    output txn_0             ,
    output led               ,//工作状态指示信号
    output tx_dis             //通道开启信号
    );

功能验证

  需要准备工具:10G网卡一个(PCIE接口)、支持10G的光模块两个、光纤线缆一对。

程序下载完成后,10G网卡灯亮起,证明与10G Ethernet Subsystem 核link成功,这时可查看电脑的网络现实状态。

配置好IP地址后,可使用网络传输助手进行通讯。

Des_ip : c0a900010   发送端主机的IP地址  192.168.0.16

Des_mac :   发送端主机的MAC地址 00-1b-21-c2-5b-d6

Des_port :   源端口号  0800   

Eth_type :   长度类型

Src_ip :a9fe6b02 源ip 开发板ip地址 169.254.107.2

Src_mac :源mac地址 开发板mac地址 00-d0-08-00-00-02

Scr_port :目的端口号 与源端口号保持一致即可

Rx_last_in :表示一个数据包的结束

Rx_user_in:0表示接收的数据包坏的 , 1表示接收的数据包好的

Rx_valid_in :数据有效信号

Fifo_en :数据有效信号

Rx_data_in :数据信号

Rx_fifo_data :数据信号


http://www.niftyadmin.cn/n/5413519.html

相关文章

c++ 11 新特性 不同数据类型之间转换函数之const_cast

一.不同数据类型之间转换函数const_cast介绍 const_cast是C11中引入的一种类型转换操作符,用于修改类型的const或volatile属性。const_cast的主要用途是移除对象的常量性,它是唯一具有此能力的C风格的转型操作符。在C11中,const_cast可以完成…

linux下修改网卡MAC地址

我建议你使用 macchanger,但如果你不想使用它,那么可以使用另一种方法在 Linux 中更改 MAC 地址。 首先,使用以下命令关闭网卡: sudo ip link set dev enp0s31f6 down 接下来,使用以下命令设置新的 MAC:…

关于比特币的AI对话

【ChatGPT】 比特币源码开源吗? 是的,比特币的源码是开源的。比特币项目是在MIT许可证下发布的,这意味着任何人都可以查看、修改、贡献和分发代码。比特币的源码托管在GitHub上,可以通过下面的链接进行访问: https://g…

python统计分析——泊松回归

参考资料:用python动手学统计学 概率分布为泊松分布、联系函数为对数函数的广义线性模型叫作泊松回归。解释变量可以有多个,连续型和分类型的解释变量也可以同时存在。 1、案例说明 分析不同气温与啤酒销量的关系。构造不同气温下的销量的数学模型&…

代码随想录算法训练营day29

题目:491.递增子序列、46.全排列、47.全排列 II 参考链接:代码随想录 491.递增子序列 思路:一开始按照基本回溯的模板来写。当路径长度大于2时加入ans,结束条件为开始位置到达末尾。for循环部分遍历第一个加入path中的数&#…

课时57:数组实践_综合实践_数组案例

1.2.2 数组案例 学习目标 这一节,我们从 信息统计、服务管理、小结 三个方面来学习。 信息统计 需求 分别打印CPU 1min 5min 15min load负载值 命令提示:uptime信息显示:CPU 1 min平均负载为: 0.00CPU 5 min平均负载为: 0.01CPU 15 min平…

力扣题库第4题:移动零

题目内容: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 : 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 答案&…