zynq PS到PL交互方案设计|学习笔记

此方案经zynq7000、MPSOC验证,详细记录下来以供温习,如有错误请指正,欢迎讨论。

一·背景

资源板卡内部由Zynq芯片实现对外部FPGA芯片再到各外设模块(如ADC\DAC等)的控制。

在资源板卡功能验证调试阶段,考虑到开发便利性及时效性,需要通过Zynq芯片的PS侧(即ARM)与PL侧交互,实现指令分发及数据流传输。

二·需求分析
  1. 交互内容:如指令传输和数据传输;
  2. 交互条件:如PL侧是否处于空闲或者忙碌状态;
  3. 交互生效:何时触发交互内容生效至外设或者PL内部;
  4. 异常处理:当通信出现异常时,预留全局复位机制使PL复位至某初始化状态。
三·指令传输详情

信号位宽方向(相对PL)描述有效值
WReady1outputPL准备好,允许PS写入高电平
WValid1input指示寄存器地址和数据均有效,触发指令上升沿写有效
WValue32input待写入寄存器的值
WRaddress32input待写寄存器的地址
RReady1inputPS准备好,允许接受PL侧数据上升沿读有效,下降沿读完毕
RValid1output指示RValue有效信号高电平
RValue32output回传数据
SysRst1input复位信号上升沿有效

NOTE:因为PS侧属于CPU,涉及到操作系统时间片调度问题,故PS侧程序运行一条语句大多在微秒级。如果PL侧的FPGA将WReady信号或者RValid信号设置为边沿有效,PS侧是无法保证能识别到有效信号,所以将WReady和RValid信号设置为电平有效。

四·写寄存器时序

写寄存器时序图如下:

说明: PL侧IDLE状态WReady常保持高,PS侧IDLE状态WValid常保持低
注意: 在写期间,PL侧如果WReady拉低,要记得把PL侧的RValid信号拉低。

Step1. PS将待写寄存器地址赋值给WRAddress
Step2. PS将待写寄存器数据赋值给WValue
Step3. PS检测WReady信号是否为高,如果不为高,持续检测,超时等待
Step4. PS检测WReady信号为高后,拉高WValid信号,再拉低WValid信号
Step5. PL接收到PS侧的WValid上升沿信号后,获取有效的待写入寄存器的地址和数据
Step6. PL拉低WReady信号,执行寄存器所对应的业务(业务处理过程可能会在多个Tickling执行完)
Step7. PL执行完业务后,拉高WReady信号,等待下次指令传输
Step8. Done.
五·读寄存器时序

读寄存器时序图如下:

说明: PL侧IDLE状态RValid常保持低,PS侧IDLE状态RReady常保持低
注意: PL执行读业务时,WReady信号立刻拉高。

Step1. PS将待读寄存器地址赋值给WRAddress;同时,拉高RReady信号
Step2. PL执行读业务逻辑,更新待读寄存器内容,并将待读寄存器内容赋值给RValue
Step3. PL检测如果RReady信号为高,则拉高RValid信号
Step4. PS检测RValid信号是否为高,如果不为高,持续检测,超时等待
Step5. PS检测RValid信号为高后,读取RValue数据
Step6. PS读取完数据后,拉低RReady信号,进入IDEL状态
Step7. PL检测到ReadReady信号的下降沿后,拉低RValid信号,拉高WReady信号,进入IDEL状态
Step8. Done.

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值