https://www.cnblogs.com/lyuyangly/p/4853921.html
https://blog.csdn.net/u011280717/article/details/81052436
一、简介
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
网友评论