0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Xilinx K7 325t的千兆网UDP协议实现小记

FPGA设计论坛 来源:FPGA设计论坛 2026-04-27 15:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

基于xilinx k7 325t实现的千兆网udp协议,只需要设置好IP,端口,就可以直接给数据,基本等同于透传,可以不用管底层协议。 可以 # FPGA 实现udp模块说明 ## udp_protocol_top gig_ethernet_pcs_pma有脚本生成,任何版本vivado都可以支持,注释里面有对重要信号的说明,默认是1000M,100M需要改内部信号,PHY芯片是88E1512,SGMII接口。 FPGA和上位机IP,端口都要设置好才能收到数据,注意在同一个网段 ## 接收数据 udp_protocol_top.rx_udp_payload_axis_tvalid拉高的时候就代表udp_protocol_top.rx_udp_payload_axis_tdata有效,udp_protocol_top.rx_udp_payload_axis_tready默认给1可以一直收数据 ## 发送数据 tx_udp_payload_axis_tready=1的时候拉高tx_udp_payload_axis_tvalid,数据才有效,发送完成以后一定要发送一个tx_udp_payload_axis_tlast脉冲指示最后一个数据

最近在项目中基于 Xilinx K7 325t 完成了千兆网 UDP 协议的相关实现,感觉挺有意思,来和大家分享下。

这个实现基本就像是透传一样,只要设置好 IP 和端口,就能直接给数据,底层协议不用我们太操心。

FPGA 实现 udp 模块说明

udp_protocol_top

这里面的 gigethernetpcs_pma 是通过脚本生成的,而且不管啥版本的 Vivado 都能支持它,这点还是挺方便的。在代码注释里对重要信号都有说明,默认情况下是 1000M 的速率,如果要改成 100M 的话,就得改改内部信号。这里用的 PHY 芯片是 88E1512,采用的是 SGMII 接口。

在实际应用中,FPGA 和上位机的 IP 以及端口都得设置好,而且要注意在同一个网段,不然数据可收不到哦。

98d4141c-3e09-11f1-90a1-92fbcf53809c.jpg

基于xilinx k7 325t实现的千兆网udp协议,只需要设置好IP,端口,就可以直接给数据,基本等同于透传,可以不用管底层协议。 可以 # FPGA 实现udp模块说明 ## udp_protocol_top gig_ethernet_pcs_pma有脚本生成,任何版本vivado都可以支持,注释里面有对重要信号的说明,默认是1000M,100M需要改内部信号,PHY芯片是88E1512,SGMII接口。 FPGA和上位机IP,端口都要设置好才能收到数据,注意在同一个网段 ## 接收数据 udp_protocol_top.rx_udp_payload_axis_tvalid拉高的时候就代表udp_protocol_top.rx_udp_payload_axis_tdata有效,udp_protocol_top.rx_udp_payload_axis_tready默认给1可以一直收数据 ## 发送数据 tx_udp_payload_axis_tready=1的时候拉高tx_udp_payload_axis_tvalid,数据才有效,发送完成以后一定要发送一个tx_udp_payload_axis_tlast脉冲指示最后一个数据

下面简单看一下代码结构(这里只是示意,非完整代码):

