【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.pswp.cn/diannao/82387.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82387.shtml
英文地址,請注明出處:http://en.pswp.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…