zynq高频小数据量PS闭环的三个实验-第0课:目的和目标

参考

zynq高频小数据量PS闭环的三个实验-第0课:目的和目标

zynq高频小数据量PS闭环的三个实验-第1课:PL搭建

zynq高频小数据量PS闭环的三个实验-第2课:Vitis裸机测试

zynq高频小数据量PS闭环的三个实验-第3课:Linux驱动测试

目的

对比高频小数据量场景下 {GP,ACP} x {裸机,linux} 的各项指标。每个cycle固定交换64个u32。

测试矩阵

编号 PS接口 软件 数据交换 完成通知 目的
T1 GP Bare-metal AXI GP寄存器(64写+64读) 中断 基准性能
T2 GP Linux ioremap()+readl()/writel() 中断 Linux开销
T3 ACP Bare-metal ACP访问DDR 中断 ACP性能
T4 ACP Linux kmalloc()+virt_to_phys(),ACP访问DDR 中断 ACP+Linux性能

slot0 寄存器表 0x43c00000

读写是从PS角度看的

PS可以用 axi_lite独立访问 slot01 ~ slot0128,但是我为了PS能更高效的访问 slot01 ~ slot0128 引入 ACP

slot01 ~ slot0128 在ddr中有个映像 slot0_ddr1~slot0_ddr128

  • 数据宽度:32bit
  • 地址基址:P_SLOT_BASE = 0
  • 寄存器总数:129
  • 地址范围:slot0[0] ~ slot0[128]
寄存器 地址 访问 说明
slot0[0] 0 W1P 控制寄存器
slot0[1] ~ slot0[64] 1 ~ 64 R/W PS读窗口,PL用ACP 把这 64 个 u32 写入DDR
slot0[65] ~ slot0[128] 65 ~ 128 R/W PS写窗口,PL用ACP 从DDR读64个u32到这里

CTRL (slot0[0])

Bit 名称 说明
0 acq_en 电平信号,1:使能采集 0:关闭采集
1 acq_done_flag 采集完成中断,PS读取后自动清0
2 ctrl_valid 写窗口数据控制有效,PS写入1后自动清0
3 mode 0:GP模式 1:ACP模式
4 busy 只读状态,PL正在搬运数据
5 acp_err 只读状态,ACP读写响应错误
15~6 Reserved 保留
31:16 acq_freq 中断频率,单位Hz

测试流程

  1. 初始化 GP 寄存器窗口:裸机 shell 执行 app_init_reg <x>,初始化 slot0[1] ~ slot0[128]n+x
  2. 初始化 ACP DDR 映像窗口:裸机 shell 执行 app_init_ddr_reg <x>,初始化 slot0_ddr[1] ~ slot0_ddr[128]n+x
  3. 启动 GP 周期采集:裸机 shell 执行 axi_test <freq_hz>,等价于 mode=0, acq_en=1, acq_freq=freq_hz,命令本身不等待中断。
  4. 启动 ACP 周期采集:裸机 shell 执行 acp_test <freq_hz>,等价于 mode=1, acq_en=1, acq_freq=freq_hz,命令本身不等待中断。
  5. GP模式:PL 以 acq_freq Hz 产生中断;裸机 ISR 读取 slot0[0~64] 清除 acq_done_flag 并统计时间。
  6. ACP模式:PL 以 acq_freq Hz 为周期,把 slot0[1] ~ slot0[64] 转移到 slot0_ddr[1~64] 并产生中断; 裸机 ISR 读取 slot0_ddr1\~64,再写 slot0[0].2=1 通知 PL 拉回 DDR 写窗口到 slot0[65] ~ slot0[128],不再修改 DDR 数据窗口。
  7. 查询统计:裸机 shell 执行 get_info,查看中断次数、中断间隔、响应次数和响应耗时。

AtShell制作12个命令

序号 命令 (Command) 描述 (Description)
0 help 命令列表
1 clean 清屏
2 read GP 读 slot0 的129个 u32
3 write GP 写 slot0
4 acp_read 读 slot0_ddr
5 acp_write 写 slot0_ddr
6 axi_test GP loop测试
7 acp_test ACP loop 测试
8 app_init_reg 初始化 slot00\~128
9 app_init_ddr_reg 初始化 slot0_ddr0\~128
10 stop 停止,复位,清0
11 get_info 统计测试的信息
bash 复制代码
$:0
AtShell commands:
 0.help                 - list cmd
 1.clean                - clean screen
 2.read                 - read reg
 3.write                - write reg
 4.acp_read             - acp read window
 5.acp_write            - acp write window
 6.axi_test             - axi reg loop
 7.acp_test             - acp ddr loop
 8.app_init_reg         - app_init_reg
 9.app_init_ddr_reg     - app_init_ddr_reg
10.stop                 - stop slot0 acq
11.get_info             - slot0 irq info
$:11
mode=GP freq=0Hz irq_cnt=0 irq_interval_ns=0 irq_exec_ns=0 loop_cnt=0 loop_ns=0 ps_rd64_ns=0 ps_wr64_ns=0
相关推荐
劈星斩月2 小时前
监督学习算法 之 决策树
学习·算法·决策树
AOwhisky2 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
woshihuanglaoshi2 小时前
数据迁移与版本管理 - Flutter在鸿蒙平台实现数据库升级策略
数据库·学习·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
世人万千丶12 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
遇乐的果园15 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
遇乐的果园16 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_17 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
可乐奶茶sky17 小时前
AI Agent 学习
人工智能·学习
茯苓gao18 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习