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
相关推荐
该学习了咕咕3 小时前
顶刊论文学习笔记
学习
Linux-lucky5 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
li星野5 小时前
【学习记录】k-Wave 时间步长、CFL 稳定性与参数实验全解析
学习
心祭丫丫7 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
Nerd(BUG版)11 小时前
Flutter学习day5--事件手势与命中测试
学习·flutter
Nerd(BUG版)12 小时前
KMP学习day4--Kotlin空安全与泛型
学习·安全·kotlin
東隅已逝,桑榆非晚12 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
wdyan29713 小时前
带着小白学习-微服务-5 实战:配置中心-数据库连接
数据库·学习·微服务
叼烟扛炮14 小时前
Linux 学习笔记(五十):网络层——IP 协议、子网划分与 NAT 魔法
linux·笔记·学习
叼烟扛炮14 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法