【AXI总线专题】-AXI-LITE总线解读

【AXI总线专题】-AXI-LITE总线解读

  • 1.axi-lite概述
  • 2.信号定义
    • Write address channel
    • Write data channel
    • Write response channel
    • Read address channel
    • Read data channel
  • 3.测试
  • 4.仿真波形
  • 5.工程文件

参考手册
《3-2-03米联客2022版AXI4总线专题-20211123.pdf》
《IHI0022E_amba_axi_and_ace_protocol_spec.pdf》
内容已包含在下载文件中

1.axi-lite概述

AXI-LITE总线只支持单次突发,也就是说每次传输只能传一个数据。另外,传输的数据位宽只支持32bit或者64bit
在这里插入图片描述

2.信号定义

在这里插入图片描述

Write address channel

在这里插入图片描述在这里插入图片描述在这里插入图片描述
AWPORT一般默认为0,定义为:

output wire [2 : 0] M_AXI_AWPROT,

Write data channel

在这里插入图片描述在这里插入图片描述
这里的WSTRB类似与掩码。如果总线位宽为32bit,则WSTRB[3:0]=4’b1111,表示32bit位宽的数据每一位都是有效的。

Write response channel

在这里插入图片描述在这里插入图片描述在这里插入图片描述
BRESP反馈信号的值,返回值为0表示OKAY;注意这里的valid的方向,是从机到主机,和上面的写地址通道以及写数据通道是反方向的。

Read address channel

在这里插入图片描述在这里插入图片描述在这里插入图片描述

Read data channel

在这里插入图片描述在这里插入图片描述

3.测试

