那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是APB協(xié)議/總線?APB總線入門

jf_GctfwYN7 ? 來源:芯時代青年 ? 2024-01-02 11:37 ? 次閱讀

上一篇文章簡單講解了什么是AMBA總線,簡單來說,AMBA總線是一系列協(xié)議。定義了適用于不同場景的總線家族。今天我們就來講AMBA總線中最簡單的APB總線。

什么是APB協(xié)議/總線

APB的全稱為Advanced Peripheral Bus。顧名思義,其設計之初的主要目的就是用該協(xié)議連接外設。但由于APB總線自發(fā)布至今已經過去了20多年了,因此以現(xiàn)在的眼光看,該總線沒有什么高級一說,其連接的外設也往往是低速且低功率的外設,如I2CUART、SPI等,除了連接低速外設之外,APB總線還廣泛用于配置各種IP的寄存器(這些IP預留用戶控制信號,由軟件進行配置,這個時候就可以選擇使用APB總線來配置這些寄存器)。

下圖為一個典型的AMBA總線的系統(tǒng)架構:其中APB總線是AHB總線的擴展,方便外設連接到系統(tǒng)總線上,其中AHB和APB之間有一個轉接橋來進行連接。

00aee97c-a636-11ee-8b88-92fbcf53809c.jpg

此外為了使得APB能夠容易的被整合進大部分的設計流程中,APB規(guī)定所有的信號必須在時鐘的上升沿進行傳遞。

下面簡單介紹一下APB的發(fā)展歷史,ARM公司于1998年發(fā)布了APB2,又于2003年發(fā)布了APB3,在2010年又發(fā)布了APB4。目前最常見的為APB3或APB4,其主要區(qū)別如下:

APB2:APB總線的基礎版本。

APB3:

增加PREADY信號:用于反壓master(其在讀和寫兩個場景中含義略有不同,過會講解)。

增加PSLVERR:用于代表傳輸是否發(fā)生錯誤。

APB4:

增加PPROT保護信號。

增加PSTRB代表字節(jié)選通。

APB2協(xié)議

APB2信號列表

對于AMBA協(xié)議,APB的信號都是以P開頭,AHB的信號都是以H開頭,而AXI的信號都是以A開頭。大家自己設計的時候也應該遵循這一規(guī)則。這樣一看信號名就知道使用的是什么協(xié)議。APB2的信號列表如下表所示:

Signal name Direction Description
PCLK Global 時鐘信號,上升沿同步
PRESETn Global APB總線復位信號為低有效并且通常將該信號直接連接到系統(tǒng)總線的復位信號
PADDR M-->S 地址總線,最多可高達32位
PSEL M-->S 通信號,當該信號拉高意味著要發(fā)起一次傳輸了
PENABLE M-->S 使能信號,用于表示一次APB傳輸?shù)牡诙€周期(在阻塞情況下為第二個及以上的周期,該信號的存在完全是歷史遺留問題,后面詳細講)
PWRITE M-->S 該信號為高標志這次是寫傳輸,反之則為讀傳輸
PWDATA M-->S 寫數(shù)據(jù)總線,由Master在寫周期進行持續(xù)性驅動(PWRITE為高),最高可達32位。
PRDATA S-->M 讀數(shù)據(jù)總線,由Slave在讀周期進行持續(xù)性驅動(PWRITE為低),最高可達32位。

寫操作時序

00c2c384-a636-11ee-8b88-92fbcf53809c.jpg

可以看到寫操作非常的簡單:

T2->T3這一個周期

PSEL信號拉高,意味著要發(fā)起一次新的傳輸了。

PWRITE信號為1,因此此次傳輸為寫操作。

PWDATA為要傳輸?shù)臄?shù)據(jù),PADDR為要寫的地址。二者都應該保持不變,直到此次傳輸結束。

而PSEL拉高的第一個時鐘周期,PENABLE應該為0。

T3->T4這一個周期

PSEL信號繼續(xù)拉高

PWRITE、PADDR、PWDATA應該保持不變

PENABLE信號拉高,用于代表這已經是寫傳輸?shù)牡诙€周期了

至此一次傳輸結束。可以看到,APB對每一筆數(shù)據(jù)的傳輸,需要花費兩個時鐘周期。且APB的數(shù)據(jù)傳輸不支持流水線操作(即不可以重疊)。因此APB是非常低效的。

