AXI总线学习连载(3)
鲁迅曾经说过:
学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的。
我也曾经说过:
英文手册非常重要,这是学习硬件标准的不二法门,没有捷径,我们这一行可以不说英语,英语也可以像我和我某些同事一样口语富有乡土气息,但是一定要能熟练看,内心看,做阅读理解一样看
跟着这篇博客,慢慢学习,对着官方文档,不仅可以学会这个协议,更能够学会硬件学习的方法,所谓举一反三。(我说的比鲁迅还多)
好了既然是axi,那么这么说,只要你使用arm架构的芯片,arm和fpga(pl 可编程逻辑)部分通信,或者外部设备通信,你都会用上这个协议。所以一起来学习,打工人!就该把自己的时间全部放在上面
好了不废话了,一起来探索吧!
不要厌烦枯燥,理论学习是在实践之前的必经过程,当学习完axi原型后,我也会专门贴出来一个axi协议使用开发的详细详细详细的n次方的接口解析。请学习过程中不要放弃,不要觉得枯燥!! (其实说给自己听的)
qq:2198187857 这里放出来一下,就是希望朋友们指导,有不足的地方批评教育一下,作为新手,还是很认真在学习
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
简要说明一下这一期连载所更新的内容,上一次我们介绍了每个通道的握手信号即VALID和READY信号,那么这一次我们就去深入了解握手机制和各通道握手机制特点
在讲解之前我先贴出来,五个通道里面全部都有的信号线,作为索引,我们学到哪些信号线之前我们在回头来看。
1.全局信号
2.写地址通道信号线
3.写数据通道信号线
4.写响应通道信号线
5.读地址通道信号线
6.读数据通道信号线
此处我省略了一个低功耗数据线。如果想要了解可以去官方文档查阅
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
接下来我就会梳理一下,各信号线接口的作用以及连接要求
首先我们假设一下情景,这一次的梳理是建立在一个主设备和从设备之间,利用axi总线原型进行通信
分别梳理下列四个部分
1.时钟和复位设置
2.基本的读写处理
3.通道之间的相关关系
4.读写处理的机制
以上四个内容是我们接下来几个连载要讲解的核心,首先进入时钟和复位设置
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
1.时钟和复位设置
首先这个章节要求了我们使用全局时钟和低电平有效的复位信号,五个通道的时钟和复位信号都是一样的
对于时钟而言,这是一个单bit信号,且系统都是在时钟上升沿触发,这就说明,这个总线系统其实是一个受时钟控制的时序电路,
所以我们在使用时,一定不能在主设备的输入和从设备输出之间接入任何组合逻辑电路,这样会使得时序混乱。(这是一个 常见的错误点,因为
当我们在pl部分,设计axi接口时,我们有时候会无意的建立起这些组合逻辑,在verilog语言上,反映出来就是,这些存在的信号线,一定都应该是reg型变量,
详细的可以看后续的案例解答。
复位信号是低电平有效,支持异步的复位信号产生(即随时随地可以复位信号置低),但是要让这个复位信号触发,还是同步于时钟
也就是说在fpga里面,通常讲复位信号打拍延迟,用延迟过后的信号作为复位标准。
在复位的时候有以下需要注意的点
复位期间,ARVALID和AWVALID(请注意是两个地址通道,对于地址通道主设备是source,所以这两个信号是来自于主设备发起),同时还有WVALID(主设备
依然时srouce),这时候主设备需要把这三个信号全部置为低电平。
怎么理解这句话呢,其实很好理解,在复位发生时,其实我们并不希望有有用信号产生,即标准规定,复位高于一切。(慢慢品)
其二对于RVALID和BVALID其实从设备时源,所以源设备一样必须把这两个信号置为低电平。
这样说着太空洞,我们这么看,对于主设备而言,一般都是arm处理器,我们不能用Verilog去写,所以一般来讲我们都是去写这个从设备的端口,如果语言来讲,
就是如下
always @(posedge clk or negedge rst_n_0)
if(!rst_n_0)
RVALID<=1'b0;
BVALID<=1'b0;
当然这只是一部分,这个就表明了,复位有则所有的行为都别来,当然上图的复位信号最好经过一个打拍同步处理比骄好
这里放一个时序图
这样就加强理解,所有vaild信号都必须在复位信号为无效电平的时候才能触发。
为什么需要讲解这么细致,因为,我们在fpga里会自定义用axi的ip核,此时这些ip核是从设备,当然就需要我们去设计这个ip核的时序逻辑,
虽然会自动生成,但是我们会往自动生成的基本接口代码内部写入新的逻辑,这个时候,我们秉承读懂全套的接口代码,这样才能保证我们写出来
的ip核更为完善。
最后强调一次,时钟信号为全局信号,复位信号为低电平有效,专业一点就是异步复位,同步释放(异步复位信号可以随时来,但是还是跟随上升的时钟沿触发)
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
接下来第二个章节
2.基本的读写处理
该章节包含两个部分
1.基本握手机制
2.通道发送信号的要求
首先讲解握手机制,在连载(2)和连载(1),我们简单说明了握手机制,其实就是当VALID和READY同时高电平,则各通道开始有效工作,这个理解是原理性的。
我们还需要从时序上去理解它,这里我把手册上的官方定义握手信号的注解翻译出来(英语就这个水平凑合看看哈)
对于五个通道而言,它们都使用各自的READY和VALID去实现握手机制去控制五个通道内部的处理,包括传递数据,传递数据及控制信息。这个两路双向控制的
机制让主设备和从设备都能够控制通道内部的信息交换速率。我们知道源设备能够产生valid信号,去告知目标设备通道内部信息是否有效,同样的目标设备能够产生ready
信号告知源设备是否准备好了接收信息。如果要完成一次transfer(一拍)则需要两个信号都是高电平。
同样的,ready和valid信号之间不能有组合逻辑链接。(如何理解这句话,其实从原理性来看,两个信号属于时序体系,所以不能够有组合,当然还有另外一层意义,
就是两个信号其实相互无关,只是他们共同决定传输是否开始,即valid产生是因为信号有用而产生,而不是ready信号有了 才产生,同样的ready信号产生,是因为目标设备
做好了准备,并不是valid有效)
那么这里展示两个握手机制的案例,分别给出时序图进行解析。
第一幅图我们可以看到,源设备在T1时刻之后产生了有用的信息,并且在T1时刻之后VALID信号也开始有用,但是需要注意,信号的有用没用,需要时钟上升沿判断,所以其实是T2时刻
时钟上升沿处,系统知道了信息有效。目标设备在T2时刻之后才发送ready信号,错过了T2时刻上升沿,所以源设备必须保持它携带的的信息稳定知道T3时刻,此时握手信号都为高电平,才信息
被传走,所以真正发生传输的实在T3时刻上升沿。
这里官方文档给了一句英语,这一句阅读理解我是问了好多同事。。。因为搞得我有点绕。不过还好,细细解析一下就明白了,现在我把原文贴出来
这句话就用阅读理解做题来看吧,我们首先看before即之前,asserting VALID即将要把VALID置高时刻之前(before asserting VALID)。再看前面连在一起就是,一个源设备将要把VALID置高之前是不允许去等着READY信号被置高
才置高,这听起来有点绕口,但是不妨碍理解,其实就是,VALID高不高完全不取决于READY,因为信息有用就是有用,没用就是没用,所以VALID是主动的,跟READY信号没关系。
但是这个情况下,需要注意,如果说一个VALID信号先于READY信号拉高了,那么就必须要等到这个握手完成,因为这样数据才不会丢失,所以我们需要安排好这个设置,需要注意的时,握手信号完成时在两个信号
都为高电平,且在时钟上升沿处。
总结一下:就是如果valid信号先于reday,这个情况必须要等待握手完成。VALID高低电平,不由READY信号决定,仅仅由信息的有用性决定。
第二种情况
此时T1时刻之后READY信号开始拉高,到了T2系统开始知道目标设备准备好了,那么T2之后valid开始有效,T3时刻到后握手完成,传输走了有用信号。
这里我们可以看见目标设备其实可以一直把这个READY信号拉高,因为只要目标设备寄存器有空间就行,这个可以和第一种情况区分一下,第一种情况说的是,
VALID信号高低也好其实完全是取决于信号是否有用,这时候如果VALID先高,则必须完成握手后,才能拉回去,但是这种情况,READY信号可以先拉高,但是
可以不用等握手完成就拉低,这就说明,只要没准备好就可以拉低,READY拉高拉低标准取决于目标设备,和VALID无关,所以这也印证之前讲的VALID和READY
之间不能有组合逻辑。
当然官方给了一个说明,就是说他们不建议在这个情况下把ready随时都是低电平,为什么呢?因为我们看,在这种情况下,ready是先到的,所以首先需要一个时钟
上升沿确定ready拉高,然后valid来了又需要等一个时钟沿,这样真的完成握手其实已经等待了两个时钟周期,所以不建议。(这个可以注意一下,这个思想可以用于我们
自己设计ip逻辑使用)
当然还有第三种情况,就是他们同时到达,这里也就不再赘述了,如前面分析即可,把时序图放上来。
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
学习不能贪多,这个章节我们详细学习了握手机制,这里做一个总结。
1。握手机制在五个通道内都有
2.握手机制中有三种情况valid先到,ready先到,同时到
3.如果valid先到则必须完成握手,否则遗漏有效数据
4.如果ready信号先到,如果目标设备没准备也可以拉低,这样防止设备冲突
5.设计应该最好保证,传过来的东西只要有用都能接
6.VALID的高低只和信息有用无用相关,不受ready控制,即两者之间没有组合逻辑关系
7.READY的高低只和目标设备准备相关,不受valid控制,即两者之间没有组合逻辑关系
8.全局时钟供给主从设备
9.复位信号为低电平有效,且异步复位,同步释放。
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
最后补充一下
五个通道的握手信号名字,查表,并且要分清楚主从设备和目标设备源设备的区别
举个例子作为联系
ARVALID和ARREADY信号来自于写地址通道,其中主设备是源设备产生ARVALID,从设备是目标设备产生ARRAEDY。
RVALID和RREADY信号来自于写数据通道,其中从设备是源设备产生RVALID,主设备是目标设备产生RREADY
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
鼓励一下自己,今天是总结第三天,完成这个协议的博客讲解可能会花很多时间,但是每天两到三小时,的确很爽
好了
该去玩游戏了,又可以去所罗门群岛了 哈哈哈哈
明天见