假如我扩成20个,在选择的逻辑上应该没问题吧。厂商一般设置16个,是为了避免时序问题?扇出问题?有无同志讲解一下原因。
AHB(Advanced High-performance Bus)和APB(Advanced Peripheral Bus)是两种在系统级别上用于片上总线通信的标准接口。它们广泛应用于SoC(System-on-Chip)和嵌入式系统中。
关于AHB和APB从机数量的限制,实际上并没有硬性的限制,因为这取决于具体的系统设计和实现。AHB和APB从机的数量可以根据系统需求进行配置和扩展。
然而,对于一个常见的设计,在实际应用中,一般不会有超过16个从机连接到单个AHB或APB总线。这是因为系统中每个从机都需要一些资源和电路来处理总线事务,并且随着从机数量的增加,总线上的负载和冲突也会增加。因此,为了保持系统性能和稳定性,设计者通常限制从机数量。
需要注意的是,这里提到的16个从机数量仅仅是一个常见的上限估计,并不是硬性规定。在某些特定的应用中,可能会有更多或更少的从机连接到AHB或APB总线,这取决于具体的系统需求和设计决策。
网上有人举的例子很形象:
APB和AHB总线,类似于个人PC系统里的北桥和南桥总线。
南桥总线上挂接的都是鼠标、键盘这些慢速的设备,北桥上挂接显卡等高速设备。
南桥频率低,北桥频率高。另外,南桥最后也要接到北桥上。
这些感觉都类似于APB和AHB。
AHB,是Advanced High performance Bus的缩写,译作高级高性能总线,这是一种“系统总线”。
AHB主要用于**高性能模块(如CPU、DMA和DSP等)**之间的连接。AHB 系统由主模块、从模块和基础结构(Infrastructure)3部分组成,整个AHB总线上的传输都由主模块发出,由从模块负责回应。
APB,是Advanced Peripheral Bus的缩写,这是一种外围总线。
APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像 AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥。再往下,APB2负责AD,I/O,高级TIM,串口1;APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。
这两者都是总线,符合AMBA规范。
答案:
AHB或APB从机数为什么一般最大只能支持16个?如果我需要连接20个从机,会不会引发时序问题或者扇出问题?通常厂商为什么会将支持从机数量设置为16个?能否请相关专家解释一下原因?
对于一般的AHB或APB总线来说,由于总线设计的架构原理,一般只支持最多16个从机,连接超过这个数目的从机可能会引发时序问题或者扇出问题。
首先我们需要明确AHB或APB总线的架构原理,AHB或APB从机连接的是总线的slave接口,它们通过总线上的地址译码器,与总线或者对应的总线桥进行连接。在AHB或APB总线中,不同的从机通过相同的地址线接入总线中,然后通过物理地址译码(可以是硬件译码或软件译码)确定地址。当出现多个从机要响应同一物理地址的时候,地址译码器可以通过目标从机的地址来识别哪个从机目标地址匹配,响应相应的响应。
虽然一条AHB或APB总线可以支持多个从机的连接,但由于总线的物理限制,连接超过16个从机就可能会引发时序问题或扇出问题。由于每个从机的译码逻辑和信号传输等都需要一定的物理时间,所以连接过多的从机可能会导致总线的信号传输时序不可控,进而会导致不确定性的信号传输,引起总线信号死锁或者其他处理异常等问题。而且,连接16以上的从机还可能会引起扇出问题,对总线上的时钟频率造成影响,当时钟频率过高时,总线上的时序问题就会更加严重。因此,为了确保总线的稳定性和可靠性,一般情况下厂商会将AHB或APB从机的连接数控制在16个以内。
如果需要连接20个从机,需要根据具体情况来考虑解决方案。一种方法是通过加入一些中间设备,如总线扩展器、总线控制器等,将多个从机与控制器相连,然后再将控制器连接到总线上。这样可以有效地解决总线连接大量从机的问题。另一种方法是利用I2C等总线来扩展从机的数量,I2C总线可以连接多达128个设备,但它的传输速率比AHB或APB总线要慢得多。
总之,为了确保总线的稳定性和性能不出现问题,厂商在设计AHB或APB总线时通常会将从机数量的连接数限制在16个以内。如果需要连接更多的从机,需要考虑使用中间设备或其他传输协议来扩展,以实现总线的可靠性和稳定性。