理論上寫數(shù)據(jù)完全可以同時給出寫地址和寫數(shù)據(jù),一拍就搞定,為什么APB要大費周章弄成兩拍呢?這主要是那個年代的芯片本身的制程工藝以及片上互連線導致的。一個周期可能無法完成從Master向Slave寫入數(shù)據(jù)的整個操作流程。因此采用兩拍的方式,第一拍告訴你,我要開始傳輸啦!(稱為setup phase)第二拍才真正的完成數(shù)據(jù)的傳輸。(稱為access phase)。

如果Master想要馬上發(fā)起一次新的傳輸,可以不拉低PSEL讓其繼續(xù)為1,但是必須要將PENABLE拉低。否則Slave側的判斷邏輯就會出現(xiàn)問題!

由于APB向下兼容,這一歷史遺留問題一直延續(xù)至今。不過好在APB應用的場景本身就是配置寄存器等操作,因此多花一個時鐘周期也沒什么大不了的。

讀操作時序

00d6e1ac-a636-11ee-8b88-92fbcf53809c.jpg

可以看到讀操作非常的簡單,跟寫幾乎一樣。這里就不再做詳細的解釋了。

要特別注意的是,T3以后,也就是進入ENABLE周期后,APB的SLAVE設備必須要將M所需要讀取的數(shù)據(jù)準備好,以便M可以在ENABLE的周期末也就是T4正時鐘沿觸發(fā)時正確的將數(shù)據(jù)讀取。

APB的狀態(tài)機

APB2的狀態(tài)機如下所示:

IDLE:此時為默認狀態(tài)。PSEL和PENABLE都為0,沒有通信請求。

SETUP:當需要發(fā)起傳輸?shù)臅r候,會進入該狀態(tài),此時PSEL為1,PENABLE為0。PSEL從0到1說明要發(fā)起一次傳輸了,而PENABLE為0表示這是傳輸?shù)牡谝粋€時鐘周期。(這個狀態(tài)也就是setup phase)

ENABLE:這個狀態(tài)PENABLE需要拉高,進而完成數(shù)據(jù)的傳輸。

00e2e196-a636-11ee-8b88-92fbcf53809c.jpg

這個狀態(tài)機模型只是便于我們的理解。并且這個狀態(tài)機模型是針對整個傳輸過程而言的。對于實際的master或者slave的設計完全可以不用狀態(tài)機實現(xiàn)。甚至slave都可以用純粹的組合邏輯來實現(xiàn),下面會講到如何實現(xiàn)。

APB2速問速答

Q:貌似根據(jù)上面的狀態(tài)機模型以及讀寫時序圖。有沒有PENABLE信號實際上都可以完成APB傳輸,那么APB slave是否真的需要penable信號?

A:分兩種情況討論:

如果APB slave有PCLK時鐘信號的話,那么確實是不需要penable信號的。檢測到PSEL為高,即進入到access階段。然后在第二個時鐘周期完成數(shù)據(jù)傳輸即可。相應的代碼如下所示(這段代碼是網上找到的)

