【AMBA】AHB中hreadyout和hready_in的区别

目录

AHB协议中slave的HREADYOUT和HREADYIN的区别

1. 没有hready_in会发生什么

2.有hready_in会发生什么


AHB协议中slave的HREADYOUT和HREADYIN的区别

  • HREADYOUT:用于指示slave准备好接收master发过来的一笔传输
  • HREADYIN:用于指示slave的上一笔传输是否结束

1. 没有hready_in会发生什么

由于AHB是支持pipeline传输的,所以当前的cycle会是上一个slave的data phase,也是下一个slave的addr phase。上面这张时序图表明master有两笔写传输,第一笔传输为slave1(s1),传输类型为SEQ,在第一笔传输的第二个周期,也就是第一笔传输的data phase,此时slave1没有准备好被写数据,因此把s1_hreadyout拉低,但此时slave2已经看到自己的NONSEQ传输了,而且slave2已经是准备好了的。如上图所示:

那这时master那边只能看到一个hready,那到底是看s1的还是s2的呢?

  • 如果看s1的话,那么master会在下一个周期维持NONSEQ,那么s2会认为,我已经在上一个周期接收了一个NONSEQ,现在又来了一个NONSEQ并且addr还没有递增。在s2会发生protocol fail。如下图1所示
  • 如果看s2的话,那么s1的写数据就会失败,因为当前s1还没有准备好。如下图2所示

2.有hready_in会发生什么

那么这个时候就要引入我们的hready_in了。这个hready_in有两种写法:

  • 通过一个mux,把在data phase的slave的hreadyout作为输入连接到所有的slave
  • 把所有的slave的hreadyout相与,然后再连接到所有的slave

slave必须看到自己的hreadyin&hreadyout,才认为一次addr phase/data phase的成功。

而且slave必须等到hreadyin为高电平时才进行addr以及控制信号的采样:

if(hreadyin) 
begin
	addr_reg <= haddr;
	htrans_reg <= htrans;
	hwrite_reg <= hwrite;
end

重新拿上面的仿真图看一下,由于前一个周期的s1_hreadyout为低电平,所以s2的hready_in也为低电平,那么该周期s2不会对addr以及控制信号进行采样。在下一个周期s1以及准备好了,s1_hreadyout拉为高电平,s2的hready_in也为高电平,表示上一笔传输以及结束了,可以开始下一笔传输,也就是s2的传输,此时s2就可以对addr以及控制信号进行采样了。就不会出现上面的问题。

原文链接:https://blog.csdn.net/weixin_42208307/article/details/112913587

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值