我的问题我来解--AMBA总线协议

 

    我的第一个问题是,看上图的协议,在发cmdA(包括地址,transburst等相关的cmd)时,HREADY此时是不是1,或者问题提炼为,在master发送第一个cmd的时候需要slaveHready1才能发送吗,或者换种说法,slave需要在默认的情况下将Hready拉高吗。

    解答:不需要slave的Hready为1就可以发送cmdA,但是cmdA要想变成其他指令时必须要保证当前周期的Hready为1,否则的待发送信息就必须保持(读的话是slave提供数据),另外slave只有检测的hready为1的情况下才会采样控制信号和地址信号。因而对于slave而言其默认的Hready是高或者低对master是没有影响的。 

    我的第二个问题是,上图的nonseqseq意义何在,如果masternonseq发成了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理解的差异。

    最后再说一句,讨论很重要!

网友1评论:第一个问题的解答,写的有点矛盾,slave采样cmd信号为何需要hready拉高?hready是slave给出的,slave采样cmd信号又要hready拉高,岂不是死锁(假如hready初始为0,协议上只是建议初始值为1)?

永不止步步 发表于11-02 10:40 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号