`timescale 1ns/1ps
`define DATAWIDTH 32
`define ADDRWIDTH 8
`define IDLE     2'b00
`define W_ENABLE  2'b01
`define R_ENABLE  2'b10
module APB_Slave
(
 input                         PCLK,
 input                         PRESETn,
 input        [`ADDRWIDTH-1:0] PADDR,
 input                         PWRITE,
 input                         PSEL,
 input        [`DATAWIDTH-1:0] PWDATA,
 output reg   [`DATAWIDTH-1:0] PRDATA,
);
reg [`DATAWIDTH-1:0] RAM [0:2**`ADDRWIDTH -1];
reg [1:0] State;
always @(negedge PRESETn or posedge PCLK) begin
 if (PRESETn == 0) begin
   State <= `IDLE;
   PRDATA <= 0;
   end
 else begin
   case (State)
     `IDLE : begin
       PRDATA <= 0;
       if (PSEL) begin
         if (PWRITE) begin
           State <= `W_ENABLE;
         end
         else begin
           State <= `R_ENABLE;
         end
       end
     end


     `W_ENABLE : begin
       if (PSEL && PWRITE) begin
         RAM[PADDR]  <= PWDATA;      
       end
         State <= `IDLE;
     end


     `R_ENABLE : begin
       if (PSEL && !PWRITE) begin
         PRDATA <= RAM[PADDR];
       end
       State <= `IDLE;
     end
     default: begin
       State <= `IDLE;
     end
   endcase
 end
end
endmodule

當PSEL & !PENABLE為1的時候,代表是setup stage,實際上此時slave什么都不用干

當PSEL & PENABLE為1的時候,代表是access stage,slave順勢完成數(shù)據(jù)傳輸即可

如果APB slave是純粹的組合邏輯,也就是沒有PCLK的情況下。這個時候是需要penable信號的。

APB3協(xié)議

新增的兩個信號

APB3在APB2的基礎上增加了兩個信號,PREADY和PSLVERR,這兩個信號都是由slave產生的。

對于寫操作而言,PREADY信號用于標志slave設備是否已經準備好接收這一筆數(shù)據(jù)。而對于讀操作而言,PREADY信號用于標志slave設備是否已經準備好了要返回給Master的數(shù)據(jù)。

有了PREADY信號,從機就可以反壓主機。因此PREADY這個信號可以說是非常的棒啊,它讓主從之間的通信更加的可靠,也增加了從機的控制能力,不至于出現(xiàn)主機寫的數(shù)據(jù)從機壓根沒收到或者從機沒有準備好讀數(shù)據(jù),進而主機讀到錯誤的數(shù)據(jù)的情況。

此外我再講解一下為什么會出現(xiàn)從機沒有準備好的情況。對于讀操作而言,非常好理解,你要讀的數(shù)據(jù)我還沒準備好呢(可能正在運算),那我當然不能拉高PREADY,不然就給了你錯誤的數(shù)據(jù)了。只有我數(shù)據(jù)準備好的時候,我拉高PREADY,這樣才能確保讀不出問題。而寫的話,這種情況往往出現(xiàn)在寫特定的地址,這個時候外設本身要進行判斷是否可以寫,因此兩個周期就完成不了,就暫時不能拉高PREADY,你的Master就必須要維持住。當PREADY拉高代表這一拍能夠寫進去了。因此主機也就可以不再維持原有的狀態(tài)了。

PSLVERR,(apb slave error)顧名思義。用于從slave向master返回傳輸錯誤,這個錯誤是slave自己定義的,比如寫了不允許寫的地址,即非法地址訪問。或者是訪問超時了,slave回應不了了。就可以拉高這個信號,從而避免總線鎖死。

寫操作時序

00ea4b5c-a636-11ee-8b88-92fbcf53809c.jpg

上圖是沒有wait states的情況。兩拍完成寫操作。和APB2的區(qū)別在于多了個PREADY,需要在傳輸?shù)牡诙囊簿褪钦嬲l(fā)生數(shù)據(jù)傳輸?shù)哪且慌睦摺F渌暮蜕厦娴膶憰r序是一模一樣的,因此不再講解。

00fd78e4-a636-11ee-8b88-92fbcf53809c.jpg

我們再看看有wait states的情況,上圖四拍才完成寫操作。此時setup還是一個周期(從T1->T2),而access是三個時鐘周期(從T2->T5)。可以看到主機的信號應該保持不變,一直持續(xù)到從機的PREADY信號拉高以后,等待拉高以后的這一拍完成傳輸,才可以改變其它的信號。(即T1->T5這段過程,PADDR、PWRITE、PSEL、PWDATA都應該保持不變)。

讀操作時序

0101372c-a636-11ee-8b88-92fbcf53809c.jpg

我們直接看復雜點的情況,可以看到PREADY信號和PRDATA信號在同一拍發(fā)生變化。此時的PREADY信號也可以理解為從機此時提供的PRDATA才是有效的數(shù)據(jù)。進而完成了一次完整的傳輸過程。

Error response

010b9884-a636-11ee-8b88-92fbcf53809c.jpg

以寫為例,實際上就是在真正發(fā)起傳輸?shù)哪且慌模ㄒ簿褪荘READY拉高的那一拍)順勢拉高PSLVERR,用于標志這次傳輸失敗。

為什么需要APB4?

APB4在APB3的基礎上又增加了PPROT和PSTRB信號。

PPROT信號有三個比特,含義分別如下:

011a785e-a636-11ee-8b88-92fbcf53809c.jpg

對于CPU而言,可以工作在用戶模式下也可以工作在特權模式下(比如RISC-V的USM三種模式)。對于支持trustzone的CPU,可以工作在secure world下,也可以工作在normal mode下。又由于現(xiàn)在的系統(tǒng)越來越復雜了,以前的外設是隨意讀寫都可以,現(xiàn)在的一些外設或memory(比如一些CSR寄存器,Trusted RAM等)要求只能在secure下或者privileged模式下訪問,因此就需要PPROT信號。

