JESD204B的AXI4-Lite时序分析
1.前言
本人在写JESD204B的AXI4-Lite配置接口时,发现对端口时序的理解和常规的理解不一样,因此写这篇文章以作记录,具体如下。
1.1写时序异常
按常规理解的时序图(参照SRIO)写出来的代码,ready是因,valid是果。在仿真时发现在时钟复位配置好后,ready信号并没有按想象中一样,会先拉高来等待输入数据。ready信号是一直为0的。
检查配置情况发现配置没有错误,然后对比JESD204B ip核的demo文件仿真图,发现ready信号要先等valid信号有效后才会输出一个时钟的有效信号。这成了valid是因,ready是果。因果和常规理解的是反着的。
具体的情况见第3节。
1.2读时序异常
按常规理解的时序为,ready准备好后,输入读取的地址并且valid有效时,ready会拉低去处理内部信号,在输出对应地址数据后,再次拉高等待下一次读取。
但是JESD204B的ip中AXI4-Lite配置接口的读aready是隔一段时间输出一个固定的2个时钟高ready。即使是在availd拉高后aready也不会根据availd拉低,依然是输出固定的2个时钟高信号。这导致我们在需要连续读取内部数据时,不能单纯的把aready当成读取下一个地址准备好的依据。
具体情况见第4节。
2.JESD204B的AXI4-Lite接口功能
AXI4-Lite部分的接口是用于配置JESD204 core 的寄存器,其中有一些关键参数是必须要配置的,比如:
- )M:(converters/device):AD/DA器件的转换通道数
- )L:(Lanes per Link):接的通道线数量,即占用GTX线数
- )LR:(Line Rate):单根线(通道)的速率,LR=(M*S*N’*10/8*FC)/L,FC为采样率;
- )F:(octets per frame):每帧包含的字节数,F=(M*S*N’)/(8*L);
- )K:(frames per multiframe):一个多帧包含多少个帧,根据AD/DA手册填写,一般是32;
- )N:转换器的分辨率;
- )N’:word的长度,4的倍数,N’=N+CS+T,CS是控制位,T是尾码;
- )S:(samples):S表示每一个转换器每一帧中的采样次数。一般情况下,S都是1,。S必须是整数。协议中允许S大于1,但是S等于1的时候开业保证帧时钟和采样时钟相等。比如S=1,则一个500MSPS的转换器,帧时钟也是500M。
因此配置JESD204B的AXI4-Lite接口是必须的。下面谈谈我对JESD204B的AXI4-Lite接口时序的理解,仅做参考。
3.写时序
srio中的时序为常规理解的时序图,demo中时序情况为JESD204B的ip核时序情况。
3.1 srio中的写时序说明
由于JESD204B的ip核手册《pg066》上没有这一部分的时序讲解,因此我参照srio的ip核手册《pg007》上的写时序写了第一版程序。Srio中的写时序如下图所示。
下面1)~3)是客户端需要处理的,4)是ip核内部处理的。
3.2 demo中的写时序情况
- )写地址awaddr:在写地址准备好信号awready==1时有效(awvalid=1),在awready==0时无效;
- )写数据wdata:在写数据准备好信号wready==1时有效(wvalid=1),在wready==0时无效;
- )写响应准备好信号bready:在写地址、写数据有效时变高,在写响应有效指示信号bvalid==1时,变低。
- )写地址准备好信号awready、写数据准备好信号wready:在无写响应时变高,在写地址、写数据有效时变低。
demo中的写时序情况为写数据有效为因,写数据准备好信号为果。具体如下:
4. 读时序
4.1srio中的读序说明
- )写数据时序:在一个时刻先写入写数据wdata,wvalid拉高,等待wready有效后再把写数据有效信号wvalid拉低;
- )写地址时序:在写入数据有效的同时,写入地址awaddr,awvalid拉高,等待awready有效后再把awvalid拉低。
常规的读理解为在读准备好时输入需要读取的地址,给入读取的地址有效后,准备信号就会拉低,去处理内部数据。如下图的srio读时序图:
srio读时序理解为:
- )读地址写入情况:在读地址准备好信号arready为高时输入需要读取的地址araddr,同时arvalid为高即可。arvalid保持一个时钟,在arready为低时也为低;
- )读相应准备好信号:在arready为低时拉高,在读响应信号rvalid拉高后拉低。
4.2demo中的读时序
demo中的读时序如下图所示:
- )读地址准备好信号arready:每隔一个固定的时间段会输出固定的两个时钟高信号,准备接收读地址。经验证并不是看到arvalid拉高后主动拉低的;
- )可接收下一个读地址的条件:虽然一次性会输出两个时钟的arready信号,但是一次却只能接收一个读地址。需要在读响应后rvalid拉高一个时钟后才能再次接收下一个读地址。