我的疑问也可能是你的疑问
之你真的看懂AMBA总线协议了吗
一)问题的来源
离开了学校这座象牙塔,步入了社会这个大熔炉,第一站就是公司,都不曾给你喘气的机会。在公司的头三个月基本上是培训,涉及到公司的文化,公司的日常制度,由于是软件和硬件结合的公司(IC设计,硬件设计芯片,嵌入式负责开发应用平台、驱动),所以对保密制度更加关切。这些方面培训结束后基本上都是在培训设计技术方面的内容。
我的第一个培训课题是uart,主要是看uart手册、然后汇报,最后测试公司现有的IP,修改IP实现附加功能,别小看了这个过程,看起来不难,然而真正去做的时候发现很多方面并不是很懂,懂得也不是很深,譬如软硬件中断,软硬件流控制,FIFO深度如何设定,寄存器读写,ARM公司的APB中线;这些东西融合到一块,就不在是小问题,而是五味俱全的设计。
我的第二个培训课题是总线,包括公司自定义总线和ARM公司的AMBA总线,还有开源总线OCP,关于公司的总线涉及到保密制度,在此不多述,而ARM公司的AMBA总线包括AHB、ASB、APB(现在出的3.0版还有AXI),我侧重的是AHB总线,其他方便的内容如果你感兴趣可以自行补脑。第一阶段是看总线协议然后汇报;看着总线手册感觉不是很难,但是让你几套总线对比看,对比优缺点的时候,难度就上来了,为什么这样设计而不是那样设计,里面可有学问了。看完和汇报完之后是做设计,将公司的总线协议转换为AHB协议,曾经的以为看懂,在设计的时候又都变成了问题,难怪有人说,考验你懂不懂,就考你能不能说出来给别人听,写出来给别人看,做出来给别人演示。在做协议转换的时候遇到了很多的问题,虽然我有疑问,但是我仍然带着疑问做起了设计,给我培训的导师说没关系,你现在是培训,问题越多越好,你想的就会深,学到的自然会多,下面举几个例子。
二)我的疑问,也可能是你的疑问
看上图的协议,我的问题是在发cmdA(包括地址,trans,burst等相关的cmd)时,HREADY此时是不是1,或者问题提炼为,在master发送第一个cmd的时候需要slave的Hready为1才能发送吗,或者换种说法,slave需要在默认的情况下将Hready拉高吗。关于这个问题,我在本论坛里看过别人的会答,也在其他论坛看过相应的解答,大家意见不同,有的说AMBA并没有规定是不是1,各持己见!
我的问题二是,上图的nonseq和seq意义何在,如果master将nonseq发成了seq会不会错,因为每次发送cmd的时候也伴有地址,所以个人觉得nonseq发成了seq不会造成slave的接收错误,那么nonseq意义是不是仅仅表示一个新的cmd开始了?还是另有深意!
上面大概是我的两个主要疑问,还请论坛里的嵌入式牛人,或者IC设计牛人,或者对ARM公司的AMBA总线理解深刻的人看到后不吝解答!
三)带着疑问的设计
虽然我有疑问,但是带着疑问我做起了设计,下面是大概的设计架构,和其中的一个状态机,另一个状态机类似。现在的架构和状态机都不够成熟,就在我现在写的时候就感觉到了。后续我会提供更为成熟的架构和思想,我觉得交流自己的心得,才能有新得!
四、总结
就是这样,协议这东西,每个人理解力不同,理解的结果就不同,设计出来的就不同,如果你的设计和其他人的设计都依赖于某个协议,你的设计要依靠其他人的设计才能存活的话,那么你和其他人必须讨论一下你们对协议理解的是不是相同,否则做出来的产品就糟糕了,我们公司的老大就举过这样的例子。
好了就写这么多了,还望有会的小伙伴回答我一下上面的问题!
sunyzz 2014-8-4 21:10
用户1206368 2014-8-4 09:53
sunyzz 2014-8-1 21:45
用户466443 2014-7-31 20:29