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
相关推荐
一隅论数智1 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20161 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本1 天前
离散数学第六课
学习·离散数学
AI职业加油站1 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊1 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
霍霍的袁1 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
彧azz1 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
我爱cope1 天前
【操作系统 | 计算机硬件:CPU、内存与 I/O 如何支撑操作系统?】
学习·操作系统