使用代码手动实现一个axi-lite-master的功能。用户可以通过该代码,对axi-lite-slave进行读写操作。
需要注意的是,该代码中使用了fifo对数据进行缓存。目的是axi-lite只支持单次突发,也就是一次只能传输一个数据。但是用户侧如果在执行写操作的时候,往往会一次性写入很多数据,这里就需要通过fifo执行缓存,数据先写入fifo,然后再慢慢通过axi-lite发送出去。
axi-lite-slave使用官方生成的代码。
仿真tb代码参考如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2025/05/07 15:25:31
// Design Name: 
// Module Name: sim_top_tb
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module sim_top_tb();reg clk,rst;initial beginrst = 0;#100;@(posedge clk)rst = 1;
end always beginclk = 0;#10;clk = 1;#10;
endparameter                       P_ADDR_WIDTH = 32;
parameter                       P_DATA_WIDTH = 32;  
wire                           M_AXI_ACLK        ;
wire                           M_AXI_ARESETN     ;wire  [P_ADDR_WIDTH - 1 : 0]   M_AXI_AWADDR      ;
wire  [2 :0]                   M_AXI_AWPROT      ;
wire                           M_AXI_AWVALID     ;
wire                           M_AXI_AWREADY     ;wire  [P_DATA_WIDTH - 1   : 0] M_AXI_WDATA       ;
wire  [P_DATA_WIDTH/8 - 1 : 0] M_AXI_WSTRB       ;
wire                           M_AXI_WVALID      ;
wire                           M_AXI_WREADY      ;wire  [1 :0]                   M_AXI_BRESP       ;
wire                           M_AXI_BVALID      ;
wire                           M_AXI_BREADY      ;wire  [P_ADDR_WIDTH - 1 : 0]   M_AXI_ARADDR      ;
wire  [2 :0]                   M_AXI_ARPROT      ;
wire                           M_AXI_ARVALID     ;
wire                           M_AXI_ARREADY     ;wire  [P_DATA_WIDTH - 1   : 0] M_AXI_RDATA       ;
wire  [1 :0]                   M_AXI_RRESP       ;
wire                           M_AXI_RVALID      ;
wire                           M_AXI_RREADY      ;
reg  [P_ADDR_WIDTH - 1:0]     ri_write_addr      ;
reg  [P_DATA_WIDTH - 1:0]     ri_write_data      ;
reg                           ri_write_valid     ;
reg  [P_ADDR_WIDTH - 1:0]     ri_read_addr       ;
reg                           ri_read_valid      ;
wire  [P_DATA_WIDTH - 1:0]    w_read_data        ;
wire                          w_read_data_valid  ;assign  M_AXI_ACLK     =  clk;  
assign  M_AXI_ARESETN  =  rst;
//assign  M_AXI_WSTRB    =  1;AXI_LITE_Master#(.P_ADDR_WIDTH        (P_ADDR_WIDTH     ) ,.P_DATA_WIDTH        (P_DATA_WIDTH     ) //axi-lite总线支持32bit和64bit两种位宽
)
AXI_LITE_Master_u0
(         /*----axi lite----*/ .M_AXI_ACLK          (M_AXI_ACLK       ),.M_AXI_ARESETN       (M_AXI_ARESETN    ),  .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_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     ),     .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_RRESP         (M_AXI_RRESP      ),.M_AXI_RVALID        (M_AXI_RVALID     ),.M_AXI_RREADY        (M_AXI_RREADY     ),/*----user prot----*//*为什么分axi接口和用()户接口。这里的是将用户自定义接口转成axi接口,这样就可以和axi接口的其他IP直接相连*/.i_write_addr        (ri_write_addr    ),.i_write_data        (ri_write_data    ),.i_write_valid       (ri_write_valid   ),     .i_read_addr         (ri_read_addr     ),.i_read_valid        (ri_read_valid    ),.o_read_data         (w_read_data      ),.o_read_data_valid   (w_read_data_valid)
);axi_lite_slave_v1_0_S00_AXI #(.C_S_AXI_DATA_WIDTH	(P_DATA_WIDTH),.C_S_AXI_ADDR_WIDTH	(P_ADDR_WIDTH))
axi_lite_slave_v1_0_S00_AXI_u0(.S_AXI_ACLK        (M_AXI_ACLK    ),.S_AXI_ARESETN     (M_AXI_ARESETN ),.S_AXI_AWADDR      (M_AXI_AWADDR  ),.S_AXI_AWPROT      (M_AXI_AWPROT  ),.S_AXI_AWVALID     (M_AXI_AWVALID ),.S_AXI_AWREADY     (M_AXI_AWREADY ),.S_AXI_WDATA       (M_AXI_WDATA   ),   .S_AXI_WSTRB       (M_AXI_WSTRB   ),.S_AXI_WVALID      (M_AXI_WVALID  ),.S_AXI_WREADY      (M_AXI_WREADY  ),.S_AXI_BRESP       (M_AXI_BRESP   ),.S_AXI_BVALID      (M_AXI_BVALID  ),.S_AXI_BREADY      (M_AXI_BREADY  ),.S_AXI_ARADDR      (M_AXI_ARADDR  ),.S_AXI_ARPROT      (M_AXI_ARPROT  ),.S_AXI_ARVALID     (M_AXI_ARVALID ),.S_AXI_ARREADY     (M_AXI_ARREADY ),.S_AXI_RDATA       (M_AXI_RDATA   ),.S_AXI_RRESP       (M_AXI_RRESP   ),.S_AXI_RVALID      (M_AXI_RVALID  ),.S_AXI_RREADY      (M_AXI_RREADY  ));task write_data(input [31:0] addr,input [31:0]data);
begin:write_taskri_write_addr  <= 'd0;ri_write_data  <= 'd0;ri_write_valid <= 'd0;@(posedge clk);ri_write_addr  <= addr;ri_write_data  <= data;ri_write_valid <= 'd1;@(posedge clk);ri_write_addr  <= 'd0;ri_write_data  <= 'd0;ri_write_valid <= 'd0;@(posedge clk);
end
endtasktask read_data(input [31:0] addr);
begin:read_taskri_read_addr   <= 'd0;ri_read_valid  <= 'd0;@(posedge clk);ri_read_addr   <= addr;ri_read_valid  <= 'd1;@(posedge clk);ri_read_addr   <= 'd0;ri_read_valid  <= 'd0;@(posedge clk);
end
endtaskinitial
beginri_write_addr  = 0;ri_write_data  = 0;ri_write_valid = 0;ri_read_addr   = 0;ri_read_valid  = 0;wait(rst);//wait后面的括号中填的是退出等待的条件repeat(10);write_data(10,100);//这边的代码是顺序执行的,先写再读read_data(10);forkwrite_data(1,99);//使用fork需要注意的是,这两句代码是并行执行,不是顺序执行的read_data(1);//也就是同时执行写和读的操作joinendendmodule

4.仿真波形

