axidmatest驱动程序的数据验证方式

1.概述

        axidmatest驱动程序是Petalinux自带的AXIDMA驱动验证程序,该驱动在初始化的过程中,通过dmaengine机制进行自发自收来验证FPGA设计的成功。本文讨论数据验证的方式。内容基于6.1.5内核。

        总的来讲,数据的校验并非是通过校验码等机制实现验证,主要是通过pattern对比进行的。比如一块数据,会被分成三部分。每部分会被填入不同的pattern,传输后对传输后的数据进行pattern的对比,以此来判定axidma传输的成功与否。

2.填入pattern

        上一章节谈到数据发送前后会被分成三部分。这三部分会被填入不同的pattern。中间这部分的起始地址和大小是随机动态生成的。

        上图中的代码里面,dmatest_random函数生成一个随机数,计算后的len变量就是传输数据的第二部分的大小。src_off是传输前的buffer第二部分起始地址。dst_off是传输目的buffer第二部分起始地址。

        source数据的pattern填入的逻辑在dmatest_init_srcs函数中。

        外层的for循环,处理的是scatterlist中的每个buffer。该驱动中sg包含13块buffer,每个16KB大小。内层三个for循环分别填入第一块,第二块,第三块数据的pattern。

        destination数据patten填入在dmatest_init_dsts中。

逻辑与dmatest_init_srcs相似,不过多描述。

​​​​​​​3.patten验证

        dma传输后分别对buffer的三个部分进行校验:

        对数据的验证在dmatest_verify中。

        外层for循环处理sg中的每块buffer。

        内层循环对一块buffer的pattern进行验证,如果pattern不符合,对error_count进行累加,这个计数程序执行的最后会打印出来。

​​​​​​​4.总结

        数据验证是通过pattern进行的。比如一块数据,被分成三部分。比如下图中的一块数据,被分成A,B,C三个部分。

每个部分的每个字节被填入不同的pattern。每次测试,中间的B部分的其实地址和大小是随机生成的。DMA传输之后,source和destination两个buffer会分别通过pattern进行对比,如果pattern对不上,会被进行计数统计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值