zynq srio枚举id方案设计

2023-10-22 14:20
文章标签 id 枚举 zynq 方案设计 srio

本文主要是介绍zynq srio枚举id方案设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        常见的SRIO枚举分配ID操作在Powerc平台比较常见,本文使用zynq7045实现SRIO枚举功能,PL端有SRIO IP,只需要将AXI维护端口挂到AXI-GP接口上,PS软件就可以通过AXI总线访问SRIO IP实现枚举自动分配ID功能。本次测试硬件拓扑图如下图所示。

 

         srio交换芯片采用的时1848交换芯片,SRIO1和SRIO2本次实验室环回到ZYNQ的SRIOIP上,也可以直接将端口引到外部让用户使用,本次方便实验分析和抓信号,SRIO三个x4的IP都是用同一个ZYNQ出的。PL端例化SRIO IP时按照正常配置SRIO就行,需要勾选上支持维护包,同时在用于枚举的SRIO,需要将维护接口连接到AXI-GP接口上,方便软件去访问相关寄存器,到此硬件和FPGA工作就准备完成,下面开始分析软件。

        编写srio驱动之前需要对srio ip手册多研究,软件需要实现两组访问接口,第一访问host的寄存器列表(下图中左边标签部分),第二个是发维护包访问远端的寄存器列表。这两个是最重要的基础技术点,在zynq平台需要自定义自己实现,本文不贴具体代码,有需要的有偿提供技术支持。下图列举了获取ID 锁寄存器,访问某个SRIO设备之前,需要获得该设备的锁,看是否能够获取成功,不能获取成功,说明该设备被某个host已经枚举过了,如何获取锁可以看下图右边讲解。

 获取锁,并且写ID代码实现如下所示。

         通过维护包枚举远端设备,发现是switch设备,访问switch支持的端口数量,以及主端口是哪一个,同时增加路由表,方便遍历交换机的每一个端口,寄存器描述如下所示。

 

遍历每个端口代码如下所示。

         代码中会判断,如果遍历到用来枚举的主端口,只需要使能该端口的收发就退出,然后继续遍历下一个端口,软件在访问到switch已经更新了路由表,让维护包可以访问到switch的所有端口,软件判断每个端口的link状态,如果端口link了,继续更新路由表,让维护包跳转到该端口,从该端口出去继续枚举,这就是SRIO的枚举过程了

路由表在1848中由0x70和0x74两个寄存器控制,寄存器具体细节如下所示。

        通过不断枚举就可以访问到SRIO链上的所有设备,然后软件通过递归给每个设备分配ID,同时保存每个设备ID信息,方便软件发起NREAD和NWRITE发起访问,同样道理,软件也可以实现NREAD和NWRITE数据交互,通过走AXI-HP接口,本文不讲解该技术点。

        下面是测试实验的数据,很多打印信息是为了方便SRIO交互细节,交互信息很多,这里只展现了部分实验数据。

 下图是xilinx_srio驱动的入口代码。

         驱动代码结构如下所示,该驱动代码支持动态编译,动态加载等功能。

         这边文章讲解了srio如何枚举的工作原理,有感兴趣的小伙伴可以交流,下面文章讲解PCIE枚举和地址映射功能。

这篇关于zynq srio枚举id方案设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

一文解析C#中的StringSplitOptions枚举

《一文解析C#中的StringSplitOptions枚举》StringSplitOptions是C#中的一个枚举类型,用于控制string.Split()方法分割字符串时的行为,核心作用是处理分割后... 目录C#的StringSplitOptions枚举1.StringSplitOptions枚举的常用

Kotlin 枚举类使用举例

《Kotlin枚举类使用举例》枚举类(EnumClasses)是Kotlin中用于定义固定集合值的特殊类,它表示一组命名的常量,每个枚举常量都是该类的单例实例,接下来通过本文给大家介绍Kotl... 目录一、编程枚举类核心概念二、基础语法与特性1. 基本定义2. 带参数的枚举3. 实现接口4. 内置属性三、

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

C#之枚举类型与随机数详解

《C#之枚举类型与随机数详解》文章讲解了枚举类型的定义与使用方法,包括在main外部声明枚举,用于表示游戏状态和周几状态,枚举值默认从0开始递增,也可手动设置初始值以生成随机数... 目录枚举类型1.定义枚举类型(main外)2.使用生成随机数总结枚举类型1.定义枚举类型(main外)enum 类型名字

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接