module udp_protocol_top (   // 各种信号声明   input wire clk,   input wire rst,   // 与千兆网相关信号   wire [31:0] gig_ethernet_pcs_pma_sig,   // 接收数据相关信号   output wire rx_udp_payload_axis_tvalid,   output wire [63:0] rx_udp_payload_axis_tdata,   input wire rx_udp_payload_axis_tready,   // 发送数据相关信号   input wire tx_udp_payload_axis_tvalid,   input wire [63:0] tx_udp_payload_axis_tdata,   output wire tx_udp_payload_axis_tready,   output wire tx_udp_payload_axis_tlast ); // 这里面会实例化 gig_ethernet_pcs_pma 模块 gig_ethernet_pcs_pma#( .PARAM1(VALUE1), .PARAM2(VALUE2))u_gig_ethernet_pcs_pma (  .clk(clk),  .rst(rst),  .sig(gig_ethernet_pcs_pma_sig) ); // 其他逻辑代码,比如数据处理,UDP 协议相关逻辑等 endmodule

这里面gigethernetpcspma模块负责和千兆网物理层相关的处理,而udpprotocol_top模块则在这个基础上完成 UDP 协议相关的数据收发等功能。

接收数据

在接收数据的时候,当udpprotocoltop.rxudppayloadaxistvalid拉高,就意味着udpprotocoltop.rxudppayloadaxistdata里面的数据是有效的。而udpprotocoltop.rxudppayloadaxistready这个信号默认给 1 的话,就能一直接收数据啦。

从代码逻辑上看,就像下面这样:

always @(posedge clk or posedge rst) begin

if (rst) begin

// 复位相关信号

end else begin

if (rx_udp_payload_axis_tvalid && rx_udp_payload_axis_tready) begin

// 处理接收到的数据,比如存入缓存等操作

received_data <= rx_udp_payload_axis_tdata;

end

end

end

上面这段代码就是当接收数据有效且接收准备好的时候,把接收到的数据存到received_data这个变量里(实际应用可能会更复杂,比如存入 FIFO 等)。

发送数据

发送数据也有讲究,当txudppayloadaxistready=1的时候,拉高txudppayloadaxistvalid,这时的数据才有效。而且在发送完成以后,一定要发送一个txudppayloadaxistlast脉冲来指示这是最后一个数据。

看下面这段代码示例:

reg [63:0] data_to_send;

reg send_data;

always @(posedge clk or posedge rst) begin

if (rst) begin

send_data <= 0;

end else begin

if (some_condition) begin // 这里 some_condition 代表发送数据的条件,比如缓存有数据等

send_data <= 1;

data_to_send <= some_data; // some_data 是要发送的数据

end

end

end

always @(posedge clk or posedge rst) begin

if (rst) begin

tx_udp_payload_axis_tvalid <= 0;

tx_udp_payload_axis_tlast <= 0;

end else begin

if (send_data && tx_udp_payload_axis_tready) begin

tx_udp_payload_axis_tvalid <= 1;

tx_udp_payload_axis_tdata <= data_to_send;

if (is_last_data) begin // is_last_data 代表是否是最后一个数据的判断

tx_udp_payload_axis_tlast <= 1;

end

end else begin

tx_udp_payload_axis_tvalid <= 0;

tx_udp_payload_axis_tlast <= 0;

end

end

end

在这段代码里,当满足发送条件somecondition时,准备好要发送的数据datatosend并拉高senddata。然后当txudppayloadaxistready为 1 时,发送数据,并在判断是最后一个数据时,拉高txudppayloadaxistlast。99338f82-3e09-11f1-90a1-92fbcf53809c.jpg

总的来说,基于 Xilinx K7 325t 实现的这个千兆网 UDP 协议模块,虽然功能类似透传,但在数据收发的细节处理上还是有不少需要注意的地方,希望我的这些分享能给大家带来一些帮助和启发。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1664

    文章

    22504

    浏览量

    639300
  • Xilinx
    +关注

    关注

    73

    文章

    2208

    浏览量

    131908
  • UDP协议
    +关注

    关注

    0

    文章

    71

    浏览量

    13770
  • 千兆网
    +关注

    关注

    0

    文章

    37

    浏览量

    9995

原文标题:基于 Xilinx K7 325t 的千兆网 UDP 协议实现小记

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    K7 325T 的 SRIO核 有哪位用过啊?

    如题 K7 的 SRIO(GEN2 V1.2 其他版本应该差不多)核有哪位大神用过啊?我在赛灵思的网站上申请了license 导入后 license manager中显示我的核到11月到期从ISE
    发表于 08-31 09:44

    基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡

    基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡1. 板卡概述   板卡主芯片采用Xilinx
    发表于 01-28 15:48

    请教一个关于Xilinx pcie的问题

    最近在调pcie 2.0,用的是Xilinx k7 325t的片子,之前用4x、2.5g的时候工作正常,现在将速度提升至5.0g,但是一直识别不到设备。用chipscope抓信号,现象如下:1
    发表于 01-29 14:24

    233-基于TMS320C6678+XC7K325T的CPCIe开发平台

    为标准6U CPCIe 。[img][/img]二、技术指标以xilinx 公司K7系列FPGA XC72K325T和TI公司的TMS320C6678为主芯片。具有千兆以太
    发表于 09-21 14:25

    237-基于Xilinx Kintex-7 XC7K325T 的FMC/千兆以太/SATA/四路光纤数据转发卡

    本帖最后由 一只耳朵怪 于 2018-5-24 17:29 编辑 基于Xilinx Kintex-7 XC7K325T 的FMC/千兆以太
    发表于 05-24 17:20

    基于TI DSP TMS320C6657、XC7K325T的高速数据处理核心板 解决法案

    XC7K325T-1FFG900。包含1个千兆口,1个FMC HPC接口。可搭配使用AD FMC子卡、图像FMC子卡等,用于软件无线电系统,基带信号处理,无线仿真平台,高速图像采集、处理等。 [img=0,30][/img
    发表于 06-14 14:54

    与PCI Express端点相关的定时故障,K7 325T与160T相关

    我正在使用Vivado 2018.1,System Verilog,带有325T FPGA的KC705开发板,以及带有160T FPGA,Xillybus和PCI Express端点v3.3的自定义
    发表于 11-09 11:38

    Xlinx K7 千兆口数据传输项目请大神出手搭救,急急急!

    将图像及数据组帧后,按照1024Byte帧格式,通过千兆口传输给ARM单元。若口传输过程中有丢帧情况,进行丢帧重传;FPGA硬件平台采用K7系列XC
    发表于 04-05 15:01

    请问如何在K7 325T实现BUFPLL的功能?

    大家好: 如何在K7 325T中迁移BUFPLL的功能? 有任何例外吗?
    发表于 07-26 19:59

    JFM7K325T的JTAG识别连接问题

    Xilinx同款XC7K325T芯片经过impact软件识别成功,换成JFM7K325T就遇到识别问题,希望各位大神帮助一下。
    发表于 09-17 11:09

    325T/410T PCIe2.0×8千兆 信号处理设计

    )FPGA: 国产7K325T7K325T7K410T可选配2)DDR3: 64bit位宽,速率1066Mb/s,2GB、4GB可选配3)GPS/BD定位:支持时统、秒脉冲输出4)千兆
    发表于 05-09 20:07

    Kintex-7 325T FPGA DDR3控制器和接口演示

    使用中速Kintex-7 325T FPGA演示DDR3控制器和接口,运行速度高于1866 Mbps数据速率。
    的头像 发表于 11-30 06:21 6552次阅读
    Kintex-<b class='flag-5'>7</b> <b class='flag-5'>325T</b> FPGA DDR3控制器和接口演示

    Xilinx A7 K7 V7系列Cadence符号库及PCB库免费下载

    Xilinx_A7_K7_V7系列Cadence符号库及PCB库,包含的型号有XC7A100T-1FGG484I;XC7A200T-1FBG676I;XC7K325T-2FFG900I
    发表于 01-26 09:51 158次下载
    <b class='flag-5'>Xilinx</b> A<b class='flag-5'>7</b> <b class='flag-5'>K7</b> V<b class='flag-5'>7</b>系列Cadence符号库及PCB库免费下载

    明德扬XILINX-K7核心板7K325 410T工业级

    明德扬MP5650核心板-工业级 KINTEX-7 FPGA 芯片325T/410T 相对较低的成本实现超高的性能
    的头像 发表于 07-02 11:43 5951次阅读
    明德扬<b class='flag-5'>XILINX-K7</b>核心板<b class='flag-5'>7K325</b> 410<b class='flag-5'>T</b>工业级

    6678板卡设计原理图:基于TI DSP TMS320C6678、Xilinx K7 FPGA XC7K325T的高速数据处理核心板

    该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP TMS320C6678和一片Xilinx FPGA K7 XC72K325T-1ffg900。包含1个千兆
    的头像 发表于 08-15 10:43 4911次阅读
    6678板卡设计原理图:基于TI DSP TMS320C6678、<b class='flag-5'>Xilinx</b> <b class='flag-5'>K7</b> FPGA XC<b class='flag-5'>7K325T</b>的高速数据处理核心板