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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

APB3接口的讀寫過程

XL FPGA技術(shù)交流 ? 來源:XL科技 ? 作者:XL科技 ? 2023-03-31 17:26 ? 次閱讀

APB3是一個(gè)低功耗低成本接口。所有信號時(shí)鐘上升沿傳輸,每次傳輸需要兩個(gè)時(shí)鐘周期。

1、Interface

信號 控制端 描述
PSEL M 選通。APB master會將此信號生成給每個(gè)slave。它指示已選擇的slave,并且需要進(jìn)行數(shù)據(jù)傳輸。每個(gè)slave都有一個(gè)PSEL信號。
PADDR M 地址總線,最大位寬32位
PENABLE M 使能。當(dāng)它為高時(shí),表示讀寫過程有效
PWRITE M 讀寫控制。為高時(shí)表示寫操作,為低時(shí)表示讀操作
PWDATA M 寫數(shù)據(jù)。master通過PWDATA將數(shù)據(jù)寫到slave,該總線最大寬度為32位
PRDATA S 讀數(shù)據(jù)。master通過PRDATA將數(shù)據(jù)從slave讀取回來,該總線最大寬度為32位
PREADY S 在PSEL和PENABLE為高時(shí),總線會查看PREADY是否為高,如果為高則數(shù)據(jù)有效,如果為低則等待其變高。

APB寫過程

沒有等待狀態(tài)。

wKgZomTngjeAcCKrAAF6IkiDs-M318.png

(1)T0到T1階段是空閑狀態(tài),

(2)T1到T2是setup階段,此階段會準(zhǔn)備好PADDR,PWRITE(為1),PWDATA。

(3)T2到T3是Access階段,此階段PENABLE會拉高,并且地址、數(shù)據(jù)和控制信號仍然保持有效。

(4)T3到T4階段PENABLE再次拉低;選擇信號PSELx也會拉低,除非緊跟同一外設(shè)下一次的傳輸。

wKgZomTngjeAThobAAAx9bWqaL8044.png

有等待狀態(tài)

wKgZomTngjiAOyACAAEJuAoGGJ0615.png

wKgZomTngjiAJZPyAAA14EbCVAI827.png

在ACESS階段,當(dāng)PENABLE為高時(shí),可以通過PREADY拉低來延長ACESS階段。這時(shí)要保持PADDR,PWRITE,PSEL,PENABLE,PWDATA信號保持不變。

當(dāng)PENABLE為低時(shí),PREADY可以高也可以低。所以如果外設(shè)是固定兩個(gè)操作周期時(shí),PREADY可以固定為高。

另外推薦地址和寫信號只在下一個(gè)訪問周期才發(fā)生變化,這樣可以節(jié)省功耗 。

APB讀過程

讀操作

wKgZomTngjiAZeqRAADEghkAnZA321.png

在SETUP階段讀過程與寫過程是一樣的,只是寫過程PWRITE為高,讀過程PWRITE為低。

同樣在ACCESS階段,也可以通過拉低PREADY信號延長ACESS階段,但是要保證PADDR,PWRITE,PSEL和PENALBE為固定狀態(tài)。

wKgZomTngjiAFiHpAADbBYTUOiw465.png

通過RISCV 操作APB3也比較簡單,如下:

slave是指APB的基地址,addr是指APB的偏移地址,也就是PADDR.

  void apb3_write(u32 slave, u32 addr, u32 data )
    {
      write_u32(data,slave+addr);
    }
voidabp3_read(u32slave,u32addr)
{
returnread_u32(slave+addr);
}

在邏輯上處理也比較簡單,易靈思提供了簡單的APB3參考。

//以下為易靈思提供的APB3的參考
module apb3_slave_memory #(
  // user parameter starts here
  //
  parameter  ADDR_WIDTH  = 16,
  parameter  DATA_WIDTH  = 32,
  parameter  NUM_REG    = 4
) (
  // user logic starts here
  input                       clk,
  input                       resetn,
  input  [ADDR_WIDTH-1:0]     PADDR,
  input                       PSEL,
  input                       PENABLE,
  output                     PREADY,
  input                       PWRITE,
  input   [DATA_WIDTH-1:0]   PWDATA,
  output  [DATA_WIDTH-1:0]   PRDATA,
outputPSLVERROR
);


/////////////////////////////////////////////////////////////////




localparam [1:0]  IDLE   = 2'b00,
              SETUP  = 2'b01,
              ACCESS = 2'b10;




