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 什么是片内、片外

AXI4 用途:

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

        ② ZYNQ中PS与PL交互

二、AXI_LITE通道介绍

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

        2条有关读的通道

                ·  read address   读地址

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

        3 条有关写的通道

                ·  write address    写地址

                ·  write data         写数据

                ·  write response  写响应

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

三,握手机制

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

四、AXI_LITE端口信号及其功能

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

2. WSTRB信号:

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

3. AWPORT、ARPORT信号

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

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

默认为3’b000即可。

4. BRESP和RRESP信号

其中,axi_lite 不支持 EXOKAY。

五,axi4_lite 读写过程

5.1 写过程

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

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

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

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

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

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

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

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

常用的模式为:

5.2 读过程

5.3 axi4_lite 读写过程框架图

根据读写过程分析:

用户写时,将写地址存放到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或者64bitparameter 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 channelinput     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

仿真波形:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(done) 机器学习中的方差 variance 和 偏差 bias 怎么理解?

来源:https://blog.csdn.net/weixin_41479678/article/details/116230631 情况1属于:低 bias,高 variance (和 human performance 相近,但和 验证集dev set 相远) 通常意味着模型训练轮数太多 情况2属于:高 bias&#…

微服务高级篇(三):分布式缓存+Redis集群

文章目录 一、单点Redis的问题及解决方案二、Redis持久化2.1 单机安装Redis2.2 RDB持久化2.3 AOF持久化2.4 RDB和AOF对比 三、Redis主从3.1 搭建Redis主从架构3.1.1 集群结构3.1.2 准备实例和配置3.1.3 启动3.1.4 开启主从关系3.1.5 测试 3.2 数据同步3.2.1 全量同步【建立连接…

【Web应用技术基础】HTML(5)——案例1:展示简历信息

样式&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>展示简历信息…

真机笔记(1)第一阶段知识讲解

目录 第一阶段讲解&#xff1a; 1.1 机房 1.2 分类&#xff1a; 1.3 机房建设标准 1.3.1 安全性: 1.3.2 供电&#xff1a; 1.3.3 空气调节&#xff1a;&#xff08;恒温恒湿&#xff09; 1.3.4 电磁防护&#xff1a; 2.1 机柜 2.2 分类 2.3 机柜的高度单位 3.1 设备…

【教程】PLSQL查看表属性乱码解决方法

一、前言 PL/SQL是Oracle数据库的编程语言&#xff0c;用于编写存储过程、触发器、函数等。 今天用plsql想查看表的属性&#xff0c;看看各个字段的注释&#xff0c;可是打开一看&#xff0c;居然是乱码的&#xff0c;如下面这样 如果在使用PL/SQL查看表属性时出现乱码&…

隐语笔记3 —— 隐语架构

隐语架构一览 隐语产品层 定位&#xff1a; 通过可视化产品&#xff0c;降低终端用户的体验和演示成本。通过模块化API降低技术集成商的研发成本。 人群画像&#xff1a; 隐私保护计算集成商&#xff0c;产品人员&#xff0c;隐私保护计算需求方&#xff0c;开发人员&#xff…

Flutter-仿携程首页类型切换

效果 唠叨 闲来无事&#xff0c;不小心下载了携程app&#xff0c;还幻想可以去旅游一番&#xff0c;奈何自己运气不好&#xff0c;自从高考时第一次吹空调导致自己拉肚子考试&#xff0c;物理&#xff0c;数学考了一半就交卷&#xff0c;英语2B铅笔除了问题&#xff0c;导致原…

基于modbus TCP实现EPICS与西门子S7 1200系列1215C PLC的通信

PLC介绍 西门子系列PLC在国内的市场占比第一&#xff0c;1200系列中小型PLC&#xff0c;因其众多的产品序列、强大的通讯功能和丰富扩展模块&#xff0c;被使用在工业生产、自动化生产线、智能制造、机器人等各行各业。根据CPU的供电电源的型号和数字量输出的类型&#xff0c;…

专业130+总分410+西南交通大学924信号与系统考研经验西南交大电子信息通信工程,真题,大纲,参考书。

