FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑)

这篇具有很好参考价值的文章主要介绍了FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在之前的博客中对AXI4总线进行了介绍(FPGA-AXI4接口协议概述),在这篇博客中,实现用户端与axi4_lite之间的交互逻辑。

一, AXI4 

1.1 AXI4 介绍

对AXI4总线简单介绍(具体可见FPGA-AXI4接口协议概述)

①AXI4是ARM公司提出的是一种高性能、高带宽、低延迟的片内总线

②主要描述了主设备和从设备之间的数据传输方式

③分类:AXI4_FULL、AXI4_LITE、AXI4_STREAM

AXI4_LITE 不支持突发传输。常用与数据量较小的传输,可以理解为轻量级 的AXI4_FULL

AXI4_FULL 又被称为AXI4,支持突发传输,突发长度为1~256。

AXI4_STREAM 丢弃了地址项,常用于高速数据传输。

1.2 什么是片内、片外

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

AXI4 用途:

        ① FPGA内部两个模块的数据传输

        ② ZYNQ中PS与PL交互

二、AXI_LITE通道介绍

        AXI协议中,有5条读写通道:

        2条有关读的通道

                ·  read address   读地址

                ·  read data         读数据(与读响应合并)

        3 条有关写的通道

                ·  write address    写地址

                ·  write data         写数据

                ·  write response  写响应

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

总结: ① 读写分离。 ② 读没有读响应通道。

三,握手机制

        五个通道想要进行数据交互首先需要进行双向握手,握手时,传输源(发送方)会产生 VALID 信号来指明此时的数据或控制信号是否有效,目的源(接收方)会产生 READY 信号来告诉传输源,是否已经准备好接收数据或控制信号了。只有当这两个信号都为高时,才算握手成功,传输源会在握手成功时的时钟上升沿进行一次数据传输。

        这种双向流控机制使得发送与接收双方都有能力控制传输速率,通过控制 VALID 和 READY 的高低电平来控制传输的时机以及速度。

        既然是握手机制,自然也就跟我们平时握手时一样,会有个先后顺序, VALID 和 READY 在握手时共有三种关系

1. VALID 信号先拉高, READY 信号后拉高

此时握手信号与数据以及时钟的关系如下:

 此时握手信号与数据以及时钟的关系如下:

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

这里的 ACLK AXI4的全局时钟INFORMATION 为待传输的内容, VALID/READY 为握手信号。从图中可以看到,VALID 信号在 T1 信号之后到来 (拉高),与其一起来的还有数据、地址或者控制信号。而 READY 信号则是在 T2之后被拉高,因为错过了上升沿,直到T3时刻才被检测到,此时握手成功, 内容得以被传输。

AXI4 协议中规定,VALID 信号一旦拉高,在握手成功之前不能被拉低,因 此,VALID 信号会一直等待,直到在上升沿时刻检测到 READY 为高后 VALID 才能被拉低。

2. READY 信号先拉高,VALID 信号后拉高

此时握手信号与数据以及时钟的关系如下:

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

可以看到,T1 时刻之后 READY 信号拉高,而 VALID 信号则是在 T2 时刻 之后拉高,因为错过了时钟上升沿,所以在 T3 时刻才握手成功,此时, INFORMATION 中的信息被传输。

实际上,即使 READY 信号被拉高,只要 VALID 信号没有被拉高,接收方也可以拉低 READY 信号。例如,接收方置高 READY后,发现自己还有传输需 要完成,而此时发送方还没准备好数据(未置高VALID),这时候接收方便能够拉低 READY信号,转去处理其他传输,传输完成后再回来拉高 READY等待接 收数据。

3. VALID 信号和 READY 信号一起拉高

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

这种情况下就比较简单,READY 信号与 VALID 信号同时拉高,在下一个 时钟上升沿也就是 T2 被检测到,此时握手成功,INFORMATION 得以传输。

五个通道都有自己的握手信号对,对应的名称如下:

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

