官方的AD9361接口做得很完善,我觉得应该花时间研究透彻。正好这段时间难得的安静,我就专门做做试验研究学习一下。
AXI_AD9361这个模块咱们之前的博客分析了几次,今天试验ADC的输出,看看ENBALE,VALID和数据这三者之间关系。
其实查看代码可以看到ENABLE是处理器通过AXI LITE接口设置,而VALID是用于数据通讯进行数据指示的。为什么要有这两个信号呢,我的猜测(后续查代码和试验被证明正确)就是ENABLE和VALID分别从宏观和微观从面确定一个数据是否有效。这两个应该是相AND的结果来指示一个数据真正地VALID。
刚才已经做了代码没有记录下来,这里主要看看我加入ILA进行查看的结果。
我们知道从ADC发送给FPGA的数据首先经过ADC_FIFO进行时钟域的转换后,此时还是4通道16位数据(这16位只有12位有效),通过ADC_PACK组合成一路64路数据,通过FIFO接口交付给ADC_DMA,之后由ADC_DMA传到DDR3存储器空间,PS就可以读出来了。
这里我们在ADC_FIFO到ADC_PACK之间接入一个逻辑分析仪,查看思路ENABLE,VALID,DATA。下图是进行1R1T时,分析仪抓到的波形:
为了让大家看到全部,我缩小了数据部分的模拟显示:
这里说明一下:倒数第三,四根是模拟显示的,是因为ILA设置的原因和数据表示的原因看上去不是完美的正弦波,这个稍晚我尝试设置一下(刚才我用同样的这次采集设置软件捣鼓出了一次是完美的正弦波,再也没有搞出来,但是数据肯定是完美的),这里大家自行脑补一下。
记住这个也是1R1T截到ILA波形图,是一收一发。我们总结如下:
1,4路数据分别是两个通道的I和Q,这里只设置了一个通道,因此另外一个通道的I和Q数据为0。
2,我们看到VALID都是1,起作用的是ENBALE,因此真正的ATCIVE_VALID应该是VALID & ENABLE.
3,数据是没有间断的,这是因为用的时钟是基带的时钟,每个周期都有数据。
另外我通过切换接收通道,发现还是数据通道0,1有数据,ENABLE0,1为高。
之后我继续试验一下双路接收的的情况:也就是2R2T。
我们看到2R2T果然是所有的通道都ENABLE了。
同时加入的还有另外一个ILA,我在接下来的一片BLOG里面说说。