微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > 基于DMA的大批量数据快速传输模块设计

基于DMA的大批量数据快速传输模块设计

时间:05-14 来源:互联网 点击:

Builder外设库后,就可以在SOPCBuilder中调用此外设,图3表示了SOPC Builder中该外设与DMA的连接,图中fifo_control_0即为DMA读控制模块,可以看出,这个外设包含了两个Avalon—MM端口,其中一个连接至DMA控制器模块dma_0,而且SOPC Builder为这个外设分配了基地址和中断优先级。

4 测试验证
DMA读控制模块测试时,FPGA内部产生数据源并通过外设管道接口把数据写入FIFO,外设中断时,DMA读取外设中的数据。测试时使用QuartusⅡ自带的SignalTapⅡ嵌入式逻辑分析仪进行测试,观察相应信号的波形。本测试的触发条件为signaltap_read上升沿触发,FIFO深度为1 024,FIFO数据宽度为16位,数据源为2~513共512个计数值,在Nios II的软件中读取600个数据,测试结果如图4所示。

图4对应3幅图像,图4(a)表示DMA读取外设的测试数据的全局视图,后面两幅为局部放大结果,其中图4(b)是测试数据的开始段,图4(c)是测试数据的结束段。如图4(b)所示,在第一个时钟周期,DMA的读信号有效,在之后的第二个时钟周期,FIFO的数据总线出现数据2,之后是3,4,…,从图4(c)可以看出,最后一个数据是513,且DMA读取外设512个数据,只花费了约776个时钟周期,这充分显示了DMA高速的数据传输能力。
对于调试模式下Nios II IDE的输出结果,如图5所示。由于测试数据太长,这里只给出测试数据的首部及尾部。图5(a)为测试数据的首部,使用printf()函数输出,第一个数据为2,接着是2,3,…,从图5(b)可看出最后一个有效数据是513,从512起的数据为0,这是数组的初始值,这与图4相对应。

DMA写控制模块测试时,置FIFO数据宽度为16,NiosⅡ控制端口数据总线宽度为16,FIFO深度为2 048,在NiosⅡ软件中设置一个长度为2 048的数组,数组数据宽度为16位,初始化时把数据赋值为1~2 048的计数值,然后发起DMA写传输,把数据写入到DMA写控制模块中,在FPGA再用硬件语言读此外设中FIFO数据并在SignalTapⅡ中显示,其测试结果如图6所示。

图6中,fifo_rd表示FPGA中硬件逻辑读取DMA写控制模块的读信号,fifo_readdata是外设中FIFO的数据总线信号,sigtap_test信号连接至外设中FIFO满、FIFO空以及waitrequest信号(LSB),图6(a)表示了外部逻辑读取外设中FIFO的数据起始段,在读信号有效之前,sigtap_ test[2]信号是高电平,表示FIFO满,sigtap_test[0]为高,表示外设此刻不能响应DMA写入的数据,然后FPGA外部逻辑在检测到FIFO满后开始读取数据,在下一个时钟周期,FIFO数据总线上出现有效数据。图6(b)是读取FIFO时数据的结束段,最后一个数据为2 048,读取后,sig tap_test[1]为高电平,表示数据读空,这与NiesⅡ中软件写入DMA从而写入DMA写控制模块的数据是一致的,由此验证了模块设计的正确性。

5 结束语
设计方案稳定可靠、传输速度高,具有一定的通用性,能满足NiosⅡ与外设之间的大批量数据传输,具有广泛的应用前景,同时,使用了FIFO作为缓存,进一步提高了数据吞吐量,具有较强的实用价值。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top