PS通过GTX实现SFP网络通信2

news2024/11/27 23:49:35
PS 程序设计
LWIP 库修改
  修改原因
SDK 2017.4 自带的 LWIP 1.4.1 库的版本为 2.0 ,直接使用该库将无法通过 SFP 实现网络通信。
因此需要进行修改。 修改的原因有 2 个,第 1 个原因是由于 2017.4 版本产生的新 bug 。在 2015.4 版本中,若 PL 部分使用了 1G/2.5G Ethernet PCS/PMA or SGMII IP 核,在 vivado 中编译完成 export 导入 SDK 后 在工程 bsp xparameters.h 头文件中会包含一些与 1G/2.5G Ethernet PCS/PMA or SGMII IP 核相关 的宏定义。例如,使用 1000BASEX 模式时,产生的宏定义为:
#define XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT 1
#define XPAR_PCSPMA_1000BASEX_PHYADDR 6
或者,使用 SGMII 模式时,产生的宏定义为:
#define XPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT 1
#define XPAR_PCSPMA_SGMII_PHYADDR 6
通过分析 lwip 库底层驱动代码,发现这些宏定义是 lwip 库底层代码的编译选项。在 lwip 库的
lwip141_v2_0\src\contrib\ports\xilinx\netif\xemacpsif_physpeed.c xemacpsif_hw.c 两个文件中被使用。用于决定MDIO 接口配置外部 PHY 的方式。显然,作为 1000BASEX PHY SGMII PHY 或通常的PHY 芯片的寄存器定义和配置方式是存在区别的,不能相互兼容。所以上述的宏定义对于使用
1G/2.5G Ethernet PCS/PMA or SGMII IP 核时至关重要。
而这些宏定义在 2017.4 版本中却不再出现。因而导致无法使用 LWIP 库对 1G/2.5G Ethernet PCS/PMA or SGMII IP 核进行正常配置使用。
2 个原因是由于 lwip 底层驱动自身存在的设计瑕疵。只要在 PL 部分使用 1G/2.5G Ethernet
PCS/PMA or SGMII IP 核,即 SDK 工程的 bsp 里存在宏定义
#define XPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT 1
或者
#define XPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT 1
那么, lwip 底层驱动将只能通过 MDIO 接口采用对 1G/2.5G Ethernet PCS/PMA or SGMII IP 核进
行的配置方式。也就是说,只要使用了 1G/2.5G Ethernet PCS/PMA or SGMII IP 核,那么与 PS 连接的RGMII 接口的 PHY 芯片将不能被正常检测和配置,此时 lwip 将无法使用直接与 PS 连接的网口。这就对设计产生了限制。 为此,我们需要修改lwip 库。
  修改方法
