网络知识 娱乐 设计AHB2APB同步桥

设计AHB2APB同步桥

文章目录

  • 1.SPEC和相关协议
  • 2.AHB2APB Bridge 的规格
  • 3.AHB2APB Bridge 的interface
  • 4.AHB2APB Bridge 的状态机
    • 4.1 输入、输出不寄存
    • 4.2 输入、输出数据寄存
    • 4.3 考虑pslverr反馈传输ERROR时
    • 4.4 其他的状态
  • 5.AHB2APB读写时序
    • 读操作
    • 写操作
  • 6.设计注意事项
    • 1.HREADYOUT信号
    • 2.Memory Map的边界地址对齐
    • 3.Memory Attribute
    • 4. ERROR response
    • 5.跨时钟域的处理
    • 6.采用寄存器寄存一拍
  • 7.Verilog设计代码


👉关于AHB2APB的设计的代码请看:AHB2APB同步桥的设计代码
👉关于AHB2APB的验证请看:AHB2APB验证


1.SPEC和相关协议

AHB2APB SPEC请看:ARM官方AHB2APB SPEC

AMBA中文协议请看看:AHB lite协议和APB4协议

ARM AMBA英文原版协议请看:ARM官方文档网址

2.AHB2APB Bridge 的规格

AHB2APB bridge 是完成高性能总线到APB总线的桥接器,主要完成的功能:

  • AHB2APB bridge 是APB唯一的master;
  • 锁存AHB地址以及控制信号,并使之在整个APB传输期间有效;
  • AHB和APB时钟是同步时钟,APB时钟和AHB时钟的分频关系由PCLKEN信号决定;
  • 支持一个slave,所以只产生一个选择信号PSEL;
  • 对于写传输,驱动数据到APB总线上;对于读传输,驱动APB数据到系统总线上;
  • 支持APB模块的使能信号(APBACTIVE);
  • 支持输入输出数据寄存或者不寄存,由模块控制参数控制。
  • 支持APB总线字节选通信号(pstrb[3:0]),保护控制信号(pprot[3:0])。

3.AHB2APB Bridge 的interface

  • 需要一个AHB 的 interface,定义AHB的接口信号和方向 ;
  • 需要一个APB 的interface;

在这里插入图片描述

4.AHB2APB Bridge 的状态机

4.1 输入、输出不寄存

此状态机:

  • 输入(wdata)、输出数据(rdata)均不需要寄存一拍;
  • 不考虑 pslverr 情况;

这种情况与APB状态机是一样的,如下图所示:
请添加图片描述

注:图中的绿色箭头为状态机的 else 情况,防止出现死锁。

状态描述
IDLE传输空闲状态,为总线的默认状态
SETUP传输建立状态
ENABLE传输状态

解释上图中的状态转移:
注:PCLKEN为产生APB时钟的分频信号;apb_select 为传输建立的选通信号;状态跳转发生在HCLK的上升沿。

当前状态次态路径描述满足条件
IDLE1当收到AHB的传输请求时,会先将apb_select拉高,状态跳转到SETUP状态 ;否则PCLKEN未有效之前,保持在IDLE状态apb_select
SETUP2当APB的时钟上升沿到来时(PCLKEN有效),将PENABLE信号拉高 ;否则PCLKEN未有效之前,保持在SETUP状态PCLKEN
ENABLE3如果紧跟着仍然还有传输(PREADY & apb_select),状态又跳转回SETUP ;否则PCLKEN未有效之前,保持在ENABLE状态PREADY & apb_select & PCLKEN
ENABEL4如果紧跟着后面没有传输, 则跳回IDLE状态PREADY & (! apb_select) & PCLKEN,即else if(! apb_select)

4.2 输入、输出数据寄存

此状态机:

  • 输入、输出数据均寄存一拍;
  • 但不考虑 pslverr 情况;

请添加图片描述
注:图中的绿色箭头为状态机的 else 情况,防止出现死锁。图中有一处错误:setup状态有一个绿色箭头指向IDLE状态,这个路径是不存在的。

