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
相关推荐
M78佐菲1 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
yi.Ist2 小时前
数据定义语言-DDL操作
数据库·学习·mysql·oracle·大海豚
骐骥16 小时前
学习:javaScriptProxy和registerJavaScriptProxy有什么区别,能注册多少个对象
学习·鸿蒙
Huathy-雨落江南,浮生若梦6 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
m4Rk_8 小时前
【论文阅读】Agent 记忆机制(57):MemSearch-o1——从查询词元生长证据,重组 Deep Search 记忆路径
论文阅读·人工智能·学习·开源·github
闭月之泪舞8 小时前
C++编程学习
c++·学习
网安蟹佬霸9 小时前
2026网络安全每日学习计划:每天学多久?学什么?怎么安排?照着做就行!
网络·学习·安全·web安全·学习路线·网安
一条破秋裤9 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习
2601_9499506310 小时前
考研英语资料太散?用小程序把真题、词汇和错题放到一起
人工智能·学习·考研·小程序·刷题·小程序推荐
熊猫钓鱼>_>10 小时前
鸿蒙AI Agent新范式:从“对话式辅助”到“工程化代理”的Harness架构实战解析
人工智能·笔记·学习·华为·架构·harmonyos