reg [1:0]      busState, 
               busNext;
reg             slaveReady;
wire            actWrite,
               actRead;


//////////////////////////////////////////////////////////////////
  always@(posedge clk or negedge resetn)
  begin
    if(!resetn) 
      busState <= IDLE; 
    else
      busState <= busNext; 
  end




  always@(*)
  begin
    busNext = busState;




    case(busState)
      IDLE:
      begin
        if(PSEL && !PENABLE)
            busNext = SETUP;
        else
            busNext = IDLE;
      end
      SETUP:
      begin
        if(PSEL && PENABLE)
            busNext = ACCESS;
        else
            busNext = IDLE;
      end
      ACCESS:
      begin
        if(PREADY)
            busNext = IDLE;
        else
            busNext = ACCESS;
      end
      default:
      begin
          busNext = IDLE;
      end
    endcase
  end








  assign actWrite = PWRITE  && (busState == ACCESS);
  assign actRead  = !PWRITE && (busState == ACCESS);
  assign PSLVERROR = 1'b0; 
  assign PREADY = slaveReady & & (busState !== IDLE);




  always@ (posedge clk)
  begin
    slaveReady <= actWrite | actRead;
  end


  simple_dual_port_ram
#(
  .DATA_WIDTH(32),
  .ADDR_WIDTH(16),
  .OUTPUT_REG(0),
  .RAM_INIT_FILE("")
)
dut
(
  .wdata  (PWDATA    ),
  .waddr  (PADDR    ),
  .wclk    (clk      ),
  .we      (actWrite  ),
  .raddr  (PADDR    ),
  .rclk    (clk      ),
  .re      (actRead  ),
  .rdata  (PRDATA    )
);


endmodule

審核編輯:劉清

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

    關(guān)注

    0

    文章

    153

    瀏覽量

    11917
  • PSEL
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1995
  • RISC-V
    +關(guān)注

    關(guān)注

    44

    文章

    2141

    瀏覽量

    45711

原文標(biāo)題:APB3接口應(yīng)用

