APB总线

转载自APB总线

APB总线

概述

在APB总线里面,数据的传输只能由主机(master)发起,其他部分响应主机操作。

在APB总线里面,数据的回复由从机(slave)完成,从机只能完成主机发起的操作,自己不能发起操作然后完成操作。

在APB总线里面,有且只有一个主机可以连接到APB总线接口,其他的只能连接从机(外设),所以APB总线只支持单主机模式。

在APB总线里面,主机先发起要访问的外设地址,外设根据要求返回数据,主机收到数据,这一个完整的流程被称为APB总线协议

总线是被总线上所有的部件所共享的一组通路(连线),对于单主机来说,如果该主机想要与其中的外设部件进行通信,需要将地址、数据、命令放到总线上,其他的从机部件对总线上的数据进行侦听,检查地址数据和命令的是否与自己相关,然后相关部件做出响应。

在APB总线中,有地址线(PADDR)命令线(PWRITE、PENABLE、PESEL)和数据线(PRDATA、PWDATA)。

总线详解

参考APB

在这里插入图片描述

CPU :CPU是操作的发起者,CPU发起读写外设数据的操作。

APB_Interconnect :根据上文所说的总线协议和传输信号的要求,构建出来的设计实体,该实体接收CPU发出的数据和指令,然后广播到每一个外设部件。

SLAVE:对APB_interconnect输出数据和指令进行响应。

是否可以不需要APB_interconnect,APB_Interconect的作用是什么?

如上图,当CPU只有一个外设,那么直接可以和外设相连,不需要APB_Interconect。此时CPU的发出的指令和操作只会发给URT0,不需要地址来仲裁。如下图:
在这里插入图片描述
但是当CPU需要连接多个外设的时候(CPU只管发出地址和命令),根据CPU地址范围分配表:

(1)APB_Interconect对每一个外设设置地址,然后APB_Interconect根据CPU发出的地址,选中对应地址的外设,把CPU的地址和指令传输到该外设 [地址路由仲裁]。

结论:是否需要APB_interconnect根据应用而定,如果只是单个的外设连接CPU(很少出现),可以直接连接CPU和外设通过APB总线。不需要APB_Interconect,但是当外设数目变多,自然而然的就引入了不同外设的区分,所以当多个外设的时候,需要引入APB_Interconect来做这些相关的处理。

总线接口

在这里插入图片描述

APB Bridge示意接口(APB_Interconect)

根据AMBA APB手册,截取APB Bridge接口:

在这里插入图片描述
图左边的接口System Bus Slave Interface,连接APB 主机(即上面的CPU),这个接口也是APB完整的接口,包含上面举例的信号。图右边和左下面的接口连接多个SLAVE,其中PSELn有多个,每个对应不同的SLAVE。其他信号对于SLAVE是一致的,因为PSELn已经可以选中不同的SLAVE来接收传输的共享信号了。

APB BUS时序图(AMBA APB 2.0手册)

写传输:
在这里插入图片描述
如上时序图,主机在T2时刻把所要访问的地址,命令和数据全部放到APB总线上,沿着组成APB的接口的金属线传播到从机接口处。在T3时刻,从机发现自己的PSEL信号为高,就知道主机选择它来处理数据的写操作,此时从机内部准备好处理数据的准备动作,在T4时刻,从机完成总线上数据采样并进行内部数据处理。

PSELPENABLE以及PREADY信号这三个信号十分重要,这3个信号之间的关系标志着一次transaction的开始和结束:

PSEL从0变为1,表明要开始一个新的transaction

PSEL为1的第一个周期,PENABLE要为0,然后在下一个周期变为1

当Slave可以确保在下一个时钟沿接受到PWDATA时,就可以把PREADY变为1

当Master看到PREADY为1后,就可以在下一个时钟沿把PSEL,PENABLE拉为0,结束transaction

注意:

