您当前的位置: 首页 > 

FPGA硅农

暂无认证

  • 0浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AMBA总线---APB总线协议

FPGA硅农 发布时间:2022-03-29 23:05:32 ,浏览量:0

APB(Advanced Peripheral Bus)是AMBA总线体系的一部分。相较于AMBA总线体系中的其他总线,APB总线具有低功耗,低复杂度的特征。APB总线主要应用于对性能要求不太高的低带宽外设接口。 本文所讲述的是AMBA4中的APB协议。其信号如下: 在这里插入图片描述 其中,PCLK和PRESETn分别为时钟信号和复位信号,PADDR为地址(至多32位),PPROT为保护类型,PSELx为选中信号,当它为1时,表明选中该从设备,因此每个从设备都会有一个对应的PSELx信号,PENABLE为使能信号,下面会详细阐述,PWRITE表示本次传输的方向,1表示写,0表示读,PWDATA为要写的数据,至多32bit,PSTRB为字节选中信号,第i位为1,表示第i*8到第i*8+7位是有效的,PRDATA为读出的数据,同样至多32位,PSLVERR为传输失败指示信号,为1且PENABLE、PSELx、PREADY均为高时,表明传输错误,否则表示传输正确。 下图是PPROT信号各个位的含义 在这里插入图片描述

Write transfers With no wait states

无等待的写传输,如下图所示,写传输分为两个阶段:Setup Phase和Access Phase,第一个周期,PADDR给出要写的地址、PWRITE为1表示写传输,同时PSELx拉高选中设备,PWDATA给出要写的数据,此时PENABLE为0,这个阶段叫做Setup Phase。第二个周期,上述信号保持不变,主机和从机分别拉高PENABLE和PREADY,写入数据完成,下一个周期,PSELx、PENABLE以及PREADY均拉低。(若紧接着下一次传输,则PSELx无需拉低) 在这里插入图片描述

With wait states

有等待的写传输,如下图所示,第一个阶段和上面相同,第二阶段,PENABLE拉高,直到检测到从机的PREADY信号也为高时,Access阶段才完成。而在等待PREADY信号为高期间,PADDR,PWRITE,PSELx,PWDATA,PSTRB,PPROT信号均应该保持不变。 在这里插入图片描述 从有等待写传输和无等待写传输的时序中,我们可以看出,Access Phase只有在PSEL、PENABLE和PREADY信号同时为高时,才会发生,否则需要等待。

Read transfers With no wait states

与无等待的写传输唯一不同的地方,就是在下图中,PWRITE信号是0,表示读数据。 在这里插入图片描述

With wait states

在这里插入图片描述

APB总线的状态机

下图为APB总线协议的状态机,需要注意的是,当ACCESS完成后,如果还有一次传输,则直接跳转到SETUP阶段,否则跳回IDLE阶段。 在这里插入图片描述

System Verilog代码

slave

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/03/29 21:22:43
// Design Name: 
// Module Name: apb_slave
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module apb_slave(
input logic PCLK,
input logic PRESETn,
input logic [31:0] PADDR,
input logic [2:0] PPROT,
input logic PSELx,
input logic PENABLE,
input logic PWRITE,
input logic [31:0] PWDATA,
input logic [3:0] PSTRB,
output logic PREADY,
output logic [31:0] PRDATA,
output logic PSLVERR
    );
localparam N  =  32;
logic [31:0] REG [0:N-1];
logic [31:0] ADDR;
logic [3:0] STRB;
logic WRITE;         
//ADDR锁存
always_ff@(posedge PCLK)
if(PSELx&&~PENABLE)
    ADDR            
关注
打赏
1658642721
查看更多评论
0.0379s