Yong's blog

  • 首页
  • 个人简介
  1. 首页
  2. Zynq
  3. 正文

AD数据链路架构设计

2024年2月22日 4人点赞 0条评论

1 需求

1、PL端通过AXI总线将ADC采样得到的每通道40 MB/s的ADC_A和ADC_B两个通道的数据传输至DDR环形缓冲区(Ring Buffer),以便PS端进行读取。

2、提供DDR Ring Buffer的PL写指针,以确保PS端在读取数据时能够避开PL正在写入的DDR地址区域。

2 功能点

1、正确采样每通道40MB/s 的ADC数字信号。

2、将采样得到的ADC数据送入FIFO缓存。

3、将FIFO中的数据搬运到DDR Ping-Pong Buffer缓存。(为将来可能的算法做准备)

4、将DDR Ping-Pong Buffer中的数据搬运到DDR Ring Buffer中,供PS端读取。

5、ring_wr_ptr寄存器用作DDR Ring Buffer的写指针,指示PL当前写入的DDR地址区域。这保障了PS端在读取数据时避免与PL正在写入的40 MB DDR地址区域冲突。

3 详细设计

3.1 设计框图

...

3.2 IOB采样

通过I/O Block内的寄存器对输入的ADC数字信号进行采样,确保从端口输入至寄存器的采样延迟是固定的,从而保证数据采样的准确性。然后将采样得到的信号输出到FIFO。

3.3 FIFO设计

.1、Ping-Pong搬运模块每次从FIFO突发搬运128 Bytes数据,因此FIFO至少要缓存128 Bytes数据。

2、当AXI总线繁忙时,FIFO的突发搬运速率会发生波动。因此,FIFO的设计必须确保即使在突发搬运速率最慢的情况下,也能防止FIFO写入数据的溢出。实测发现,从FIFO突发搬运128 Bytes数据最慢需要Ncycles = 234个时钟周期。

由于FIFO读出时钟为200 MHz,时钟周期为TC = 5ns。

FIFO最慢一次突发搬运的时间Tone_burst:

Tone_burst= Ncycles× TC=234×5ns=1170 ns

这段时间写入FIFO的数据Din:

Din=40 MByte/s × Tone_burst = 47 Bytes

为了防止写入数据Din的丢失,FIFO大小至少要为 128 Bytes + 47 Bytes = 175 Bytes。

3、FIFO突发搬运的过程中,可能会因总线繁忙等原因导致搬运速度变慢。为了防止这种情况下数据的溢出,后续数据 < 128 Bytes时,应能够暂存在FIFO中以保持数据的完整性。因此,FIFO最终采用背靠背设计,128 Bytes × 2 = 256 Bytes。

综上:FIFO的容量设计为256 Bytes,采用背靠背设计。当其中的数据量达到128 Bytes时,将Pro_Full信号置高,输出到数据流控制模块。

3.4 数据流控制模块

1、数据流控制模块根据Pro_Full信号判断FIFO中是否有128 bytes数据。

2、当FIFO中的数据量达到128 Bytes时,CTRL信号使得Ping-Pong搬运模块开始数据搬运。CTRL信号还会指定数据搬运的目标地址,使得Ping-Pong搬运模块能够交替地将FIFO中的数据搬运到DDR Ping和DDR Pong缓冲区中。

3、输出Ping-Pong指示信号到FSM模块,标明搬运的数据是进入DDR Ping还是DDR Pong。

3.5 Ping-Pong DMA 模块

Ping-Pong DMA模块根据数据流控制模块的信号CTRL,会从FIFO中取出128 Bytes的数据,并通过AXI总线将这些数据搬运至DDR Ping 或DDR Pong。

3.6 FSM设计

...

1、根据Ping-Pong指示信号,判断当前DDR Ping和DDR Pong哪个处于非写入状态。

2、CTRL信号负责控制Ring Buffer搬运模块,使得Ring Buffer搬运模块搬运将非写入状态的DDR Ping或DDR Pong中的数据搬运到DDR Ring Buffer中。在搬运过程中,CTRL信号提供给Ring Buffer搬运模块的源地址和目的地址。目的地址每隔半秒递增,实现每半秒将Ping-Pong Buffer中的数据搬运到DDR Ring Buffer中。

3、PS端能够访问ring_wr_ptr_A和ring_wr_ptr_B寄存器。其中,ring_wr_ptr_A是PL端A通道当前写入的DDR Ring Buffer A的写指针,指向正写入的40 MB DDR地址空间的起始地址。同样,ring_wr_ptr_B是PL端B通道当前写入的DDR Ring Buffer B的写指针,也指向相应40 MB DDR地址空间的起始地址。

状态机图:

IDLE:空闲状态。

PING: DDR Pong正在写入,DDR Ping数据搬运到Ring Buffer。

PONG: DDR Ping正在写入,DDR Pong数据搬运到Ring Buffer。每次Pong搬运结束后,时间计数器加1,当计数器值达到5时,将其重置为零。计数器指示正在写入第几秒的数据。

3.7 Ring Buffer DMA模块

Ring Buffer搬运模块受FSM的控制信号CTRL控制,按照该信号指示从DDR Ping和DDR Pong交替搬运数据到DDR Ring Buffer中。每隔半秒,该模块从DDR Ping或DDR Pong搬运单通道20Mbyte数据至DDR Ring Buffer。

标签: Zynq 7020
最后更新:2025年1月14日

Yong

JUST FOR FUN !!!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 1 需求
  • 2 功能点
  • 3 详细设计
    • 3.1 设计框图
    • 3.2 IOB采样
    • 3.3 FIFO设计
    • 3.4 数据流控制模块
    • 3.5 Ping-Pong DMA 模块
    • 3.6 FSM设计
    • 3.7 Ring Buffer DMA模块
最近评论
Yong 发布于 13 小时前(06月02日) If it’s helpful to you, I’ll be happy too!
Click Here 发布于 1 周前(05月25日) Heya i am for the primary time here. I found this ...
BigPigBro 发布于 4 个月前(02月04日) :rolleyes: Love From China~
Hete 发布于 4 个月前(02月04日) peace~
标签聚合
同步跳转宽度 CAN总线 CAN总线网络 SJW TFTP更新下位机文件 2023 Zynq 7020 2024

COPYRIGHT © 2023 Yong's blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang