APB总线说明

APB属于AMBA 3 协议系列,它提供了一个低功耗的接口,并降低了接口的复杂性,APB接口用在低宽带和不需要高性能的外围设备上。APB是非流水线结构,所有的信号仅与时钟上升沿相关,这样就可以简化APB外围设备的设计流程,每个传输至少耗用两个周期。

一、接口时序说明:

1、写传输的无等待状态:

2、写传输的等待状态:

3、下面用 代码的testbench来描述下APB_WRITE这个场景:
task apb_write ( input [21:0 ] addr, input [32-1:0] data );

repeat (10) @(posedge apb_clk);

@(posedge apb_clk);

apb_PWRITE = 1`b1 ;

apb_PADDR = addr ;

apb_PWDATA = data ;

apb_PSEL = 1`b1 ;

apb_PENABLE = 1`b0 ;

@(posedge apb_clk);

apb_PENABLE = 1`b1 ;

while ( (apb_PREADY == 1’b0) && (clk_cnt_wr != 4’hf)) begin

@(posedge apb_clk);

clk_cnt_wr = clk_cnt_wr + 1 ;

end

clk_cnt_wr = 0 ;

@(posedge apb_clk);

apb_PENABLE = 1`b0 ;

endtask

4、读传输的无等待状态:

5、读传输的有等待状态:

6、下面用 代码的testbench来描述下APB_READ这个场景:

task apb_read ( input [21:0 ] addr, ouput [32-1:0] data );

repeat (10) @(posedge apb_clk);

@(posedge apb_clk);

apb_PWRITE = 1`b0 ;

apb_PADDR = addr ;

apb_PSEL = 1`b1 ;

apb_PENABLE = 1`b0 ;

@(posedge apb_clk);

apb_PENABLE = 1`b1 ;

while ( (apb_PREADY == 1’b0) && (clk_cnt_rd != 4’hf)) begin

@(posedge apb_clk);

clk_cnt_rd = clk_cnt_rd + 1 ;

end

clk_cnt_rd = 0 ;

data = apb_PRDATA ;

apb_PSEL = 1’b0 ;

apb_PENABLE = 1`b0 ;

endtask

本文转载自: https://blog.csdn.net/angelbosj/article/details/79777271