文章出處:【微信號:gh_ea2445df5d2a,微信公眾號:FPGA及視頻處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何用XSCT通過APB接口來讀GT的寄存器

    在debug GT的時(shí)候,有時(shí)候需要讀出一些寄存器來分析。這篇文章介紹一種通過AXI4 Lite或者APB3接口從XSCT來讀Versla GT的寄存器的方法。
    的頭像 發(fā)表于 12-08 10:32 ?616次閱讀
    如何用XSCT通過<b class='flag-5'>APB</b><b class='flag-5'>接口</b>來讀GT的寄存器

    ram的結(jié)構(gòu)和讀寫過程

    ,所以ram是易失性存儲器。本文主要介紹ram的結(jié)構(gòu)和讀寫過程?! ?.ram的結(jié)構(gòu)它由三部分電路組成:    1)行、列地址譯碼器:它是一個(gè)二進(jìn)制譯碼器,將地址碼翻譯成行列對應(yīng)的具體地址,然后去選
    發(fā)表于 12-10 15:50

    ram的結(jié)構(gòu)和讀寫過程

    (存入)或讀出(取出)信息。ram在計(jì)算機(jī)和數(shù)字系統(tǒng)中用來暫時(shí)存儲程序、數(shù)據(jù)和中間結(jié)果。隨機(jī)存取存儲器(ram)既可向指定單元存入信息又可從指定單元讀出信息。任何ram中存儲的信息在斷電后均會丟失,所以ram是易失性存儲器。本文主要介紹ram的結(jié)構(gòu)和讀寫過程
    發(fā)表于 12-16 06:29

    ram的結(jié)構(gòu)和讀寫過程

    (存入)或讀出(取出)信息?! am在計(jì)算機(jī)和數(shù)字系統(tǒng)中用來暫時(shí)存儲程序、數(shù)據(jù)和中間結(jié)果。隨機(jī)存取存儲器(ram)既可向指定單元存入信息又可從指定單元讀出信息。任何ram中存儲的信息在斷電后均會丟失,所以ram是易失性存儲器。本文主要介紹ram的結(jié)構(gòu)和讀寫過程
    發(fā)表于 12-31 06:18

    IIC總線的特點(diǎn)及讀寫過程

    IIC總線的特點(diǎn)IIC總線協(xié)議詳解IIC總線的讀寫過程
    發(fā)表于 01-04 07:30

    EEPROM I2C協(xié)議的特點(diǎn)與基本讀寫過程

    EEPROMI2C協(xié)議I2C物理層的特點(diǎn)I2C的協(xié)議層I2C基本讀寫過程通訊的起始和停止信號數(shù)據(jù)有效性地址及數(shù)據(jù)方向響應(yīng)STM32的I2C特性及架構(gòu)通訊引腳時(shí)鐘控制邏輯數(shù)據(jù)控制邏輯整體控制邏輯
    發(fā)表于 01-21 08:57

    使用SPI對SD卡進(jìn)行讀寫過程中常見的問題有哪些?如何解決?

    使用SPI對SD卡進(jìn)行讀寫過程中常見的問題有哪些?如何解決?
    發(fā)表于 01-27 07:17

    APB接口協(xié)議的讀寫傳輸及工作流程簡析

    APB是AMBA中相對比較簡單的接口協(xié)議,用于連接低帶寬,無需高性能流水線接口的外設(shè)。采用這種簡單的協(xié)議,你可以輕松地將自定義外設(shè)掛在基于AMBA總線的SoC上。許多APB外設(shè)都是慢速
    發(fā)表于 04-07 10:18

    PSEL = 0時(shí)APB3從機(jī)響應(yīng)如何解決此問題

    在這里,在IP級別驗(yàn)證中,我們沒有問題,因?yàn)橹?b class='flag-5'>APB不會鎖存PREADY,而是在SOC級別具有多個(gè)APB從站主設(shè)備使用APB SLAVE 1執(zhí)行一些事務(wù),并且在切換到APB SLAVE
    發(fā)表于 08-17 15:51

    SmartFusion系列CoreAPB3應(yīng)用指南(英)

    SmartFusion系列CoreAPB3應(yīng)用指南(英) Building an APB3 Core for SmartFusion FPGAs
    發(fā)表于 04-23 14:03 ?16次下載

    藍(lán)羚牌APB15-3-A APB20-4-A APB25-5

    藍(lán)羚牌APB15-3-A APB20-4-A APB25-5-A APB30-6-A風(fēng)壓式換氣扇電路圖
    發(fā)表于 02-27 21:22 ?1169次閱讀
    藍(lán)羚牌<b class='flag-5'>APB15-3</b>-A <b class='flag-5'>APB</b>20-4-A <b class='flag-5'>APB</b>25-5

    藍(lán)羚牌APB15-3-B APB20-4-B APB25-5

    藍(lán)羚牌APB15-3-B APB20-4-B APB25-5-B APB30-6-B連動式換氣扇電路圖
    發(fā)表于 02-27 21:22 ?1242次閱讀
    藍(lán)羚牌<b class='flag-5'>APB15-3</b>-B <b class='flag-5'>APB</b>20-4-B <b class='flag-5'>APB</b>25-5

    APB總線的應(yīng)用框圖及接口信號

    APB(AdvancedPeripheralBus)是AMBA(AdvancedMicrocontrollerBusArcheticture)總線體系的一部分。相較于AMBA總線體系中的其他總線,APB總線具有低功耗,低復(fù)雜度的特征。A
    發(fā)表于 11-17 11:54 ?1.3w次閱讀
    <b class='flag-5'>APB</b>總線的應(yīng)用框圖及<b class='flag-5'>接口</b>信號

    以太網(wǎng)工業(yè)級雙通道讀寫讀寫頭CK-FR102AN-E00開發(fā)手冊之讀寫過程與操作流程

    本文重點(diǎn)介紹以太網(wǎng)工業(yè)級雙通道讀寫讀寫頭CK-FR102AN-E00開發(fā)手冊之讀寫過程與操作流程,歡迎發(fā)燒友交流與溝通! 1、讀寫讀寫過程
    發(fā)表于 02-03 22:03 ?223次閱讀
    以太網(wǎng)工業(yè)級雙通道<b class='flag-5'>讀寫</b>器<b class='flag-5'>讀寫</b>頭CK-FR102AN-E00開發(fā)手冊之<b class='flag-5'>讀寫過程</b>與操作流程

    關(guān)于ram的結(jié)構(gòu)和讀寫過程

    ram也叫主存,是與CPU直接交換數(shù)據(jù)的內(nèi)部存儲器。它可以隨時(shí)讀寫(刷新時(shí)除外)且速度很快,通常作為操作系統(tǒng)或其他正在運(yùn)行中的程序的...
    發(fā)表于 01-25 20:03 ?1次下載
    關(guān)于ram的結(jié)構(gòu)和<b class='flag-5'>讀寫過程</b>