四、AXI_LITE端口信号及其功能

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

1. AXI_LITE 传输数据的位宽仅支持32位或64位的数据总线宽度,也就是WDATA和RDATA只能为32bit或者64bit。

2. WSTRB信号:

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

一般在使用中,wstrb信号全为1。

3. AWPORT、ARPORT信号

AWPORT信号,官方文档解释为:

        写通道保护类型。该信号指示事务的特权和安全级别,以及事务是数据访问还是指令访问。

默认为3’b000即可。

4. BRESP和RRESP信号

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

其中,axi_lite 不支持 EXOKAY。

五,axi4_lite 读写过程

5.1 写过程

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

1、主机发送写地址和写数据的顺序关系:

        主机可以先发送写地址,后发送写数据;

        主机可以先发送写数据,后发送写地址;

        主机可以同时发送写地址和写数据;

2、从机接收写地址和写数据的顺序关系:

        从机可以先接收写地址,后接收写数据;

        从机可以先接收写数据,后接收写地址;

        从机可以同时接收写地址和写数据;

常用的模式为:

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

5.2 读过程

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

5.3 axi4_lite 读写过程框架图

根据读写过程分析:

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

用户写时,将写地址存放到wr_cmd_fifo中,将写数据存放到wr_data_fifo中,FIFO的dout传输到axi4_lite_master中。

用户读时,将读地址存放到rd_cmd_fifo中,从wr_data_fifo中读数据。

代码编写(顶层模块):

