APB 总线说明

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

一、接口时序说明:

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

 APB 总线说明_第1张图片

1、写传输的等待状态:

 APB 总线说明_第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、读传输的无等待状态:

 APB 总线说明_第3张图片

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

 APB 总线说明_第4张图片

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

你可能感兴趣的:(FPGA)