tag 标签: amba,ahb,apb

相关博文
  • 热度 22
    2014-8-3 09:15
    2195 次阅读|
    1 个评论
          我的第一个问题是,看上图的协议,在发 cmdA (包括地址, trans , burst 等相关的 cmd )时, HREADY 此时是不是 1 ,或者问题提炼为,在 master 发送第一个 cmd 的时候需要 slave 的 Hready 为 1 才能发送吗,或者换种说法, slave 需要在默认的情况下将 Hready 拉高吗。      解答:不需要slave的Hready为1就可以发送cmdA,但是cmdA要想变成其他指令时必须要保证当前周期的Hready为1,否则的待发送信息就必须保持(读的话是slave提供数据),另外slave只有检测的hready为1的情况下才会采样控制信号和地址信号。因而对于slave而言其默认的Hready是高或者低对master是没有影响的。       我的第二个问题是,上图的 nonseq 和 seq 意义何在,如果 master 将 nonseq 发成了 seq 会不会错,因为每次发送 cmd 的时候也伴有地址,所以个人觉得 nonseq 发成了 seq 不会造成 slave 的接收错误,那么 nonseq 意义是不是仅仅表示一个新的 cmd 开始了?     解答:nonseq可以用来表示一个新的cmd的发起,如果slave只采样地址(此时trans不能为0,为0表示空闲),那么slave收发数据不会错,但是有的slave可能会nonseq下对应的地址作为首地址,然后其他seq下的地址就用首地址递增的方法,而不是直接采样地址,用这种方式设计的话,nonseq和seq就不能随便发送。     总结:AMBA总线并没有强制性的规定协议某些地方必须是什么,留有了很多的不确定性,这样的好处是给设计带来了灵活性,你可以按照你的理解进行设计,只要是对应起来即可;缺点是灵活性带来大家理解的不一致,这样A做的master和B做的Slave可能就不能正确的搭配工作,所以关键是一起讨论,尽可能的理解协议,按照协议来做,至于有些corner的地方一定要讨论确定,否则后面会带来很大的麻烦。为什么我做的不能工作啊,因为corner case理解的差异。     最后再说一句,讨论很重要!