热度 28
2014-8-6 23:03
5223 次阅读|
5 个评论
AHB 重点难点总结 编辑要给我加精华啊啊啊啊啊啊啊啊! 迄今为止最满意的难点和重点分析,下面的这些问题是很多人都会迷惑的地方,我是思考了很久,参考了许多论坛,问了我们老大得出的结论。 前言: 如果你之前看过一些总线或者类似总线的协议的话,那么你第一次看 AHB 协议可能感觉还行,不是很难,觉得都能看懂;如果你多看几遍或者看一遍去做和 AHB 相关的设计的时候,譬如你模拟 AHB-Master ,模拟 AHB-Slave ,然后让它们通信,你就会发现 AHB 协议中有些地方你没看懂,而且你会发现 SPEC 有些地方写的不是很明显,需要你结合前后文反复推敲,才能得到你想要的答案;关于手册其实写的已经很好了,比起国内的一些设计公司的手册,不知好多少倍,只是有些关键点是一笔带过,我想可能是为了让你去它们公司咨询或者购买它们的 IP 吧,如果都轻易搞懂了,那岂不是,哈哈!后面是我瞎扯淡! 下面进入正题: 一:模块接口(关于接口的含义,大家可以参考 SPEC ,在此不赘述) AHB-Master 接口 AHB_Slave 接口 Decoder 接口 Arbiter 接口 二:重点和难点分析 1 、关于 Hready 信号 英文版手册对 Hready 解释如上,我主要想解释一下红线部分,大意是说,挂载在总线上的 Slave 要求它的 Hready 即为输入也为输出,什么意思呢,其实是每个 Slave 都有一个 Hready 输出,这些输出经过一个 MUX(记住,不能是简单的and或者or,有很多人这样以为,至于为什么,大家可以参考下图2稍作分析就知道原因了) 再最终选择出一个 Hready_o ,这个 Hready_o 会输入到每个 Master 和每个 slave 及 Arbiter 。如图 1 ,以 2 个 M , 2 个 S 为例,图中的 sel4 产生有些难度。 图 1 2 、结合图 2 ( SPEC 中是图 3-17 )解释图 1 中的选择信号可以如何产生及图 2 的含义 图 2 图 2 中 Hgrant 信号是图 1 中 Arbiter 根据每个 M 发出的 Hbusreq 结合自身的优先级算法(没有规定何种算法,设计者可以根据自身需求选择,如 Fair-access,Round-robin )及 control 信号仲裁得到的结果,不是随便切换的,它的切换点非常有技巧,能够保证全程流水线。 从图 2 中可以看出,虽然 Hgrant2 切换为 M2 (为什么这个地方切换,是上面我提到的相关技术所致),但是 M2 并不能立即获得总线使用权,而是在 Hgrant2 为高且 Hready (注意这个地方的 Hready 就是我上面说的经过 MUX 后的 Hready_o )为高时, Hmaster 才被切换为 2 ,原因是保证上一个传输的最后一个 control 和地址发出去,进而这个时候 M2 可以发送 control 信号和 addr 信号。所以对应图 1 , sel1 和 sel2 这些信号可以为 Hmaster ,而 sel6 可以为 Haddr 。 再看图 2 , T5 时刻以后 control 已经是 M2 的了,但是 data 仍然是 M1 对应的(就是图中对应的 Master owns data 那个注释),原因很简单, AHB 是采用流水线技术,分为地址阶段和数据阶段。所以当 control 和 addr 信号切换的时候, data 并不能切换,而是要保证最后一个 control 要读或者写的数据完成才可以。所以 Hready 对应的 sel4 可以利用 addr 向后延时一拍,同时检测到 Hready 为 1 时(保证数据被采样)才进行切换, Hwdata 和 Hrdata 对应的 sel 也可以用上面的方法。 3 、从上面的分析不难得出如下结论 1 ) Master 在检测到 Hready 为 1 时发送一个 control 和 addr ,所以 Slave 也可以在检测到 Hready 为 1 时进行 control 和 addr 的采样,在采样到有效的 control 和 addr 后一个周期当 Hready 为时进行数据的采样。 2 ) Slave 在默认情况下最好将 Hready 设置为 1 (这个也是 ARM 公司推荐的),这样可以让 Arbiter 及时将总线使用权进行切换,如图 2 中,如果 Hready 提前为 1 ,那么 Hmaster 会提前变为 #2 。 3 )整个总线最难设计的部分就是 Arbiter ,大家可以参考接口图可以看出, master 和 salve 有的信号它都有,它会监测 Master 和 Slave 的情况,及时切换总线使用权,保证效率的最大化。