PWDATA,PADDR, PWRITE需要在PSEL为高一直到PREADY为高期间都保持稳定。

PENABLE必须要在PSEL为高的第一个周期为0(称为setup phase),第二个周期为1,直到PREADY为1(称为access phase)

如果Master想要在PREADY为高之后下一个沿立刻开始新的transaction,可以不拉低PSEL,而使得PSEL继续为1,但是一定要把PENABLE拉低

状态机如下

在这里插入图片描述

WriteEnable = PSEL & (!PENABLE) & PWRTIE ;
或者
WriteEnable = PSEL & PENABLE & PWRTIE ;

always @ (posedge PCLK or negedge PRESETn)
begin
  if(~PRESETn)
  begin
    reg_paddr  <= 'h0 ;
    reg_pwdata <= 'h0 ;
  end
  else if(WriteEnable)
  bein
    reg_paddr  <= PADDR ;
    reg_pwdata <= PWDATA ;   
  end
end

TODO:
外设内部处理数据

读传输:
在这里插入图片描述
如上时序图,主机在T2时刻把所要访问的地址,命令和数据全部放到APB总线上,沿着组成APB的接口的金属线传播到从机接口处。在T3时刻,从机发现自己的PSEL信号为高,就知道主机需要它内部的数据(PWRITE ==0),此时从机内部准备好返回数据并把返回的数据放在数据总线上,在T4时刻,主机完成总线上数据采样得到需要的数据。


ReadEnable = PSEL & (!PENABLE) & (!PWRTIE)
always @ (posedge PCLK or negedge PRESETn)
begin
  if(~PRESETn)
  begin
    reg_paddr  <= 'h0 ;
    reg_prdata <= 'h0 ;
  end
  else if(ReadEnable)
  bein
    reg_paddr  <= PADDR ;
    reg_prdata <= 外设内部产生的数据 ;   
  end
end
assign PRDATA = reg_prdata ;

优缺点

我们看到,APB的读和写不能同时进行,每一个transaction要么是读,要么是写,由PWRITE来控制。每一个transaction至少需要2个周期。这两点导致了APB在AMBA三兄弟中是最低性能的,但是好处是协议简单,Master和Slave的设计都只需要很少的逻辑。

优点:设计简单,时序简单,用在不需要高性能总线的外设上。

缺点:每个数据的传输都需要两个时钟周期,这样的话,APB BUS满载的带宽也只有50%,带宽利用率不高。

  • 6
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
APB总线是一种用于外设连接的系统总线,它在Zynq芯片中发挥着重要的作用。 APB总线是一种简单、低功耗的总线协议,它适用于连接低速外设和高速总线之间的桥接。在Zynq芯片中,APB总线可用于连接处理器系统(PS)和可编程逻辑(PL)的外设访问。 Zynq芯片是Xilinx公司推出的一种SoC(系统级集成电路),它将Xilinx的可编程逻辑部分(PL)和ARM Cortex-A9处理器部分(PS)集成在一个芯片中。这使得Zynq芯片在处理器系统和可编程逻辑之间的通信中起到了桥梁的作用。 APB总线在Zynq芯片中连接了PS和PL部分,使得处理器系统可以通过APB总线直接访问可编程逻辑中的外设。这使得外设和处理器系统之间的通信更加高效。通过APB总线,处理器系统可以对可编程逻辑进行配置和控制,为系统提供了更大的灵活性和可扩展性。 在Zynq芯片中,外设如GPIO(通用输入输出),UART(通用异步收发器)和SPI(串行外设接口)等都可以通过APB总线与处理器系统进行通信。APB总线在处理器系统和可编程逻辑之间提供了一条可靠稳定的通信通道,使得系统设计和开发更加灵活高效。 总之,APB总线在Zynq芯片中起到了连接处理器系统和可编程逻辑之间外设的桥梁的作用,通过该总线,处理器系统可以方便地对可编程逻辑进行配置和控制,提高系统的可扩展性和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值