前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FPGA大赛【五】具体模块设计--AXI总线数据传输

FPGA大赛【五】具体模块设计--AXI总线数据传输

作者头像
数字积木
发布2021-04-15 10:56:50
1.1K0
发布2021-04-15 10:56:50
举报
文章被收录于专栏:数字积木

【注】该项目是我们团队参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转。该项目最终晋级决赛,并获得紫光同创企业特别奖。该系列文章介绍我们团队的作品。关注公众号“数字积木”对话框回复 FPGA2019 ,即可获得该项目的工程源代码,详细的文档说明,MATLAB仿真代码。

AXI总线数据传输方案

4.2.1总体设计

经过摄像头获取到图像数据后,经过图像数据的预处理后,将图像数据缓存到ddr中。显示模块再从DDR中读取图像数据,显示到显示屏上。

图像数据通过AXI接口写入到DDR中,通过AXI总线从DDR中读取。这期间要跨三个时钟域。分别是 摄像头数据输出时钟,AXI读写时钟,显示屏驱动时钟。在跨时钟域传输数据时,数据都要经过fifo缓存。

分别设置两个fifo模块,用于跨时钟域的数据缓存。一个设置在摄像头数据模块和DDR中,用于缓存向DDR中写入的数据。一个设置在 DDR和显示屏驱动模块之间,用于缓存从DDR中读取出的数据。

在将数据从摄像头传输到DDR中时,当fifo中的数据数量大于预设值,启动一次突发写传输,将缓存在fifo中的数据缓存到DDR的预设的地址中。

在将数据从DDR传输到显示控制模块中时,当fifo中的数据数量小于预设值,启动一次突发读传输,从DDR的预设的地址中读取出图像数据,缓存到fifo中,共显示模块读取。

4.2.2数据的写入方案

AXI的写传输由fifo中缓存的数据数量触发,当储存在fifo中的数据大于预设值时,进行一次突发传输,将缓存在fifo中的数据写入到DDR中。

当开始启动一次突发传输时,先发送突发传输的起始地址,地址信号通过axi_awaddr端口传输。同时将 axi_awvalid 信号置高,用与通知主机地址通道有有效的地址信息。从机通过 AXI_AWREADY 信号来标志接收到该地址信息。主机接收到 AXI_AWREADY 有效信号后,将 axi_awvalid 置低,直到下一次突发传输,再重复该过程。

启动一次突发传输时,便将 axi_wvalid 置为有效,同时将第一个要发送的数据放置在 axi_wdata 总线上。AXI写通道的数据(axi_wdata)要和axi_wvalid 对齐,从机通过 AXI_WREADY 来标识从机开始接收数据,待从机的AXI_WREADY 有效时,表示从机已准备好接受数据,在 AXI_WREADY 有效的后,从机在下一个时钟寄存接收该数据。此时主机便可将 AXI_WREADY 作为读使能信号,在下一个时钟输出突发传输的下一个数据。重复该步骤,直到一次突发传输完成。即在 AXI_WREADY 有效时,主机在下一个时钟发送新数据,从机在下一时钟寄存该时钟接收到的数据。

主机通过 axi_wlast 信号来标记一次突发传输的最后一个数据。该信号由主机产生,通过设置一个计数器来记录突发传输的数据的数量。axi_wlast 信号要提前一个时钟判断使能,和要发送的最后一个数据对齐。当计数值到倒数第二个数据时,使能 axi_wlast 信号,使之在下一个时钟有效,这样便可以将 axi_wlast 信号和最后一个发送的数据对齐。

在紫光的官方fifo中,数据输出段不会直接输出当前读指针指向的数据,需要提供一个读使能信号后,数据才会在下一时钟在读数据端口输出。故在启动突发传输时,也要提供一个时钟的读fifo使能信号,将第一个要写入的数据从fifo中读出。在从机的 AXI_WREADY 有效后,从机开始接受数据,主机也要从fifo中读出新的数据送给从机。

Fifo的数据是在该时钟使能,下一个时钟输出。读使能信号和数据输出有一个时钟的延迟。

主机的读fifo使能信号设置为

rd_fifo_en = rd_first_data || ( axi_wvalid && M_AXI_WREADY && ( !axi_wlast ) );

rd_first_data:启动突发传输时的读使能信号,一个时钟有效。

axi_wvalid && M_AXI_WREADY : 在主机发送有效且从机接受数据时,读取fifo中的数据。

!axi_wlast : 发送最后一个数据时,该数据通过上一个时钟的读使能信号已经读出,在该周期,不再读取新的数据。

4.2.3数据的读出方案

图像数据储存在fifo中,显示驱动模块用于控制图像的显示,通过从DDR中读出图像数据,送给显示屏进行显示。数据从DDR中读出,送给显示驱动模块时,也要经过fifo缓存。

主机先发送读地址(aw_araddr) 以及地址有效信号( aw_arvalid )。从机接收到 aw_arvalid 有效信号后,在接收地址信号的同时 ,返回 AW_ARREADY 有效信号,标志地址已经接收完成。

在主机接收到 AXI_ARREADY 有效信号后,便可以开始进行读数据的接收,主机等待从机发送的 AXI_ARVALID 有效信号,此信号有效时,表明读数据总线 AXI_RDATA 上此时有有效的输出数据。此时主机发送 axi_rready 信号,通知从机主机已经开始接收数据,此时从机便可以发送新的数据。

从机在接收到有效数据后,需要将读出的数据在fifo中进行缓存。该fifo的使能信号 设置为如下:

rd_fifo_en = ( axi_rready && AXI_RVALID );

AXI_RVALID : 该信号表示读数据总线上有有效的数据。

axi_rready:该信号有效后,从机在下一个周期才发送新的数据。在该信号无效时,从机发送的数据保持不变。故只有在该信号有效时,将输出数据端口的数据写入到fifo中即可。

Fifo端的写数据,写使能和写数据对齐,数据在下一个时钟写入到fifo中去。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字积木 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【注】该项目是我们团队参加2019届全国大学生FPGA大赛的作品,系统主要实现视频任意角度旋转。该项目最终晋级决赛,并获得紫光同创企业特别奖。该系列文章介绍我们团队的作品。关注公众号“数字积木”对话框回复 FPGA2019 ,即可获得该项目的工程源代码,详细的文档说明,MATLAB仿真代码。
    • AXI总线数据传输方案
      • 4.2.1总体设计
      • 4.2.2数据的写入方案
      • 4.2.3数据的读出方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档