【前言】
DDR作为大容量存储器件,在FPGA设计中占有十分重要的地位。对于xilinx的7系列fpga以及Zynq-7000系列SoC来说,要想实现数据对DDR的读写,通用的解决方案是使用mig软核作为控制器,控制数据的读写进行。
ACZ702和ACZ7015开发板使用的主控器件隶属于Zynq-7000系列。与ACX720所使用的Artix-7系列的XC7A35T器件不同的是,这些器件PS侧自带有硬核DDR控制器,PL端(FPGA逻辑部分)可以通过AXI总线使用PS端的DDR控制器完成对DDR的读写操作。用户可以参考下帖了解ZYNQ系列器件的DDR3存储器件相关知识:【ZYNQ】ZYNQ器件的DDR3存储器使用相关知识介绍
因此,为了腾出更多管脚资源用于其他外设,在设计ACZ702和ACZ7015开发板板卡时,没有特别预留管脚用于mig软核控制DDR,PS端通过AXI总线共享DDR控制器,用于读写DDR。用户在使用这些开发板时,如果需要读写PS侧的DDR,需要使用AXI总线将数据传输到PS端,借用PS端DDR控制器完成操作。为了简化用户的工作量,我们设计了一个用于AXI转换的模块fifo_axi4_adapter 。
【模块结构及说明】
早期的fifo_axi4_adapter模块对DDR的读写由一个模块实现,效率较低,因此后期对fifo_axi4_adapter模块进行了优化。优化后的fifo_axi4_adapter模块结构如下:
整个模块基于读写FIFO的数据量以及剩余空间,自动完成对DDR3的读写。这里的读写两个FIFO会对数据进行缓存,同时,解决上下游模块常常处于不同时钟域的问题。fifo_to_axi4模块会不断对写fifo中的数据进行判断,只要数据量满足一次突发,便会将数据读出,通过AXI4总线接口的写事务通道,将数据写入指定DDR3地址中;而axi4_to_fifo模块则会不断对读FIFO的剩余空间进行判断,当读FIFO中的空间足以容纳一次突发的数据量时,便会通过AXI4总线接口的读事务通道,将指定DDR3地址中的数据读出,存进读FIFO中。 因此,对于用户而言,只需要操作读写FIFO,便能完成对DDR3指定地址的读写操作。
【例程及文档】
小梅哥ZYNQ系列开发板对应文档教材中,凡涉及到DDR3的逻辑设计,均使用到了该模块。用户可以直接通过文档教程对应章节和配套例程进行学习,这里仅提供使用mig对fifo_axi4_adapter模块进行仿真验证的例程。
ch38_acz702_fifo_axi4_adapter.rar
(156.94 KB, 下载次数: 477)
ch38_acz7015_fifo_axi4_adapter.rar
(240.67 KB, 下载次数: 431)
更多关于ACZ702开发板相关内容,可查看“【ACZ702】Zynq开发板用户自助服务手册”
http://www.corecourse.cn/forum.php?mod=viewthread&tid=28719
更多ACZ7015开发板相关内容,欢迎访问
【开发板使用】【ACZ7015】Zynq开发板用户自助服务手册
http://www.corecourse.cn/forum.php?mod=viewthread&tid=29414
|