首先,找到 SDK 安装目录下的 LWIP 库的路径,例如
C:\Xilinx\SDK\2017.4\data\embeddedsw\ThirdParty\sw_servic
lwip141_v2_0 文件夹复制一份到工程目录下的 sdk_repo\bsp 文件夹下将其重新命名为
lwip141_v2_05
第一步,修改 lwip141_v2_05\data\lwip141.mld 文件(可用 Notapad++ 等编辑器打开),
将其中的版本编号
OPTION VERSION = 2.0;
修改为
OPTION VERSION = 2.05;
然后, 在其中增加如下字段 :
BEGIN CATEGORY pcs_pma_core_options
PARAM name = pcs_pma_core_options, desc = "Options setting the pcs pma core related parameters"
PARAM name = use_pcs_pma_core_on_zynq, desc = "Option if set to 1 ensures emacps is used as emio, and connect to pcs_pma_core
in pl. Valid only for Zynq", type = bool, default = false;
PARAM name = use_1000basex, desc = "Option if set to 1 to ensures pcs_pma_core is using 1000basex mode", type = bool, default =
false;
PARAM name = use_sgmii, desc = "Option if set to 1 to ensures pcs_pma_core is using sgmii mode", type = bool, default = false;
PARAM name = 1000basex_phy_address, desc = "Option to define the phy address corresponding to the set in pcs_pma_core in
1000basex mode", type = int, default = 0;
PARAM name = sgmii_phy_address, desc = "Option to define the phy address corresponding to the set in pcs_pma_core in sgmii
mode", type = int, default = 0;
END CATEGORY
增加这段代码的目的是为了在 SDK BSP 设置里, lwip 参数设置窗口中增加一栏选项
pcs_pma_core_options ,其中包含 5 个子选项。如下图所示。
其中, use_pcs_pma_core_on_zynq 表示 PL 端是否使用了 1G/2.5G Ethernet PCS/PMA or SGMII IP核;use_1000basex 表示 IP 核是否配置为 1000BASEX 模式; use_sgmii 表示 IP 核是否配置为 SGMII 模式;1000basex_phy_address 表示使用 1000BASEX 模式时的 phy address sgmii_phy_address 表示使用 SGMII模式时的 phy address 。这两个 phy address 必须与 vivado IP 核的配置完全一致,例如,本例程中phy address 6
然后,打开 lwip141_v2_05\data\lwip141.tcl 文件,增加如下字段:
# PCS PMA CORE options
set use_pcs_pma_core_on_zynq [common::get_property CONFIG.use_pcs_pma_core_on_zynq $libhandle]
set use_1000basex [common::get_property CONFIG.use_1000basex $libhandle]
set use_sgmii [common::get_property CONFIG.use_sgmii $libhandle]
set 1000basex_phy_address [common::get_property CONFIG.1000basex_phy_address $libhandle]
set sgmii_phy_address [common::get_property CONFIG.sgmii_phy_address $libhandle]
if { $use_pcs_pma_core_on_zynq == true } {
puts $lwipopts_fd "\#define USE_PCS_PMA_CORE 1"
}
if { $use_1000basex == true } {
puts $lwipopts_fd "\#define XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT 1"
puts $lwipopts_fd "\#define XPAR_PCSPMA_1000BASEX_PHYADDR $1000basex_phy_address"
}
if { $use_sgmii == true } {
puts $lwipopts_fd "\#define XPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT 1"
puts $lwipopts_fd "\#define XPAR_PCSPMA_SGMII_PHYADDR $sgmii_phy_address"
}
puts $lwipopts_fd ""
增加这段代码的目的是为了在工程所对应的 bsp 中的 lwipopts.h 头文件里,如下所示。
如下:
#define USE_PCS_PMA_CORE 1
以及:
#define XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT 1
#define XPAR_PCSPMA_1000BASEX_PHYADDR 6
或者:
#define XPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT 1
#define XPAR_PCSPMA_SGMII_PHYADDR 6
的宏定义。
这弥补了 2017.4 中的 bug ,可以通过 lwip 库增加所需的宏定义。
接 下 来 , 需 要 解 决 底 层 驱 动 使 用 限 制 , 为 此 要 修 改
lwip141_v2_05\src\contrib\ports\xilinx\netif\xemacpsif_physpeed.c xemacpsif_hw.c 两个文件。两个文件的修改之处相同。在两个文件中,都将:
#if XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT == 1 || \
XPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT == 1
#define PCM_PMA_CORE_PRESENT
改为:
#if USE_PCS_PMA_CORE == 1 && (XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT == 1 || \
XPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT == 1)
#define PCM_PMA_CORE_PRESENT
这样就解决了 MDIO 接口配置的限制,只有当 USE_PCS_PMA_CORE 1 ,即将 use_pcs_pma_core_on_zynq
设 为 1 时 。 MDIO 接 口 才 会 采 用 1G/2.5G Ethernet PCS/PMA or SGMII IP 核 的 配 置 策 略 。 将use_pcs_pma_core_on_zynq 设为 0 时,仍可以正常使用与 PS 连接的网口。
至此, LWIP 库修改完成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1825563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java数据结构之ArrayList(如果想知道Java中有关ArrayList的知识点,那么只看这一篇就足够了!)

前言:ArrayList是Java中最常用的动态数组实现之一,它提供了便捷的操作接口和灵活的扩展能力,使得在处理动态数据集合时非常方便。本文将深入探讨Java中ArrayList的实现原理、常用操作以及一些使用场景。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨…

Kotlin 语言基础学习

什么是Kotlin ? Kotiln翻译为中文是:靠他灵。它是由JetBrains 这家公司开发的,JetBrains 是一家编译器软件起家的,例如常用的WebStorm、IntelliJ IDEA等软件。 Kotlin官网 JetBrains 官网 Kotlin 语言目前的现状: 目前Android 已将Kotlin 作为官方开发语言。 Spring 框…

Java—读取properties配置文件

编写配置文件 usernameroot password123456 urljdbc:mysql://localhost:3306/myDatabase driverClassNamecom.mysql.cj.jdbc.Driver 编写测试类 import java.io.FileInputStream; import java.io.IOException; import java.util.Enumeration; import java.util.Properties;/*…

vagrant putty错误的解决

使用Vagrant projects for Oracle products and other examples 新创建的虚机,例如vagrant-projects/OracleLinux/8。 用vagrant ssh可以登录: $ vagrant ssh > vagrant: Getting Proxy Configuration from Host...Welcome to Oracle Linux Server …

专业学习|博弈论-博弈论概述

(一)认识博弈论:解析复杂决策与策略 (1)认识博弈 博弈论广泛应用于分析个体间因利益冲突而产生的决策问题。通过构建不同模型来探讨如经贸关系、军事威胁等问题,旨在寻找均衡解并提供新知,相较…

C语言概述与历史

引言 C语言是一门历史悠久且影响深远的编程语言。它不仅为后继的许多编程语言奠定了基础,同时因其高效性和灵活性在系统编程和嵌入式开发领域得到了广泛应用。本篇文章将全面介绍C语言的起源与发展、设计目标与理念,以及C语言的标准演化历程,…

字符数组基础知识及题目

死识。。。 字符该如何存储呢?这一点我们在以前就接触过了。用char来存储。 如何输入一个单词呢? char a[10002]; scanf("%s",a); 就不用地址符了。 如何输入句子呢? char a[100002]; gets(a); gets是读入句子的&#xff0c…

利用智能交流控制设计方法实现更好的家电安全

从机电到数字控制的转变首先是通过现成的电子设备完成的——系统架构是围绕 MCU、分立晶体管和高压双向可控硅构建的。 家用电器的这场小型革命部分是由于减少能源和水的浪费以及提高易用性的需求日益增长而推动的。 随着市场及其标准的化,性能和成本效率一直是家…

用MATLAB绘制地球围绕太远运动而月球围绕地球运动

绘制 MATLAB代码: clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g;% 初始化参数 num_frames 1000; % 动画帧数 G200; dt 0.01; % 时间步长% 设置太阳、地球和月球的初始位置和半径 sun_position [0, 0]; earth_radius …

Docker MySQL Shutting down mysqld

6月初至6月15日发现MySQL无故停机多次,导致系统无法使用。接下来各种日志查看,排查原因。先附上一份Docker种MySQL的日志的截图。 一、根据Docker的日志初步估计是数据库内存飙升,从而被系统杀掉进程 查询Linux系统日志,在宿主机…

海康威视-按时间下载录像文件

目录 1、流程图 1.1、录像查找 1.2、录下下载 2、按时间下载 2.1、开启下载 2.2、后台下载 2.2.1、方式一 2.2.2、方式二 3、问题整理 3.1、错误码34 3.2、错误码10 3.3、下载的文件大小为0kb 4、错误码 由于没有在官方文档中找到通过ISAPI协议透传实现按时间下…

---String类---

在c语言中要使用字符串,只能通过字符指针或者字符数组,然后再通过函数进行各种操作,这种将变量和变量方法分开的方式显然不符合面向对象的编程,所以java中添加了String这个类 String类构造 而对于string有很多的方法 字符串长度…

DataFrames相关介绍文件读取

目录 1.初识DataFrame 2.DataFrame的构造函数 3.数据框的轴 4.CSV文件读取 5.Excel文件读取 1.初识DataFrame (1)昨天,我们学习了Series。而Pandas的另一种数据类型:DataFrame,在许多特性上和Series有相似之处。 …

Python虚拟环境的配置

前言: 本人一度被Python的虚拟环境的配置所困扰,前段时间抽空学习了一下,现在总结一下方法,供大家参考。 先使用winr打开命令行窗口。 展示所有虚拟环境 conda env list 创建虚拟环境 例如我们创建一个叫做py_sk的虚拟环境 …

JProfiler 性能分析案列——dump.hprof 堆内存快照文件分析排查内存溢出

在 windows 环境下实现。 一、配置 JVM 参数 配置两个 JVM 参数: -XX:HeapDumpOnOutOfMemoryError,配置这个参数,会在发生内存溢出时 dump 生成内存快照文件(xxx.hprof)-XX:HeapDumpPathF:\logs,指定生成…

SQLServer使用 PIVOT 和 UNPIVOT行列转换

在SQL Server中,PIVOT是一个用于将行数据转换为列数据的操作。它特别适用于将多个行中的值转换为多个列的情况,并在此过程中执行聚合操作。以下是关于SQL Server中PIVOT操作的详细解释和示例: 1、本文内容 概述语法备注关键点简单 PIVOT 示…

拒绝Token焦虑,盘点可白嫖的6款LLM大语言模型API~

上篇分享了如何从0到1搭建一套语音交互系统。 其中,大语言模型(LLM)是实现智能对话的关键所在。 很多小伙伴反应:本地部署 LLM 还是有门槛,本文将系统盘点:目前市面上都有哪些可以免费调用的云端API&…

华为云开发者社区活动-基于MindNLP的ChatGLM-6B聊天机器人体验

MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。支持流式回复。 本活动通过配置环境,模型接入,以及gradio前端界面搭建,实现了聊天机器人的功能。 以下是一些体验记录: 有兴趣的可以通过以下链…

平台型组织的战略及OKR

本文主要探讨了在平台型组织中战略和OKR(目标与关键结果)的应用,以及如何在不同的组织架构中有效制定和执行战略。原文: Strategy and OKRs in the Platform Organization 战略:重要的承诺、复杂的过程 对于什么是组织的战略&…

PS通过GTX实现SFP网络通信1

将 PS ENET1 的 GMII 接口和 MDIO 接口 通过 EMIO 方 式引出。在 PL 端将引出的 GMII 接口和 MDIO 接口与 IP 核 1G/2.5G Ethernet PCS/PMA or SGMII 连接, 1G/2.5G Ethernet PCS/PMA or SGMII 通过高速串行收发器 GTX 与 MIZ7035/7100 开发…