0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文详解AHB-Lite协议

FPGA设计论坛 来源:CSDN技术社区 2025-08-27 09:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、AHB-Lite协议介绍

AHB(Advanced High-performance Bus)高速总线,接高速master设备,APB(Advanced Peripheral Bus)外设总线,用来接低速slave,AHB主要用于高性能模块(如CPUDMADSP等)之间的连接,一个master可以有多个slave,AHB和APB之间通过一个AHB2APB桥转接。这里是实现一个AHB-Lite协议,相较于AHB-APB总线协议,AHB-Lite只有单主机,且没有HBUSREQ和HGRANT信号,同时从设备信号接口也简单许多。

二、系统框架介绍

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

主设备Master0利用AHB-Lite总线协议通过AHB Bridge访问四个APB从设备Slave0、Slave、Slave2和Slave3。每个从设备的地址空间如下:

Slave0: 0x0000_0000 ~ 0x0000_00ff;

Slave1: 0x0000_0100 ~ 0x0000_01ff;

Slave2: 0x0000_0200 ~ 0x0000_02ff;

Slave3: 0x0000_0300 ~ 0x0000_03ff;

令从设备地址空间的下边界为其地址的基址,假设每个从设备中有可访问APB寄存器16个,位宽均为32比特,16个寄存器的访问地址计算方式为 基址 +寄存器编号左移2位(byte 偏移)

主设备接口的数据读写采用AHB-Lite总线协议,并遵循如下时序规范:

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

从设备读写遵循APB时序规范:

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

三、代码设计

模块里包含Master 、Slave、Bridge设计

代码如下:

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

//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状态机

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

即选中了第一个从设备中第一个寄存器

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

即选中了第三个从设备中第三个寄存器

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

即第三个从设备第三个寄存器

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

即第四个从设备第四个寄存器

原文链接:

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5457

    浏览量

    125678
  • 接口
    +关注

    关注

    33

    文章

    9117

    浏览量

    154405
  • 总线协议
    +关注

    关注

    0

    文章

    136

    浏览量

    15368
  • 高速总线
    +关注

    关注

    0

    文章

    9

    浏览量

    3564

原文标题:AHB_Lite协议介绍

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32—— AHB、APB详解 精选资料分享

    STM32—— AHB、APB详解2016-07-14 20:35 590人阅读 评论(0) 收藏 举报本文章已收录于:版权声明:本文为博主原创文章,未经博主允许不得转载。、概括首先,说点不靠谱
    发表于 08-23 07:56

    AMBA中的AHB总线协议详解

    ,数据传输效率不高。所以针对以上的缺点,ARM 开发了更高级的总线AHB,下文将详述AHB基于APB的改进点,改进策略,以及AHB协议运行机制。1-1 背景在漫谈AMBA总线-APB
    发表于 06-07 16:57

    搭建个SoC下载到FPGA开发板中设计实现

    简单的控制的,所以只设计支持了简单的AHB-Lite总线。AHB-Lite总线只支持AHB主机。BRAM是存放SoC需要调用的指令的存储器,其通过BRAM总线接口与AHBlite总
    发表于 08-09 17:09

    AHB-lite总线如何处理独占访问

    我正在使用混淆的RTL for Cortex-M3。我有个可行的设计,可以将3个AHB-lite总线复用为2个AXI3总线。该设计类似于具有代码总线和系统总线的Xilinx designstart
    发表于 08-18 11:11

    基于Cortex-M0搭建SoC并使用软件驱动蜂鸣器正常切歌播放的设计实现

    在于,AHB-Lite总线只支持AHB主机,而AHB总线是支持多主机的。所以在结构上,AHB-Lite总线不需要仲裁器。
    发表于 08-18 15:37

    在Arm AMBA协议集中AHB-lite可否使用

    Arm AMBA协议集中,LPI 在AMBA4 出现,协议和链路层 与 AXI/AHB 无关 独立的吗? AHB-lite 可否使用?
    发表于 09-08 11:35

    Arm AMBA协议集中address phase是必须等到hready有效才结束吗

    Arm AMBA协议集中,ahb-lite协议里面,address phase是必须等到hready有效才结束吗?还是不管hready是否有效,只需要拍就行?
    发表于 09-14 11:43

    ARM CoreLink AXI4至AHB Lite XHB-400桥接技术参考手册

    XHB将AXI4协议转换为AHB-Lite协议,并具有AXI4从接口和AHB-Lite主接口。有关AXI4事务如何通过XHB桥接到AHB-Lite
    发表于 08-02 06:51

    多层AHB技术概述

    没有需要仲裁或主从复用。这些层可以使用 AHB-Lite协议,这意味着他们不必支持请求和授权,重试并拆分事务。 •仲裁实际上成为每个外围设备的点仲裁只有当多个主机想要访问同个从机时才需要同时 •您
    发表于 08-09 07:52

    PrimeCell通用中断控制器(PL390)循环模型9.1.0版用户指南

    接口(AXI)协议或AMBA AHB-Lite协议。 您可以配置GIC以提供预期应用所需的最佳功能、性能和门数。 主要产品配置有: ·带有AHB-Lite接口的GIC。 此配置实施AH
    发表于 08-16 06:14

    PrimeCell基础设施AMBA 2 AHB至AMBA 3 AXI桥(BP136)技术概述

    AMBA™2 AHB™至AMBA 3 AXI™桥使AHB主机能够与AXI从机或互连进行通信(如果时钟和重置信号是公共的)。 该网桥有三种变种,可支持以下接口: ·ARM11 AHB-Lite主控器
    发表于 08-21 06:43

    剖析AHB2、AHB-LiteAHB5区别

    AMBA 2 添加了 AMBA 高性能总线 (AHB),这是种单时钟边缘协议AHB 上的简单transaction由地址阶段和后续数据阶段组成。对目标设备的访问通过 MUX 进行控
    的头像 发表于 05-04 11:03 4899次阅读
    剖析<b class='flag-5'>AHB</b>2、<b class='flag-5'>AHB-Lite</b>和<b class='flag-5'>AHB</b>5区别

    Arm AMBA 5 AHB5:加速嵌入式和物联网世界

    AHB-Lite 协议的基础上,使其与 AXI4 协议保持致。AHB5 还将 TrustZone 安全基础从处理器扩展到整个系统。
    的头像 发表于 05-26 14:18 1597次阅读

    AMBA AHB协议的burst termination简析

    在AMBA AHB协议中,AHB master可以用burst传输连续取多笔数据。AHB定义了4、8和16拍的burst传输、未定义长度的burst传输和单次传输。
    发表于 06-29 15:54 3224次阅读
    AMBA <b class='flag-5'>AHB</b><b class='flag-5'>协议</b>的burst termination简析

    AMBA AHB协议规范

    电子发烧友网站提供《AMBA AHB协议规范.pdf》资料免费下载
    发表于 02-11 15:51 2次下载