在原有输入输出数据不寄存的基础上,插入两个状态:

  • ST_APB_WAIT
  • ST_APB_ENDOK
状态描述
IDLE传输空闲状态,为总线的默认状态
WAIT传输等待状态,将输入和输出数据寄存一拍
SETUP传输建立状态
ENABLE传输状态
END传输结束状态。因为输出要寄存一拍

解释上图的跳转条件:
注:reg_wdata_cfg和reg_rdata_cfg分别是否需要寄存输入、输出数据的控制信号。

当前状态次态路径描述满足条件
IDLE1当APB时钟时钟上升沿到来时(PCLKEN有效);并且apb_select为高;并且 只要是满足读操作或者写数据不需要寄存,就跳转到SETUP状态 ;否则继续保持IDLE状态PCLKEN & apb_select & (~(reg_wdata_cfg & HWRITE) )
IDLE2如果条件1不符号(也就是数据需要寄存一拍),并且apb_select为高时 ,就将状态跳转到 wait 状态 ;否则继续保持IDLE状态PCLKEN & apb_select & reg_wdata_cfg & HWRITE ;相当于else if(apb_select)
WAIT3如果APB时钟上升沿到来,就将状态跳转到SETUP状态,否则继续保持WAIT状态PCLKEN
SETUP4如果APB时钟上升沿到来,就将状态跳转到ENABLE状态,否则继续保持setup状态PCLKEN
ENABLE5如果APB时钟上升沿到来 ,PREADY为高,并且输出数据rdata需要寄存,则跳转到END状态;否则保持在ENABLE状态PREADY & PLKEN & reg_rdata_cfg
ENABLE6当APB时钟上升沿到来,如果输出数据不需要寄存一拍,并且没有后续传输进行,则跳转到 WAIT 状态PREADY & PLKEN & (! reg_rdata_cfg) & ( ! apb_select)
END7当APB时钟上升沿到来 ,并且仍然有后续传输(PCLKEN & apb_select ),并且如果输入数据需要寄存一拍,则跳转到WAIT状态 ; ;如果7、8路径条件均不符合,则跳转回IDLE状态PCLKEN & apb_select &reg_wdata_cfg & HWRITE
END8当APB时钟上升沿到来 ,并且仍然有后续传输(PCLKEN & apb_select ),如果输入数据不需要寄存,则跳转到SETUP状态 ;如果7、8路径条件均不符合,则跳转回IDLE状态PCLKEN & apb_select & ~(reg_wdata_cfg & HWRITE)
ENABLE10如果输出数据不需要寄存器,并且紧跟着还有传输进行,则跳转到 IDLE 状态PREADY & PLKEN & (~reg_rdata_cfg) & apb_select

4.3 考虑pslverr反馈传输ERROR时

此状态机:

  • 输入、输出数据均寄存一拍;
  • 并且向AHB master 反馈 HRESP 信号;

请添加图片描述
注:上图中的黄色的路径为新增ERROR响应后的状态转移。因为AHB master要想接收到slave反馈回来的error信号,这个error信号必须要保持两拍,需要再加入两个传输错误状态:

  • ERROR1
  • ERROR2
状态描述
ERROR1传输ERROR状态1,MASTER 可以判断是取消burst,还是继续传输
ERROR2传输ERROR状态2,根据master做出相应处理后,根据总线状态判断后续状态机的次态

注:其他路径与第二种状态机一样,为了文章不啰嗦,直接写后续的新增的状态跳转路径

当前状态次态路径描述满足条件
ENABLE10如果 PSLVERR 拉高,则进入 ERROR1 状态,否则,开始判断是否满足5、6、9的条件PREADY & PSLVERR & PCLKEN
ERROR111下一个 HCLK 上升沿到来就直接跳转到ERROR2状态
ERROR212如果还有传输继续,并且输入数据不需要寄存,就跳转到 SETUP 状态PCLKEN & apb_select & !(reg_wdata_cfg & HWRITE)
ERROR213如果还有传输继续,并且写入的数据需要寄存,就跳转到 WAIT 状态PCLKEN & apb_select &reg_wdata_cfg & HWRITE
ERROR214如果没有传输继续,就直接跳转到 IDLE 状态PCLKEN & ! apb_select