// -----------------------------------------------------------------------------
// Author : RLG
// File   : axi4lite_master.v
// -----------------------------------------------------------------------------
`timescale 1ns / 1ps
module axi4lite_master#(
	parameter USER_WR_DATA_WIDTH  = 32,
	parameter AXI_DATA_WIDTH      = 32,   //注意AXI4的数据位宽只有32bit或者64bit
	parameter AXI_ADDR_WIDTH      = 32,
	parameter USER_RD_DATA_WIDTH  = 32
	)(
	input                                      user_wr_clk     ,
	input                                      user_rd_clk     ,
	input                                      axi_clk         ,
	input                                      reset           ,

	input     wire                             user_wr_we      ,
	input     wire  [USER_WR_DATA_WIDTH-1:0]   user_wr_data    ,
	input     wire  [AXI_ADDR_WIDTH-1    :0]   user_wr_addr    ,
	output    wire                             user_wr_ready   ,

	input     wire                             user_rd_en      ,
	input     wire  [AXI_ADDR_WIDTH-1    :0]   user_rd_addr    ,
	output    wire  [USER_RD_DATA_WIDTH-1:0]   user_rd_data    ,
	output    wire                             user_rd_ready   ,
	output    wire                             user_rd_vaild   ,

	output    wire  [AXI_ADDR_WIDTH-1:0]       m_axi_awaddr    ,
	output    wire  [2:0] 				 	   m_axi_awprot    , 
	output    wire   		 		           m_axi_awvalid   , 
	input     wire    		 	    	       m_axi_awready   ,
  
	output    wire  [AXI_DATA_WIDTH-1  :0]     m_axi_wdata     ,
	output    wire  [AXI_DATA_WIDTH/8-1:0] 	   m_axi_wstrb     , 
	output    wire   		 		           m_axi_wvalid    , 
	input     wire    		 	    	       m_axi_wready    ,
  
	input     wire  [1:0]	         	       m_axi_bresp     ,  //wirte response channel
	input     wire	   			    	       m_axi_bvalid    ,
	output    wire    			         	   m_axi_bready    , 

	output    wire  [AXI_ADDR_WIDTH-1:0]       m_axi_araddr    ,
	output    wire  [2:0] 				 	   m_axi_arprot    , 
	output    wire   		 		           m_axi_arvalid   , 
	input     wire    		 	    	       m_axi_arready   ,
  
	input     wire  [AXI_DATA_WIDTH-1  :0]     m_axi_rdata     ,
	input     wire   		 		           m_axi_rvalid    , 
	input     wire  [1:0]                      m_axi_rresp     ,
	output    wire    		 	    	       m_axi_rready    
    );

	wire                                       wr_data_fifo_err;
	wire                                       wr_cmd_fifo_err ;
	wire                                       rd_data_fifo_err;
	wire                                       rd_cmd_fifo_err ;

	
	axi4lite_wr_channel #(
			.USER_WR_DATA_WIDTH(USER_WR_DATA_WIDTH),
			.AXI_DATA_WIDTH(AXI_DATA_WIDTH),
			.AXI_ADDR_WIDTH(AXI_ADDR_WIDTH)
		) axi4lite_wr_channel (
			.clk              (user_wr_clk),
			.axi_clk          (axi_clk),
			.reset            (reset),

			.user_wr_we       (user_wr_we),
			.user_wr_data     (user_wr_data),
			.user_wr_addr     (user_wr_addr),
			.user_wr_ready    (user_wr_ready),

			.m_axi_awaddr     (m_axi_awaddr),
			.m_axi_awprot     (m_axi_awprot),
			.m_axi_awvalid    (m_axi_awvalid),
			.m_axi_awready    (m_axi_awready),

			.m_axi_wdata      (m_axi_wdata),
			.m_axi_wstrb      (m_axi_wstrb),
			.m_axi_wvalid     (m_axi_wvalid),
			.m_axi_wready     (m_axi_wready),

			.m_axi_bresp      (m_axi_bresp),
			.m_axi_bvalid     (m_axi_bvalid),
			.m_axi_bready     (m_axi_bready),

			.wr_data_fifo_err (wr_data_fifo_err),
			.wr_cmd_fifo_err  (wr_cmd_fifo_err)
		);


	axi4lite_rd_channel #(
			.USER_RD_DATA_WIDTH(USER_RD_DATA_WIDTH),
			.AXI_DATA_WIDTH(AXI_DATA_WIDTH),
			.AXI_ADDR_WIDTH(AXI_ADDR_WIDTH)
		) axi4lite_rd_channel (
			.clk              (user_rd_clk),
			.axi_clk          (axi_clk),
			.reset            (reset),

			.user_rd_en       (user_rd_en),
			.user_rd_addr     (user_rd_addr),
			.user_rd_data     (user_rd_data),
			.user_rd_ready    (user_rd_ready),
			.user_rd_vaild    (user_rd_vaild),

			.m_axi_araddr     (m_axi_araddr),
			.m_axi_arprot     (m_axi_arprot),
			.m_axi_arvalid    (m_axi_arvalid),
			.m_axi_arready    (m_axi_arready),

			.m_axi_rdata      (m_axi_rdata),
			.m_axi_rvalid     (m_axi_rvalid),
			.m_axi_rresp      (m_axi_rresp),
			.m_axi_rready     (m_axi_rready),

			.rd_data_fifo_err (rd_data_fifo_err),
			.rd_cmd_fifo_err  (rd_cmd_fifo_err)
		);
endmodule

仿真波形:

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发

FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑),fpga开发文章来源地址https://www.toymoban.com/news/detail-848098.html

到了这里,关于FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】 xilinx vivado中AXI4通信协议详解

    AXI是ARM 1996年提出的微控制器总线家族AMBA中的一部分。AXI的第一个版本出现在AMBA3.0,发布于2003年。当前的最新的版本发布于2010年。AXI 4总线和别的总线一样,都用来传输bits信息 (包含了数据或者地址) 。AXI4总线有三种类型,分别是AXI4、AXI4-Lite、AXI4-Stream AXI4:主要面向高性能

    2024年04月28日
    浏览(44)
  • FPGA开发(4)——AXI_LITE总线协议

    对于axi总线的学习我主要是参考了赛灵思的ug1037文档以及arm的INI0022D手册,对其中的内容做了总结。 AXI是amba总线的一种,包含三种,axi full、axi lite和axi stream。 AXI工作:axi接口包含了五组通道,分别是读地址、写地址、读数据、写数据以及写响应。数据可以在主机和从机中双

    2024年01月16日
    浏览(53)
  • FPGA-基于AXI4接口的DDR3读写顶层模块

    AXI4(Advancede Xtensible Interface 4)是一种高性能、高带宽的总线接口协议,用于在系统级芯片设计中连接不同的IP核(Intellectual Property)或模块。它是由ARM公司开发的,被广泛应用于各种SoC(System-on-Chip)设计中。 AXI4接口协议定义了一组规范,用于描述数据传输、地址传输、控

    2024年04月15日
    浏览(58)
  • 上门按摩服务系统用户端功能介绍

    随着社会节奏的加快,上门按摩服务正逐渐成为一种新的生活方式。为了满足这一市场需求,我们开发了一套完善的上门按摩服务系统。该系统不仅简化了服务流程,还提供了个性化的服务体验,让用户和技术人员都能从中受益。 用户端有哪些功能呢?下面就为大家讲一讲

    2024年01月17日
    浏览(54)
  • [安全]Git用户端敏感信息检查方案

    Git仓库利用pre-commit在用户端检测敏感信息 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Git作为代码管理工具,已经被广泛使用。在实际工作中,大部分开发人员都会将代码push到远程代码管理平台,实现协同开发,比如github、gitlab等。用户在代码中

    2024年04月10日
    浏览(50)
  • RFID课程设计-图书管理系统用户端设计

    RFID课程设计-图书管理系统用户端设计 课程设计题目课程设计任务内容题目设计基本原理NFC开发概述标签调度系统如何将 NFC 标签映射到 MIME 类型和 URI如何将 NFC 标签分发到应用在 Android 清单中请求 NFC 访问权限过滤 NFC IntentACTION_NDEF_DISCOVEREDACTION_TAG_DISCOVERED从 Intent 中获取信息

    2024年02月08日
    浏览(56)
  • AXI4-Full Xilinx FPGA使用理解---信号定义理解

             一、AXI4 signal dir Xilinx 中文理解 ID类 AWID M2S Masters need only output the set of ID bits that it varies (if any) to indicate re-orderable transaction threads. Single-threaded master interfaces can omit this signal. Masters do not need to output the constant portion that comprises the Master ID, as this is appended by the AXI Interco

    2024年02月22日
    浏览(51)
  • 紫光FPGA DDR3 IP使用和注意事项(axi4协议)

    紫光DDR3 IP使用 对于紫光ddr3 IP核的使用需要注意事情。 阅读ddr ip手册: 1、注意:对于写地址通道,axi_awvalid要一直拉高,axi_awready才会拉高。使用的芯片型号时PG2L100H-6FBG676,不同的型号IP核接口和axi的握手协议也不一样(一定要注意),这点要注意,这也给我挖了一个很大的

    2024年04月12日
    浏览(51)
  • 苍穹外卖day09——历史订单模块(用户端)+订单管理模块(管理端)

    分页查询历史订单 可以根据订单状态查询 展示订单数据时,需要展示的数据包括:下单时间、订单状态、订单金额、订单明细(商品名称、图片) OrderMapper  对应的映射文件   OrderDetailMapper 测试无误 待支付和待接单状态下,用户可直接取消订单 商家已接单状态下,用户取

    2024年02月15日
    浏览(44)
  • 设备快线客户端软件V1.0用户手册

    1.前言 欢迎使用设备快线客户端软件产品。设备快线客户端软件简称DYClient,DYClient客户端是东用科技有限公司推出的一款用于远程维护的控制软件,主要为客户远程访问现场终端设备提供便捷的接入服务,并且通过DYClient客户端软件用户可以非常方便快捷的访问所有分布现场的

    2024年02月06日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包