下图所示,是在tb中执行用户端口信号的操作
首先是往地址为10的空间写入数据100;然后再执行读地址100处的数据,这里就有先写后读的顺序
其次是往地址为1的空间写入数据99;同时执行读操作。这里的写和读就是同时进行的
在这里插入图片描述

用户侧的逻辑代码,到axi这里实现的效果如下。
在上面我们执行往地址1处写入数据99的操作,同时执行读操作。到axi这里就进行了仲裁,把原来同时进行的读写,这里进行了变换,可以看出,先往地址1上写入数据99;然后再执行了读的操作。
在这里插入图片描述

5.工程文件

基于axi-lite-master的逻辑代码实现与仿真

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

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

相关文章

在企业级项目中高效使用 Maven-mvnd

1、引言 1.1 什么是 Maven-mvnd? Maven-mvnd 是 Apache Maven 的一个实验性扩展工具(也称为 mvnd),基于守护进程(daemon)模型构建,目标是显著提升 Maven 构建的速度和效率。它由 Red Hat 推出,通过复用 JVM 进程来减少每次构建时的启动开销。 1.2 为什么企业在构建过…

网络字节序 - 大端

回顾主机字节序 - 大小端 发送主机将发送缓冲区中的数据按内存地址从低到高的顺序发出接收主机把从网络上接收到的数据按内存地址从底到高的顺序依次保存到接收缓冲区TCP/IP 规定&#xff0c;网络数据流应采用大端字节序&#xff0c;即低地址高字节&#xff0c;也就是说&#…

《被讨厌的勇气》书摘

阿德勒心理学考虑的不是过去的“原因”&#xff0c;而是现在的“目的”。你的朋友并不是因为不想到外面去&#xff0c;才制造出不安的情绪。是先有了“不出去”这个目的&#xff0c;之后才会为了达到这个目的而制造出不安或者恐惧之类的情绪。 个人见解&#xff1a;这是阿德勒…

打造专属AI好友:小智AI聊天机器人详解

打造专属AI好友&#xff1a;小智AI聊天机器人详解 在当下的科技热潮中&#xff0c;AI正迅速改变着我们的生活&#xff0c;成为了科技领域的新宠。而今&#xff0c;借助开源项目的力量&#xff0c;你可以亲手打造一个智能小助手——小智AI聊天机器人。它不仅是一个技术探索的窗…

如何利用爬虫获得1688商品详情:实战指南

在电商运营和市场分析中&#xff0c;获取1688商品详情数据是一项重要任务。本文将详细介绍如何利用爬虫技术获取1688商品详情&#xff0c;包括准备工作、爬虫实现步骤以及注意事项。 一、准备工作 &#xff08;一&#xff09;注册1688开放平台账号 在1688开放平台注册开发者…

如何优化系统启动时间--基于米尔瑞萨MYD-YG2LX开发板

1.概述 MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器&#xff0c;该处理器搭载双核Cortex-A551.2GHzCortex-M33200MHz处理器&#xff0c;其内部集成高性能3D加速引擎Mail-G31 GPU(500MHz)和视频处理单元&#xff08;支持H.264硬件编解码&#xff09;,16位的DDR4-1600 / DDR3L-1333内…

QML 图像变换(缩放、平移、旋转)

目录 引言相关阅读基础知识工程结构核心代码解析示例1&#xff1a;图像缩放&#xff08;ImageScale.qml&#xff09;代码说明运行效果 示例2&#xff1a;图像平移&#xff08;ImageTransform.qml&#xff09;代码说明运行效果 示例3&#xff1a;图像旋转&#xff08;ImageRotat…

Linux 系统命令使用指南1

适用于 Red Hat / CentOS / Rocky Linux 等系统的基本初始化配置操作。 &#x1f512; 1. 关闭 SELinux&#xff08;临时生效&#xff09; setenforce 0⚠️ 注意&#xff1a;此命令仅临时关闭 SELinux&#xff0c;重启后可能恢复。要永久关闭&#xff0c;请修改 /etc/selinux…

1.2.1 Linux音频系统发展历程简介

Linux音频系统的发展经历了从最初的简单驱动到今天多层次、模块化音频架构。简要梳理其主要历程&#xff1a; 早期的OSS&#xff08;Open Sound System&#xff09; 在90年代及2000年代初&#xff0c;Linux主要使用OSS来支持音频。OSS直接为硬件设备&#xff08;如声卡&#…