而PSTRB信號則比較好理解,它允許稀疏的寫。其中的每一個比特對應于PWDATA的每一個字節(jié)。用1代表PWDATA的這一字節(jié)是否有效,其對應關系如下圖所示:

012caa74-a636-11ee-8b88-92fbcf53809c.jpg

至于讀的話把PSTRB隨便讓它是啥就行,不翻轉最好以減少功耗。這個信號是針對寫而言的,讀的話無所謂。

APB4和APB3以及APB3和APB2的兼容性問題

以APB4的slave和APB3的master為例,這個時候應該把PSTRB信號固定為全1,PPROT信號則取決于Slave是如何使用該信號的,根據(jù)不同的場景固定為不同的值。

而APB3的slave和APB4的master相連接,這個時候實際上需要一個轉接橋,因為本身可能只想寫某一個字節(jié),而slave此時不支持也不知道,那就需要一個中間邏輯將pwdata變成想要的值。(比如讀回來時32'h2345,想將最高字節(jié)改寫為6,此時只寫一個32'h6000,PSTRB為1000,標志別的字節(jié)不要動。這個時候就需要一個中間邏輯將寫的數(shù)據(jù)變成32'h6345)。實際上寫起來也很麻煩,因此此時最好將APB3的slave改成APB4協(xié)議。

至于APB3和APB2不建議一起用,因為APB2沒有PREADY反壓機制,因此實際使用起來完全不一樣,強行一起用會有巨大的坑。








審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1369

    瀏覽量

    115002
  • AMBA總線
    +關注

    關注

    0

    文章

    35

    瀏覽量

    9612
  • 狀態(tài)機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27647

原文標題:【芯片設計】深入理解AMBA總線(一)APB總線入門

文章出處:【微信號:IC修真院,微信公眾號:IC修真院】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    APB和AHB總線區(qū)別

    一、概括 首先,說點不靠譜的,APB和AHB總線,我個人感覺這個類似于個人PC系統(tǒng)里的北橋和南橋總線。 南橋總線上掛接的都是鼠標、鍵盤這些慢速的設備,北橋上掛接顯卡等高速設備。南橋頻率
    發(fā)表于 08-20 06:18

    ARM總線協(xié)議AMBA中AHB、APB的區(qū)別與聯(lián)系

    , ASB, APB);Qchannel文章目錄1 AMBA總線2 AHB2.1 一個典型的基于AHB的微控制器2.2 AHB總線互聯(lián)結構:中心選擇器連接master與slave2.3 AHB的特性3
    發(fā)表于 02-09 07:46

    AMBA AHB總線APB總線資料合集

    使用的是 SystemVerilog 描述。2、AMBA APB總線信號接口介紹前面分析了AHB總線協(xié)議。接下來分析APB
    發(fā)表于 04-07 10:03

    AMBA中的APB總線協(xié)議詳解

    APB總線只支持單主機模式。概念4:總線協(xié)議(Bus Protocol)在這條水果運輸總線里面,水果店按照自己的需求,發(fā)起訂單,廠商提供水果
    發(fā)表于 06-07 16:14

    APB總線的應用框圖及接口信號

    APB(AdvancedPeripheralBus)是AMBA(AdvancedMicrocontrollerBusArcheticture)總線體系的一部分。相較于AMBA總線體系中的其他
    發(fā)表于 11-17 11:54 ?1.3w次閱讀
    <b class='flag-5'>APB</b><b class='flag-5'>總線</b>的應用框圖及接口信號

    淺述AMBA-APB總線

    1 APB介紹 高級外設總線APB) 是高級微控制器總線架構 (AMBA) 協(xié)議系列的一部分。它定義了一個低成本接口,該接口針對最低功耗
    的頭像 發(fā)表于 07-23 10:04 ?2339次閱讀
    淺述AMBA-<b class='flag-5'>APB</b><b class='flag-5'>總線</b>

    數(shù)字IC驗證:ARM總線協(xié)議AMBA中AHB、APB的簡介、區(qū)別與聯(lián)系

    , ASB, APB);Qchannel文章目錄1 AMBA總線2 AHB2.1 一個典型的基于AHB的微控制器2.2 AHB總線互聯(lián)結構:中心選擇器連接master與slave2.3 AHB的特性3
    發(fā)表于 12-05 15:36 ?16次下載
    數(shù)字IC驗證:ARM<b class='flag-5'>總線</b><b class='flag-5'>協(xié)議</b>AMBA中AHB、<b class='flag-5'>APB</b>的簡介、區(qū)別與聯(lián)系

    AXI總線協(xié)議:AHB、APB、AXI對比分析

    V1.0 ASB、APB是第一代AMBA協(xié)議的一部分。主要應用在低帶寬的外設上,如UART、 I2C,它的架構不像AHB總線是多主設備的架構,APB
    發(fā)表于 04-14 10:54 ?3611次閱讀

    聊聊AMBA總線-APB

    APB總線里面,數(shù)據(jù)的傳輸只能由主機發(fā)起,其他部分響應主機操作。
    的頭像 發(fā)表于 05-04 11:40 ?933次閱讀
    聊聊AMBA<b class='flag-5'>總線</b>-<b class='flag-5'>APB</b>

    AMBA總線那些事之APB

    之前老李問過大家想看哪方面的知識,有不少同學提議老李寫寫總線,特別是AMBA的總線,所以老李決定從這期開始開始一個AMBA總線介紹的系列文章。AMBA總線主要包括三種最常見的
    的頭像 發(fā)表于 05-04 14:53 ?2511次閱讀
    AMBA<b class='flag-5'>總線</b>那些事之<b class='flag-5'>APB</b>

    AMBA總線apb簡介

    APB(Advanced Peripheral Bus),外圍總線的意思。該總線協(xié)議是ARM公司提出的AMBA總線結構之一,幾乎已成為一種標
    發(fā)表于 06-05 15:10 ?2156次閱讀
    AMBA<b class='flag-5'>總線</b>—<b class='flag-5'>apb</b>簡介

    AMBA總線那些事之APB協(xié)議入門

    咱們首先來介紹AMBA(Advanced Microcontroller Bus Architecture)家族中最簡單的協(xié)議APB -- Advanced Peripheral Bus。
    發(fā)表于 06-05 15:30 ?2861次閱讀
    AMBA<b class='flag-5'>總線</b>那些事之<b class='flag-5'>APB</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>入門</b>

    關于AMBA APB總線的知識點介紹

    AMBA APB總線可以用在低帶寬和不需要高性能的外設上(即低速且低頻率的外設);可以將APB視作AHB的二級總線;   ·低功耗(APB
    發(fā)表于 11-29 15:19 ?1283次閱讀
    關于AMBA <b class='flag-5'>APB</b><b class='flag-5'>總線</b>的知識點介紹

    AMBA總線APB slave設計介紹

    上篇文章給大家介紹了APB協(xié)議相關的知識點,本篇文章通過一個實際的APB slave的設計幫助大家鞏固對APB的掌握。 APB slave設
    的頭像 發(fā)表于 01-13 10:15 ?1039次閱讀
    AMBA<b class='flag-5'>總線</b>中<b class='flag-5'>APB</b> slave設計介紹

    SOC設計中APB協(xié)議總線的工作原理

    APB(Advanced Peripheral Bus) 作為高級外設總線是AMBA協(xié)議之一,也是最基本的總線協(xié)議。按照ARM官方定義,
    發(fā)表于 01-17 17:35 ?2362次閱讀
    SOC設計中<b class='flag-5'>APB</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>總線</b>的工作原理
    贝博百家乐的玩法技巧和规则| 机械手百家乐的玩法技巧和规则 | 大发888娱乐城 真钱下载| 博E百百家乐官网的玩法技巧和规则 | 百家乐自动下注| 百家乐官网斗地主在哪玩| 大发888问题缺少组件| 赌场百家乐技巧| 百家乐官网娱乐城足球盘网| 沈阳盛京棋牌官网| 百家乐官网网页qq| 澳门赌百家乐官网心法| 宜黄县| 太阳城现金| 百家乐博乐36bol在线| 同乐城备用网址| 怎样打百家乐的玩法技巧和规则| 百家乐官网算牌方| 半圆百家乐官网桌子| 陇川县| 明升国际网址| 大发888娱乐场手机版| 澳门百家乐小游戏| 24山是什么意思| 博彩百家乐官网最新优惠| 太阳城百家乐官网杀祖玛| 扎鲁特旗| 真人百家乐| 网络娱乐城| 香港六合彩网| 青岛人家棋牌室| 大发888赌场是干什么的| 北京太阳城老年公寓| 百家乐哪条路准| 扑克百家乐赌器| 百家乐怎么才能| 太阳城百家乐如何看路| 百家乐视频游戏账号| 百家乐游戏机高手| 百家乐游戏机的玩法| 澳门百家乐打法百家乐破解方法|