4.4 其他的状态

  • 读数据寄存,写数据不寄存时,并且存在或不存在pslverr的情况;
  • 写数据寄存,读数据不寄存时,并且存在或不存在pslverr的情况;

5.AHB2APB读写时序

读操作

请添加图片描述

写操作

请添加图片描述

6.设计注意事项

1.HREADYOUT信号

从下图我们可以看到,master和slave都会有一个HREADY信号输入,slave产生HREADYOUT信号经过MUX后形成HREADY信号,如果刚开始HREADYOUT信号均为低,系统就会处在等待状态。
要求:HREADYOUT信号在复位后必须为高
在这里插入图片描述

2.Memory Map的边界地址对齐

当AHB总线上的master对slave进行读写时,发出的地址经过AHB总线的译码器(通过内存映射表) 产生该地址所对应slave的选择信号,选中对应的slave;这样就可以对slave进行读写操作了。而 Memory Map是由很多1 KB 的空间(210)作为单元构成的,AHB在译码时只会译码1KB以上的地址空间(换句话说就是分配给单个slave的最小地址空间为1KB),假如slave的地址对应的是3KB,此时slave的地址映射有可能不是边界对齐的。
如下图所示:
slave 0 的地址是1KB对齐的,而slave1的地址则不是1KB对齐的,这就会导致当你访问这个“蓝色”的地址空间时,这时译码产生的这个hsel信号就会同时选中slave1 和default slave。
注:这里的default slave是指的没有分配地址的slave,因为AHB在做地址映射时,并不是所有地址值都会对应一个slave,没有使用的地址值可以使其对应一个default slave。
请添加图片描述
default slave 既可以在AHB bus做地址映射时指定,也可以在MUX中选择slave的时候指定,目的是为了防止CPU在发送访问指令后,无法正常访问。
请添加图片描述

3.Memory Attribute

设计slave时需要考虑下面两个信号。

  • HPROT信号:
  1. 主要就是要去定义slave是可以在特权模式进行访问,还是user模式下可以进行访问,或者两种模式都可以访问。一般情况user模式下可以访问,特权模式下也可以访问;特殊的情况是特权模式可以访问,而user模式不能访问。
  2. Device memory要区分到底是early response还是 not early response,所谓early response就是把写的数据先放在一个write buffer里面,然后马上就可以返回一个response,这时这个写传输就可以结束了。如果是not early response的话,发送的写传输一定要生效,生效后然后才返回一个response,这个transfer才算结束。
  • HNONSEC信号 :为了适配ARM的trustzone机制,有两种 secure 和 non-secure地址空间,包含static secure 和 dynamic secure机制。所谓static secure 是指non_secure和secure的地址空间分配在设计的时候就固定死的,而dynamic secure是指non_secure和secure的地址空间分配是可以通过寄存器进行配置的。

4. ERROR response

error response拉高的两个周期一定是要发生在HREADY信号上升沿附近。换句话来说,如果要有error response,那就一定要满足HREADY为低的一个周期和为高的一个周期。
在这里插入图片描述

5.跨时钟域的处理

AHB2APB bridge ,典型的SOC中一般AHB子系统的时钟频率在200MHZ,而APB一般在几十KB~几十兆。所以AHB2APB bridge中由高时钟频率向低时钟频率的跨时钟传输需要做处理。

  • 异步FIFO
  • 对于单bit可以通过打两拍或打三拍的方式
  • 握手协议

6.采用寄存器寄存一拍

SPEC中规定可以将输出数据和输入数据寄存一拍,以此实现高频率传输。尽管增加一拍寄存,使得传输上延迟了一拍。如果设计中的组合逻辑延迟很大,会导致系统频率不能太高,否则会造成时序不满足的情况。当采用寄存器一拍,就会切断过长的组合逻辑的时序路径,可以采用更高的系统时钟频率。

7.Verilog设计代码

文章过长,不易阅读,所以把代码拆分在:AHB2APB同步桥的设计代码 一文中。