【Linux操作系统】第一弹——Linux基础篇

文章目录 &#x1f4a1; 一. Linux的基本常识&#x1fa94; 1.1 linux网络连接三种方式&#x1fa94;1.2 虚拟机的克隆&#x1fa94;1.3 虚拟机的快照&#x1fa94;1.4 虚拟机的迁移和删除&#x1fa94;1.5 vmtools工具 &#x1f4a1;二. Linux的目录结构&#x1fa94;2.1 Linu…

STM32printf重定向到串口含armcc和gcc两种方案

STM32串口重定向&#xff1a;MDK与GCC环境下需重写的函数差异 在嵌入式开发中&#xff0c;尤其是使用 STM32系列微控制器 的项目中&#xff0c;调试信息的输出是不可或缺的一部分。为了方便调试&#xff0c;开发者通常会选择将 printf 等标准输出函数通过 UART 串口发送到 PC …

C++ 文本读写与二进制读写的底层机制

1.文件的打开方式 1.文本打开 在windows中,写入时会将\n换成\r\n,读出时\r\n会读出\n linux对\n读写不做处理 2.二进制打开 对\n读写不做处理 2.文本读写 1.数据要先变成字符串再写进缓冲区 2.字符串直接写进缓冲区就是 3.c对文本读写的支持 istream/ostream中重载了对…

02 mysql 管理(Windows版)

一、启动及关闭 MySQL 服务器 1.1 通过 “服务” 管理工具 winr打开运行&#xff0c;输入services.msc 找到MySQL80&#xff0c;这个是我们在安装mysql的时候给的服务的名称&#xff0c;具体见文章mysql 安装 右键选择启动或者停止。 1.2 通过命令提示符 1.2.1 关闭命令…

Elasticsearch知识汇总之 ElasticSearch高可用方案

六 ElasticSearch高可用方案 6.1 高可用架构 请求协调节点根据负载均衡&#xff0c;转发给主分片节点&#xff0c;主分片同步复制给从节点&#xff0c;主从节点都写入完成返回客户端请求成功。对于读请求&#xff0c;协调负载到任意节点数据节点&#xff0c;数据节点把各自符合…

H5 移动端适配最佳实践落地指南。

文章目录 前言一、为什么需要移动端适配&#xff1f;二、核心适配方案1. 视口&#xff08;Viewport&#xff09;设置2. 三种适配方案 &#xff08;仅供参考&#xff09;&#xff08;1&#xff09;rem 适配方案&#xff08;2&#xff09;vw/vh 适配方案&#xff08;3&#xff09…

MySQL初阶:数据库约束和表的设计

数据库约束 数据库约束是针对数据库中的表中的数据进行施加规则和条件&#xff0c;用于确保数据的准确性和可靠性。 数据库约束类型 1&#xff09;not null 非空类型 &#xff1a;指定非空类型的列不能存储null&#xff0c;如果插入的数据是null便会报错。 2&#xff09;de…

LVGL- 按钮矩阵控件

1 按钮矩阵控件 lv_btnmatrix 是 LVGL&#xff08;Light and Versatile Graphics Library&#xff09; v8 中提供的一个非常实用的控件&#xff0c;用于创建带有多个按钮的矩阵布局。它常用于实现虚拟键盘、数字键盘、操作面板、选择菜单等场景&#xff0c;特别适用于嵌入式设…

excel 批量导出图片并指定命名

一、开发环境 打开excel文件中的宏编辑器和JS代码调试 工具-》开发工具-》WPS宏编辑器 左边是工程区&#xff0c;当打开多个excel时会有多个&#xff0c;要注意不要把代码写到其他工作簿去了 右边是代码区 二、编写代码 宏是js语言&#xff0c;因此变量或者方法可以网上搜…

yolov5基础--yolov5源码阅读(common.py)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒…

5.0.5 变换(旋转、缩放、扭曲)

WPF变换可以产生特殊效果,如平移、旋转、扭曲。 变换类 描述TranslateTransform沿着X轴和Y轴平移ScaleTransform 沿着定义的中心点缩放RotateTransform沿着定义的中心点旋转SkewTransform 扭曲元素MatrixTransfrom提供3x3矩阵,用于定义一个自定义变换 1…