91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

一文詳解AHB-Lite協(xié)議

FPGA設(shè)計論壇 ? 來源:CSDN技術(shù)社區(qū) ? 2025-08-27 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、AHB-Lite協(xié)議介紹

AHB(Advanced High-performance Bus)高速總線,接高速master設(shè)備,APB(Advanced Peripheral Bus)外設(shè)總線,用來接低速slave,AHB主要用于高性能模塊(如CPU、DMADSP等)之間的連接,一個master可以有多個slave,AHB和APB之間通過一個AHB2APB橋轉(zhuǎn)接。這里是實現(xiàn)一個AHB-Lite協(xié)議,相較于AHB-APB總線協(xié)議,AHB-Lite只有單主機,且沒有HBUSREQ和HGRANT信號,同時從設(shè)備信號接口也簡單許多。

二、系統(tǒng)框架介紹

9f1966ba-800e-11f0-a18e-92fbcf53809c.png

主設(shè)備Master0利用AHB-Lite總線協(xié)議通過AHB Bridge訪問四個APB從設(shè)備Slave0、Slave、Slave2和Slave3。每個從設(shè)備的地址空間如下:

Slave0: 0x0000_0000 ~ 0x0000_00ff;

Slave1: 0x0000_0100 ~ 0x0000_01ff;

Slave2: 0x0000_0200 ~ 0x0000_02ff;

Slave3: 0x0000_0300 ~ 0x0000_03ff;

令從設(shè)備地址空間的下邊界為其地址的基址,假設(shè)每個從設(shè)備中有可訪問APB寄存器16個,位寬均為32比特,16個寄存器的訪問地址計算方式為 基址 +寄存器編號左移2位(byte 偏移)

主設(shè)備接口的數(shù)據(jù)讀寫采用AHB-Lite總線協(xié)議,并遵循如下時序規(guī)范:

9f2bb734-800e-11f0-a18e-92fbcf53809c.png

從設(shè)備讀寫遵循APB時序規(guī)范:

9f404f46-800e-11f0-a18e-92fbcf53809c.png

三、代碼設(shè)計

模塊里包含Master 、Slave、Bridge設(shè)計

代碼如下:

//-------------------------

//File Name:AHB_APB.v

//Designer:Liang Genyuan

//-------------------------

module AHB_APB(

HCLK,

HRESETn,

HWRITE,

HADDR,

HWDATAin,

HRDATA,

PRDATAin,

PWDATA

);

input HCLK;

input HRESETn;

input HWRITE;

input [31:0] HADDR;

input [31:0] HWDATAin;

input [31:0] PRDATAin;

output[31:0] HRDATA;

output[31:0] PWDATA;

reg PCLK;

wire PRESETn;

wire PWRITE;

reg PSEL;

reg PENABLE;

wire[31:0] PADDR;

reg[31:0] PWDATA;

reg[31:0] PRDATA;

reg[31:0] HWDATA;

reg[31:0] HRDATA;

reg PSELS0;

reg PSELS1;

reg PSELS2;

reg PSELS3;

reg[31:0] HADDR_Reg;

reg HWRITE_Reg;

reg[3:0] HSEL_Reg;

reg[31:0] HWDATA_Reg;

reg[31:0] PRDATA_Reg;

reg HREADY;

reg [3:0] state_c ;

reg [3:0] state_n ;

parameter IDLE = 4'b0000 ;

parameter SETUP = 4'b0001;

parameter ENABLE = 4'b0010 ;

//PCLK二分頻

always @(posedge HCLK) begin

if(!HRESETn)begin

PCLK<=0;

end