初试分数出来&#xff0c;专业课924信号与系统130&#xff0c;总分410&#xff0c;整体上发挥正常&#xff0c;但是还有遗憾&#xff0c;其实自己可以做的更好&#xff0c;总结一下经验&#xff0c;希望对大家有所帮助。专业课&#xff1a;&#xff08;130&#xff09; 西南交…

【技术栈】Spring Cache 简化 Redis 缓存使用

​ SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 ​ 本文封面由 凯楠&#x1f4f8; 友情提供 目录 本栏传送门 1. Spring Cache 介绍 2. Spring Cache 常用注解 注&#xff1a;手机端浏览本文章…

DS-红黑树(RBTree)

一.红黑树 1.1 红黑树的起源 当对对AVL树做一些结构修改的操作时候&#xff0c;性能较为低下&#xff0c;比如&#xff1a;插入时要维护其绝对平衡&#xff0c;旋转的次数比较多&#xff0c;更差的是在删除时&#xff0c;有可能一直要让旋转持续到根的位置。 因此1972年Rudolf…

YOLOv8独家改进:backbone改进 | 视觉新主干!RMT:RetNet遇见视觉Transformer | CVPR2024

💡💡💡本文独家改进:RMT:一种强大的视觉Backbone,灵活地将显式空间先验集成到具有线性复杂度的视觉主干中,在多个下游任务(分类/检测/分割)上性能表现出色! 💡💡💡Transformer 在各个领域验证了可行性,在多个数据集下能够实现涨点 改进结构图如下: 收录 …

Canine IP-10/CXCL 10 ELISA试剂盒上新

科研用Canine IP-10/CXCL 10 ELISA试剂盒重磅来袭&#xff0c;将在免疫学、癌症研究与神经科学等多个领域助力各位老师们的研究&#xff01; 图1&#xff1a;犬IP-10/CXCL10结构预测&#xff08;图片来源&#xff1a;UniProt&#xff09; C-X-C基序趋化因子(C-X-C motif chemok…

基于飞凌嵌入式i.MX6ULL核心板的电梯智能物联网关方案

电梯是现代社会中不可或缺的基础性设施&#xff0c;为人们的生产生活提供了很大的便捷。我国目前正处于城镇化的快速发展阶段&#xff0c;由此带动的城市基础设施建设、楼宇建设、老破小改造等需求也让我国的电梯行业处在了一个高速增长期。截至2023年年底&#xff0c;中国电梯…

UE5 GameMode C++函数 学习

已经尝试&#xff0c;确实能重启游戏 类描述符加了noplaceable过后即使是Actor也不能放到场景中了&#xff0c;关卡蓝图&#xff0c;GameMode&#xff0c;GameState这些就不能放场景中了 UFUNCTION(exec)

ruoyi-nbcio-plus基于vue3的flowable增加开始节点的表单绑定修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

Android Studio Gradle设置查看全部task

如果你在 Android Studio 的 Gradle 窗口中看不到所有的任务&#xff0c;你可以尝试以下步骤来解决这个问题 android studio 版本&#xff1a; Android Studio Iguana | 2023.2.1 Build #AI-232.10227.8.2321.11479570, built on February 22, 2024 打开 Android Studio 的设置…

行业官网:律师行业官网解决方案和案例

hello&#xff0c;我是大千UI工厂&#xff0c;从此篇开始介绍各行业官网建设的解决方案 和经典案例&#xff0c;本期介绍律师行业&#xff0c;欢迎老铁们关注、评论、如有设计需求可以私信我们。 一、高大上律师官网有什么作用 高大上官网对律师行业的作用主要体现在以下几个…

传输线和串扰(一):串扰的叠加以及耦合的起源

串扰是六大信号完整性问题之一。它是将不需要的信号从一个网络传输到相邻网络&#xff0c;并且发生在每对网络之间。网络包括信号路径和返回路径&#xff0c;它连接系统中的一个或多个节点。我们通常将具有噪声源的网络称为主动网络或攻击网络。产生噪声的网络称为安静网络或受…

机器学习 - 训练模型

接着这一篇博客做进一步说明&#xff1a; 机器学习 - 选择模型 为了解决测试和预测之间的差距&#xff0c;可以通过更新 internal parameters, the weights set randomly use nn.Parameter() and bias set randomly use torch.randn(). Much of the time you won’t know what…