AHB總線協議詳解

一、AHB總線協議概述

AHB(Advanced High-performance Bus)總線協議是一種用於高性能、低功耗和高帶寬內部總線的標準協議。它最初由ARM公司提出,由於其在ARM處理器和其他外圍設備中的廣泛應用,現已成為業界標準。AHB總線協議主要是為了提高系統的總線帶寬,因此它具有高效性和低延遲性,在芯片內部的系統集成中廣泛應用。

AHB協議規定了物理和協議的特徵,包括總線的位寬、時序和控制信號等等。它針對高效率系統的需求設計,同時還提供了多個可編程的特性,如分塊傳輸、響應優先級控制、寄存器中斷等等。

二、AHB總線協議特性

1、總線結構

在AHB總線協議中,主設備(Masters)和從設備(Slaves)之間使用一個總線進行通信。總線上可以有多個主設備和多個從設備,但同一時刻只有一個主設備能夠訪問總線。從設備響應主設備的傳輸請求。


// 主設備對總線上一個從設備讀取數據的代碼示例

    HREAD addr[31:0];  // 地址線
    HREADYOUT;         // 從設備已經做好了相應準備
    
    // 使能信號
    if (HSEL && HTRANS[1:0] == '10' && HREADY)
    begin
        // 數據傳輸
    end

2、傳輸類型

AHB總線協議支持多種傳輸類型,包括單次傳輸、多次傳輸、同步傳輸和非同步傳輸等。


// AHB總線協議的傳輸類型代碼示例

    // 傳輸類型
    parameter HTRANS_IDLE   = 2'b00;  // 空閑
    parameter HTRANS_SINGLE = 2'b01;  // 單次傳輸
    parameter HTRANS_INCR   = 2'b10;  // 遞增傳輸
    parameter HTRANS_WRAP   = 2'b11;  // 循環傳輸

3、傳輸時序

在AHB總線協議中,總線的傳輸時序是非常重要的。它定義了主設備和從設備之間的交互,包括控制信號和數據傳輸等。具體的時序如下:


// AHB總線協議的傳輸時序代碼示例

    // 控制信號
    input HCLK;           // 時鐘信號
    input HRESETn;        // 複位信號
    output HSEL;          // 從設備使能信號
    output [1:0] HTRANS;  // 傳輸類型
    output HMASTLOCK;     // 主設備鎖
    output [31:0] HADDR;  // 地址線
    output [2:0] HSIZE;   // 數據塊大小
    output [1:0] HBURST;  // 傳輸突發模式
    
    // 數據傳輸
    input [31:0] HRDATA;  // 讀數據
    output [31:0] HWDATA; // 寫數據
    output HSPLIT;        // 寫數據分裂
    
    // 響應信號
    input HREADY;         // 就緒信號
    input HRESP;          // 響應信號

三、AHB總線協議操作過程

在使用AHB總線協議進行通信時,通常的操作過程如下:

1、主設備發起一次傳輸請求,從設備在收到這個請求後,準備發送響應信號,同時發送就緒信號,告訴主設備它可以開始傳輸了。

2、主設備準備就緒後,開始傳輸數據。如果是寫操作,主設備將數據寫入數據線,並發送寫數據使能信號,讓從設備知道數據已經到達。

3、從設備收到數據,根據情況發送響應信號,以及下一次傳輸的地址(如果是遞增或循環傳輸)。


// AHB總線協議的操作過程代碼示例

    // 主設備發起傳輸請求
    HADDR = addr;
    HSIZE = size;
    HTRANS = trans_type;
    HWRITE = write_enable;
    HMASTER = master_id;
    HPROT = protection; 
    HREADY = 1;
    
    // 從設備處理傳輸請求並準備響應
    if (HSEL && HREADY && HTRANS[1:0] != HTRANS_IDLE)
    begin
        // 寫數據
        if (HWRITE)
        begin
            HWDATA = data;
            HWRITE = 0;
            HSIZE = 'b010;  // 4字節傳輸
            HREADY = 1;
            
            // 發送響應信號
            HRESP = OKAY;
        end
        // 讀數據
        else
        begin
            HRDATA = read_data;
            HSIZE = 'b010;
            HREADY = 1;
            
            // 發送響應信號和下一個傳輸地址
            HRESP = OKAY;
            HADDR = next_addr;
        end
    end

四、AHB總線協議的分塊傳輸

為了支持大塊的數據傳輸,AHB協議提供了分塊傳輸的特性。當傳輸數據量較大時,可以將數據分成若干數據塊,從而提高傳輸效率。

在分塊傳輸模式下,源地址和目的地址在第一次傳輸時只需指定一次,後續傳輸指令只需要改變不同的傳輸塊的地址偏移。由於地址的計算是由總線控制器自動完成的,因此在一次傳輸中,不需要CPU參與。