else if(HCLK==1'b1)begin

PCLK<=~PCLK;

end

end

//slave選擇

`define S0BASE 4'b0000

`define S1BASE 4'b0001

`define S2BASE 4'b0010

`define S3BASE 4'b0011

wire[3:0] HSEL;

assign HSEL = HADDR[11:8];

always @(*)begin

if(!HRESETn) begin

PSELS0 = 1'b0;

PSELS1 = 1'b0;

PSELS2 = 1'b0;

PSELS3 = 1'b0;

end

case (HSEL)

`S0BASE :

PSELS0 = 1'b1;

`S1BASE :

PSELS1 = 1'b1;

`S2BASE :

PSELS2 = 1'b1;

`S3BASE :

PSELS3 = 1'b1;

endcase

end

//slave讀寫

wire[5:0] reg_num;

reg [3:0] PSELx;

assign reg_num= PADDR[7:2];

assign PRESETn=HRESETn;

assign PADDR=HADDR_Reg;

assign PWRITE=HWRITE_Reg;

always @(posedge PCLK or negedge PRESETn) begin

if(!PRESETn)begin

PWDATA<=0;

PRDATA<=0;

end

else if(PWRITE)begin

if((state_c==SETUP)||(state_c==ENABLE))begin

PWDATA<=HWDATA_Reg;

end

else begin

PWDATA<=0;

end

end

else if(!PWRITE)begin

PRDATA<=PRDATAin;

end

else begin

PRDATA<=0;

end

end

//APB bridge狀態(tài)機

wire idle2setup_start ;

wire setup2enable_start;

wire enable2idle_start ;

always@(posedge HCLK or negedge HRESETn)begin

if(!HRESETn)begin

PSELx<=0;

end

else if(state_c!=IDLE)begin

PSELx<=HSEL_Reg;

end

end

always @(posedge PCLK or negedge PRESETn) begin

if (!PRESETn) begin

state_c <= IDLE ;

end

else begin

state_c <= state_n;

end

end

always @(*) begin

case(state_c)

IDLE :begin

if(idle2setup_start)

state_n = SETUP ;

else

state_n = state_c ;

end

SETUP :begin

if(setup2enable_start)

state_n = ENABLE ;

else

state_n = state_c ;

end

ENABLE :begin

if(enable2idle_start)

state_n = IDLE ;

else

state_n = state_c ;

end

default : state_n = IDLE ;

endcase

end

always@(posedge PCLK or negedge PRESETn)begin

if(PRESETn==1'b0)begin

PENABLE<=0;

PSEL<=0;

end

else if(state_c==SETUP)begin

PSEL<=1;

PENABLE<=0;

end

else if(state_c==ENABLE)begin

PSEL<=1;

PENABLE<=1;

end

else begin

PSEL<=0;

PENABLE<=0;

end

end

assign idle2setup_start = (state_c==IDLE)&&(HADDR!=32'b0) ;

assign setup2enable_start = state_c==SETUP ;

assign enable2idle_start = state_c==ENABLE ;

//橋寄存

always @ (negedge HRESETn or posedge HCLK) begin

if (!HRESETn)

begin

HADDR_Reg <= {32{1'b0}};

HWRITE_Reg <= 1'b0;

end

else

if (HREADY)begin

HADDR_Reg <= HADDR;

HWRITE_Reg <= HWRITE;

end

end

always @(posedge HCLK or negedge HRESETn)begin

if(HRESETn==1'b0)begin

HSEL_Reg<=0;

end

else if(HREADY)begin

HSEL_Reg<=HSEL;

end

end

always @(posedge HCLK or negedge HRESETn)begin

if(HRESETn==1'b0)begin

HWDATA_Reg<=0;

PRDATA_Reg<=0;

end

else if(HWRITE==1)begin

HWDATA_Reg<=HWDATA;

end

else begin

PRDATA_Reg<=PRDATA;

end

end

//master

//HREADY控制

always @(posedge PCLK or negedge PRESETn)begin

if(!PRESETn)begin

HREADY<=0;

end

else if((state_c==IDLE)&&(HWDATA==0))begin

HREADY<=1;

end

else if(state_c==SETUP)begin

HREADY<=0;

end

end

always @(posedge HCLK or negedge HRESETn)begin

if(HRESETn==1'b0)begin

HWDATA<=32'b0;

HRDATA<=32'b0;

end

else if(HWRITE==0)begin

HRDATA<=PRDATA_Reg;

end

else if(HWRITE==1)begin

HWDATA<=HWDATAin;

end

end

endmodule

四、仿真測試

分別對讀寫時序進行兩組測試:

1、寫時序

a、

HADDR=32’b0000_0000_0000_0000_0000_0001_0000_0000

HWDATAin=32’b0000_0000_0000_0000_0000_0001_0000_0001

9f55a90e-800e-11f0-a18e-92fbcf53809c.png

PSELx=1,reg_num=0

即選中了第一個從設(shè)備中第一個寄存器

b、

HADDR=32’b0000_0000_0000_0000_0000_0011_0000_1000;

HWDATAin=32’b0000_0000_0000_0000_0000_1111_0000_1111;

9f6c0334-800e-11f0-a18e-92fbcf53809c.png

PSELx=3,reg_num=2

即選中了第三個從設(shè)備中第三個寄存器

2、讀時序

a、

HADDR=32’b0000_0000_0000_0000_0000_0011_0000_1000

PRDATAin=32’b00000_0000_0000_0000_0000_1111_0000_1111

9f765546-800e-11f0-a18e-92fbcf53809c.png

PSELx=3 reg_num=2

即第三個從設(shè)備第三個寄存器

b、

HADDR=32’b0000_0000_0000_0000_0000_0100_0000_1100

PRDATAin=32’b00000_0000_0000_0000_0000_1110_0000_1110

9f8a0ae6-800e-11f0-a18e-92fbcf53809c.png

PSELx=4 reg_num=3

即第四個從設(shè)備第四個寄存器

原文鏈接:

https://blog.csdn.net/yueqiu693/article/details/119849052

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

    關(guān)注

    31

    文章

    5608

    瀏覽量

    129968
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9519

    瀏覽量

    157019
  • 總線協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    168

    瀏覽量

    15614
  • 高速總線
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    3606

原文標(biāo)題:AHB_Lite協(xié)議介紹

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設(shè)計論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    STM32—— AHB、APB詳解 精選資料分享

    STM32—— AHB、APB詳解2016-07-14 20:35 590人閱讀 評論(0) 收藏 舉報本文章已收錄于:版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。、概括首先,說點不靠譜
    發(fā)表于 08-23 07:56

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

    ,數(shù)據(jù)傳輸效率不高。所以針對以上的缺點,ARM 開發(fā)了更高級的總線AHB,下文將詳述AHB基于APB的改進點,改進策略,以及AHB協(xié)議運行機制。1-1 背景在漫談AMBA總線-APB
    發(fā)表于 06-07 16:57

    搭建個SoC下載到FPGA開發(fā)板中設(shè)計實現(xiàn)

    簡單的控制的,所以只設(shè)計支持了簡單的AHB-Lite總線。AHB-Lite總線只支持AHB主機。BRAM是存放SoC需要調(diào)用的指令的存儲器,其通過BRAM總線接口與AHBlite總
    發(fā)表于 08-09 17:09

    AHB-lite總線如何處理獨占訪問

    我正在使用混淆的RTL for Cortex-M3。我有個可行的設(shè)計,可以將3個AHB-lite總線復(fù)用為2個AXI3總線。該設(shè)計類似于具有代碼總線和系統(tǒng)總線的Xilinx designstart
    發(fā)表于 08-18 11:11

    基于Cortex-M0搭建SoC并使用軟件驅(qū)動蜂鳴器正常切歌播放的設(shè)計實現(xiàn)

    在于,AHB-Lite總線只支持AHB主機,而AHB總線是支持多主機的。所以在結(jié)構(gòu)上,AHB-Lite總線不需要仲裁器。
    發(fā)表于 08-18 15:37

    在Arm AMBA協(xié)議集中AHB-lite可否使用

    Arm AMBA協(xié)議集中,LPI 在AMBA4 出現(xiàn),協(xié)議和鏈路層 與 AXI/AHB 無關(guān) 獨立的嗎? AHB-lite 可否使用?
    發(fā)表于 09-08 11:35

    Arm AMBA協(xié)議集中address phase是必須等到hready有效才結(jié)束嗎

    Arm AMBA協(xié)議集中,ahb-lite協(xié)議里面,address phase是必須等到hready有效才結(jié)束嗎?還是不管hready是否有效,只需要拍就行?
    發(fā)表于 09-14 11:43

    ARM CoreLink AXI4至AHB Lite XHB-400橋接技術(shù)參考手冊

    XHB將AXI4協(xié)議轉(zhuǎn)換為AHB-Lite協(xié)議,并具有AXI4從接口和AHB-Lite主接口。有關(guān)AXI4事務(wù)如何通過XHB橋接到AHB-Lite
    發(fā)表于 08-02 06:51

    多層AHB技術(shù)概述

    沒有需要仲裁或主從復(fù)用。這些層可以使用 AHB-Lite協(xié)議,這意味著他們不必支持請求和授權(quán),重試并拆分事務(wù)。 ?仲裁實際上成為每個外圍設(shè)備的點仲裁只有當(dāng)多個主機想要訪問同個從機時才需要同時 ?您
    發(fā)表于 08-09 07:52

    PrimeCell通用中斷控制器(PL390)循環(huán)模型9.1.0版用戶指南

    接口(AXI)協(xié)議或AMBA AHB-Lite協(xié)議。 您可以配置GIC以提供預(yù)期應(yīng)用所需的最佳功能、性能和門數(shù)。 主要產(chǎn)品配置有: ·帶有AHB-Lite接口的GIC。 此配置實施AH
    發(fā)表于 08-16 06:14

    PrimeCell基礎(chǔ)設(shè)施AMBA 2 AHB至AMBA 3 AXI橋(BP136)技術(shù)概述

    AMBA?2 AHB?至AMBA 3 AXI?橋使AHB主機能夠與AXI從機或互連進行通信(如果時鐘和重置信號是公共的)。 該網(wǎng)橋有三種變種,可支持以下接口: ·ARM11 AHB-Lite主控器
    發(fā)表于 08-21 06:43

    剖析AHB2、AHB-LiteAHB5區(qū)別

    AMBA 2 添加了 AMBA 高性能總線 (AHB),這是種單時鐘邊緣協(xié)議。AHB 上的簡單transaction由地址階段和后續(xù)數(shù)據(jù)階段組成。對目標(biāo)設(shè)備的訪問通過 MUX 進行控
    的頭像 發(fā)表于 05-04 11:03 ?5704次閱讀
    剖析<b class='flag-5'>AHB</b>2、<b class='flag-5'>AHB-Lite</b>和<b class='flag-5'>AHB</b>5區(qū)別

    Arm AMBA 5 AHB5:加速嵌入式和物聯(lián)網(wǎng)世界

    AHB-Lite 協(xié)議的基礎(chǔ)上,使其與 AXI4 協(xié)議保持致。AHB5 還將 TrustZone 安全基礎(chǔ)從處理器擴展到整個系統(tǒng)。
    的頭像 發(fā)表于 05-26 14:18 ?2149次閱讀

    AMBA AHB協(xié)議的burst termination簡析

    在AMBA AHB協(xié)議中,AHB master可以用burst傳輸連續(xù)取多筆數(shù)據(jù)。AHB定義了4、8和16拍的burst傳輸、未定義長度的burst傳輸和單次傳輸。
    發(fā)表于 06-29 15:54 ?3828次閱讀
    AMBA <b class='flag-5'>AHB</b><b class='flag-5'>協(xié)議</b>的burst termination簡析

    AMBA AHB協(xié)議規(guī)范

    電子發(fā)燒友網(wǎng)站提供《AMBA AHB協(xié)議規(guī)范.pdf》資料免費下載
    發(fā)表于 02-11 15:51 ?2次下載