APB总线协议

一、简介

APB主要用来连接高性能低带宽的外围设备,在APB总线系统中,只有一个master,其他的都是slave

特点:
①  可工作在高频下
②  协议简单:无复杂的时序;
③  同步总线:总线上所有的transaction(读写操作)都依赖于时钟的上升沿;
④  一主多从:一般情况下,APB挂在AHB总线系统下,通过AHB-APB  Bridge将事务在AHB总线系统之间进行转化,此时Bridgre即为APB的master,其他的外围设备均为slave。
⑤  接口简单:相对应AXI、AHB来说,接口比较简单;
⑥  低功耗
⑦  可连接多种外围设备:I2C、SPI、Timer、Keypad、UART

它的架构不像AHB总线是多主设备的架构,APB总线的唯一主设备是APB桥(与AXI或APB相连),因此不需要仲裁一些Request/grant信号。

APB总线接口

二、状态图

APB传输状态图

APB上的传输可用如图所示的状态图来说明。

1、IDLE:系统初始化状态,此时没有传输操作,也没有选中任何从模块。
2、SETUP:启动状态,当有传输要进行时,PSELx=1,,PENABLE=0,系统进入SETUP状态,并只会在SETUP状态停留一个周期。当PCLK的下一个上升沿到来时,系统进入ENABLE状态。
3、ENABLE:在总线进入SETUP状态的下一个时钟上升沿处,需将PENABLE信号拉高进入ENABLE状态。在这个上升处,master必须保持PADDR、PSEL、PWRITE不变。传输也只会在ENABLE状态维持一个周期,在经过SETUP与ENABLE状态之后就已完成。之后如果没有传输要进行,就进入IDLE状态等待;如果有连续的传输,则进入SETUP状态。

三、写传输
 

APB写传输

T2: 上升沿后,master将选择信号PSEL拉高,同时将地址信号PADDR,读写控制信号PWRITE,以及写数据PWDATA驱动到总线上。此时总线开始进入SETUP状态。
T3:master将PENABLE信号拉高,切保持PADDR、PWRITE、PSEL线上的信号稳定不变。总线进入ENABLE状态。slave在这个上升沿处将地址信号和读写使能信号采样下来(slave会不断检测这些信号,t3发现PSEL为高,采样PADDR和PWRITE,判断是读还是写,在t4采数据)。
T4:slave从PWDATA线上采样数据,写操作完成。之后将PSEL和PENABLE拉低,其他信号保持不变。
也可以在T3采PWDATA

写逻辑推荐写法:
1 assign wr = psel & pwrite & (penable);
2 always @(posedge pclk or negege present)
3 begin
4    if(!presetn)
5    begin
6        REG_A <= 32’h0;
7    end
8    else if(wr & paddr = REG_A_ID)    //T3之后
9    begin
10        REG_A <= pwdata;
11    end
12 end

四、读传输

APB读传输

T2:同写操作
T3:同写操作
T3上升沿过后:对应的slave要将读取的数据驱动到PRDATA线上,并且保持稳定。
T4:master从PRDATA线上采数据,读操作完成。之后将PSEL和PENABLE拉低,其他信号保持不变。
不可以在T3采PWDATA
写操作:T2-T4之间,PADDR, PWRTE, PSEL, PWDATA一定保持不变。
读操作:T2-T4之间,PADDR, PWRTE, PSEL,一定保持不变。
               T3-T4之间,PRDATA保持不变。

读逻辑推荐写法:
1 assign rd = psel & (~pwrite) & (~penable) ;
2 always @(*)
3 begin
4    if(rd)            //setup
5    begin
6        case(paddr)
7        REG_A_ID    : prdatanxt = REG_A;
8        REG_B_ID    : prdatanxt = REG_B;
9        ……
10        default        : prdatanxt = 32’h0;
11        endcase
12    end
13    else
14    begin
15        prdatanxt = 32’h0;
16    end
17 end
18 always @(posedge pclk or negege present)
19 begin
20    if(!presetn)
21    begin
22        prdata <= 32’h0;
23    end
24    else    begin
25        prdata <=prdatanxt;
26    End
27 end

对于APB slave,只有PRDATA是输出,其他都是输入

 

reset和clock来于系统



作者:简柏舟
链接:https://www.jianshu.com/p/e613386adbfa
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值