// AHB總線協議的分塊傳輸代碼示例

    // 源地址和目的地址
    parameter SOURCE_ADDR = 'h10000000;
    parameter DEST_ADDR   = 'h20000000;
    
    // 數據塊大小
    parameter BLOCK_SIZE  = 1024;
    
    // 發送
    for (i = 0; i < DATA_LENGTH / BLOCK_SIZE; i++)
    begin
        transfer_type = i == 0 ? HTRANS_SINGLE : HTRANS_INCR;
        transfer_addr = i * BLOCK_SIZE;
        transfer_data = data[i * BLOCK_SIZE : (i+1) * BLOCK_SIZE - 1];
        
        // 傳輸數據塊
        ahb_transfer(SOURCE_ADDR + transfer_addr, DEST_ADDR + transfer_addr, BLOCK_SIZE, transfer_data, transfer_type);
    end

五、AHB總線協議的優先級

為了解決多個主設備同時請求總線的衝突問題,AHB協議提供了優先級控制的特性。

在AHB總線協議中,如果有多個主設備請求總線,那麼總線控制器會根據主設備ID和處理器當前狀態來確定哪個主設備獲得訪問優先級。一旦優先級確定,總線控制器就會為該主設備分配總線,並阻塞其他設備的請求。


// AHB總線協議的優先級控制代碼示例

    // 查找獲得訪問權限的主設備
    for (i = 0; i  max_priority || requesting_master == -1))
        begin
            max_priority = ahb_priority[i];
            requesting_master = i;
        end
    end
    
    // 分配總線
    if (requesting_master != -1)
    begin
        ahb_master_t master = top.masters[requesting_master];
        // 禁止其他請求
        for (i = 0; i < NUM_MASTERS; i++)
            top.masters[i].busy = i != requesting_master;
        // 給予訪問權限
        master.granted = 1;
        master.busy = 1;
        ahb_priority[requesting_master] = 0;
    end

六、AHB總線協議的寄存器中斷

AHB協議可以通過觸發中斷來響應設備的請求。中斷可以由設備內部產生,也可以由總線控制器生成,以便所連接的處理器可以及時處理。

在AHB總線協議中,中斷被認為是一種控制交換。主設備會發送一個中斷請求給從設備,從設備會在響應信號中反饋中斷信號,使主設備可以正確地處理中斷請求。


// AHB總線協議的寄存器中斷代碼示例

    // 發送中斷請求
    HADDR = 'h40000000;
    HTRANS = HTRANS_IDLE;
    HSIZE = HSIZE_WORD;
    HWRITE = 1;
    HWDATA = (1 << 4) | (1 << 2) | irq_idx;
    HMASTER = MASTER_ID_CPU;
    ahb_transfer(HADDR, HWDATA, HSIZE, HTRANS, HMASTER, HWRITE);
    
    // 從設備響應中斷請求
    if (HSEL && HWRITE && HREADY)
    begin
        interrupt[irq_idx] = 1'b1;
        // 響應信號中的中斷請求
        HRESP = OKAY;
        HREADY = 1;
    end

總結

通過以上的分析,我們了解了AHB總線協議在內部通信中的作用和特點。AHB總線協議具有高效性、低延遲性、分塊傳輸、優先級控制、寄存器中斷等多種特性,適用於各種類型的ARM處理器和外圍設備的通信。在實際使用過程中,需要根據不同的系統架構和應用場景進行合理的設計和優化,以提高總線效率和系統穩定性。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/239062.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:14
下一篇 2024-12-12 12:14

相關推薦

  • 機智雲gagent屬於哪個協議?

    機智雲gagent主要是基於MQTT協議,同時支持TCP、TLS、WebSocket等多種協議。 一、MQTT協議介紹 MQTT全稱Message Queuing Telemetr…

    編程 2025-04-29
  • 使用Netzob進行網絡協議分析

    Netzob是一款開源的網絡協議分析工具。它提供了一套完整的協議分析框架,可以支持多種數據格式的解析和可視化,方便用戶對協議數據進行分析和定製。本文將從多個方面對Netzob進行詳…

    編程 2025-04-29
  • 如何取消火車票自動搶票協議

    火車票自動搶票協議,是一種利用技術手段在系統繁忙的情況下,自動刷取並搶購火車票的行為。雖然在某些情況下能夠提高購票成功率,但是也會影響其他乘客的購票權益。因此,取消火車票自動搶票協…

    編程 2025-04-29
  • USB協議棧

    USB(Universal Serial Bus)是一種常見的計算機外部接口,它已經被廣泛使用在各種設備中,例如打印機、鍵盤、鼠標等。在實現USB通信的過程中,USB協議棧起着非常…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分布式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25

發表回復

登錄後才能評論