很久都没有写文章了,一直想写一篇关于SOC的文章,始终没有想好到底该写什么。 如果说写个串口显示的 “Hello World!”,那就太简单了! 正好最近在弄ZYNQ的SOC图像处理,用到了DMA传输,便决定来写第一篇关于SOC的文章,用第一篇文章来简单的介绍一下DMA传输。 当然,这里还是解释一下什么是DMA,全称Direct Memory Access,直接内存存取。它是一种几乎不需要CPU干预的一种内存访问方式,当然这里的内存指的是DDR3。 ZYNQ的PL和PS进行DMA传输时,使用到的是High Performance AXI4 32bit/64bit Slave Ports。 在进行DMA传输时,使用到的是AXI4协议。当然AXI4协议也有很多种,在我们使用Vivado创建自定义IP的时候就可以看到接口类型有:Lite、Full、Strem这三种。 在进行DMA传输时,使用的是Full这个接口类型。该接口支持突发方式的读写模式。 Lite类型,是不支持突发模式的,一般应用场景在于PS对某些寄存器的配置,传输少量的数据信息。 Stream类型,也是一种大数据量的传输接口,但是它没有相关的读写地址接口,是一种数据流模式的传输方式。在Xilinx的很多IP Core中,都有这个接口的身影。 好了,废话不多说了。我们来看一下演示的这个例子。 首先,我们在PS端向DDR3中写入了640*480个16bit的数据,来模拟一幅图像的数据量。 当然,这里产生的数据,大家应该可以看出,模拟的图像,是3个彩条。 运行之后,也可以查看到DDR3中已经写入了我们想要的数据。 在DMA读模块工作之后,可以看到显示上也显示了彩条。 是的,效果实现了,那DMA传输它到底是怎么工作的呢? 先来看一下SOC的硬件框架,也就是Block Design的框架。 Master_AXI4_VGA_0这个模块,集成了DMA读和写的功能,VGA显示的画面,就是该模块通过DMA读操作,读取到了DDR3中的数据。 这是通过ILA抓取到的DMA读操作波形图,图中可以看到读出的数据为32'hF800F800,这是因为HP AIX4接口使用的是32bit,而且设置的突发长度为16。 当然这个只是DMA的读操作,下边来说一下DMA的写操作。 DMA写操作,在外部有一个写数据的测试模块write_test_0,该模块产生递增的写数据。 这是通过ILA抓到的与DMA写操作相关的信号,将写入的数据放大一点来看,是按照32‘h00000001,32'h00020003这样的数据拼起来的。 那我们再在SDK中看一下DDR3中的数据是怎么样的呢? 数据也是按照这种格式排列的,当然这里看到的数据与ILA中抓到的数据不一样,是因为咱们不是在同一时刻抓取的。 最后再来看一下VGA显示上显示的效果。 当然,通过VGA的效果,我也不知道这个效果是不是递增数展现的一个效果,但可以说明,DMA读和写的功能是已经实现了的。 总结一下,这篇文章只是简单的给大家介绍了DMA的工作过程,至于AXI4的时序关系,因为网上已经有太多的资料了,故没有作太多的介绍。 DMA的读和写功能已经实现了,然后再在目前的这个硬件平台上挂上一个摄像头,实现SOC的摄像头显示系统也不是难事了。 基于SOC的摄像头显示系统完成了,摄像头的数据能正确的写入到DDR3中,之后便可以在PS端做其他的图像处理算法,做基于深度学习的人脸检测等其他高深的应用。 欢迎通信工程师和FPGA工程师关注公众号 ![]() FPGA微信技术群 欢迎大家加入全国FPGA微信技术群,这里有一群热爱技术的工程师,在这里可以一起交流讨论技术! 用手指按住就可以加入FPGA全国技术群哦 FPGA技术群平台自营:Xilinx Altera 镁光、三星、海力士、ADI TI ST NXP 等品牌的优势代理分销商,欢迎大家有需求随时发型号清单,我们将在第一时间为您提供最优竞争力的报价!价格低于您原有供应商5%以上!欢迎询价-直接把需求发给群主! FPGA技术群官方鸣谢品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等 |
|
来自: 西北望msm66g9f > 《培训》