万兆以太网MAC设计(11)完整UDP协议栈仿真

2024-04-29 05:52

本文主要是介绍万兆以太网MAC设计(11)完整UDP协议栈仿真,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、模块接口
  • 二、IP模块与ARP模块之间的联系
  • 三、整体协议栈仿真
  • 总结:

前言

目前除了巨帧处理逻辑之外,所有的准备工作都已经结束了,先进行整体的功能验证。

一、模块接口

所有模块接口皆采用AXIS数据流的形式,其中包括一个用户自定义信号axis_ip_user,该信号当中存有数据的长度信息,我进行了统一的修改,该长度信息全部是指数据当中的字节长度,所以在处理数据的时候,需要考虑将字节长度信息转化为传输周期长度,即64bit的数量(一拍时钟传输64bit)。

以IP_TX模块为例,r_pkt_byte_len表示数据当中的字节数目,w_ip_64bit_len 表示64bit数据的长度。转化过程也很简单,字节长度右移3位即可,然后判断一下低3位是否为零,不为领则需要多加一个时钟周期进行传输。

assign w_ip_64bit_len = r_pkt_byte_len[2:0] == 0 ? (r_pkt_byte_len >> 3): (r_pkt_byte_len >> 3) + 1 ;

二、IP模块与ARP模块之间的联系

当IP层收到上层的数据包后,就会根据当前的目的IP向ARP发送一个MAC查找,当找到对应MAC地址后就会开始传输数据,但如果没有找到,那么就会先把数据存下来,然后触发ARP请求,通知ARP发送模块发送一个ARP请求,当获取到相应的NAC地址后,整个协议栈开始正常工作。

整个FPGA也可以在上电的时候进行一次主动ARP移获取对端主机的MAC地址,而且电脑在FPGA上电后也会进行主动ARP,此时FPGA也会获取到主机的MAC信息的。
//当有数据要发送时,进行MAC查询

always @(posedge i_clk or posedge i_rst)beginif(i_rst)ro_seek_ip <= 'd0;elsero_seek_ip <= r_dynamic_dst_ip;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)ro_seek_ip_valid <= 'd0;else if((s_axis_upper_valid && !rs_axis_upper_valid) || (r_get_mac_faild))ro_seek_ip_valid <= 'd1;elsero_seek_ip_valid <= 'd0;
end//获得查询结果
always @(posedge i_clk or posedge i_rst)beginif(i_rst)ri_seek_mac <= 'd0;else if(i_seek_mac_valid)ri_seek_mac <= i_seek_mac;elseri_seek_mac <= ri_seek_mac;
end//当查询结果为48'hffffffffffff时,说明没有该IP对应的MAC,需要触发一次arp请求
always @(posedge i_clk or posedge i_rst)beginif(i_rst)r_get_mac_faild <= 'd0;else if(i_seek_mac_valid && (&i_seek_mac))r_get_mac_faild <= 'd1;else if(i_seek_mac_valid && !(&i_seek_mac))r_get_mac_faild <= 'd0;elser_get_mac_faild <= r_get_mac_faild;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)ro_arp_active <= 'd0;else if(r_get_mac_faild && !r_get_mac_faild_1d)ro_arp_active <= 'd1;elsero_arp_active <= 'd0;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)ro_arp_active_dst_ip <= 'd0;else if(r_get_mac_faild && !r_get_mac_faild_1d)ro_arp_active_dst_ip <= ro_seek_ip;elsero_arp_active_dst_ip <= ro_arp_active_dst_ip;
end

三、整体协议栈仿真

我们只看发送的原始数据,和最终接收的数据。

UDP发送端,先发送了俩个数据,此时IP层会发现没有MAC地址信息,所以会通知上层暂停,开始进行ARP请求,直到获得目的MAC后,UDP层开始继续发送数据。
在这里插入图片描述
对于接收端而言,接收到的UDP数据包是连续的,对发端对比,数据无误。
在这里插入图片描述

总结:

完整工程参考:https://github.com/shun6-6/Ten_gig_eth_design

这篇关于万兆以太网MAC设计(11)完整UDP协议栈仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945251

相关文章

MySQL中慢SQL优化方法的完整指南

《MySQL中慢SQL优化方法的完整指南》当数据库响应时间超过500ms时,系统将面临三大灾难链式反应,所以本文将为大家介绍一下MySQL中慢SQL优化的常用方法,有需要的小伙伴可以了解下... 目录一、慢SQL的致命影响二、精准定位问题SQL1. 启用慢查询日志2. 诊断黄金三件套三、六大核心优化方案方案

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

如何关闭 Mac 触发角功能或设置修饰键? mac电脑防止误触设置技巧

《如何关闭Mac触发角功能或设置修饰键?mac电脑防止误触设置技巧》从Windows换到iOS大半年来,触发角是我觉得值得吹爆的MacBook效率神器,成为一大说服理由,下面我们就来看看mac电... MAC 的「触发角」功能虽然提高了效率,但过于灵敏也让不少用户感到头疼。特别是在关键时刻,一不小心就可能触

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N