目录

一、适用及备注

二、更新与优化

三、数据采集流程

四、“Receive data buffer”接收数据缓冲区定义

(一)Resource.RcvBuffer”寄存器定义

1.rowsPerFrame,行数:

2.colsPerFrame,列数:

3.帧数:

(二)Receive Object:接收事件到帧内内存的映射

1.Receive Object:(居然没了,可恶!)

3.实际样本数

(三)定义接收架构、获取事件以及DMA传输(改为参考3.2.2版本vantage)

1.Receive Object定义(见四-(二)-1)

2.Event Sequence定义

3.DMA命令生成

五、接收缓冲区大小的系统限制

(一)主机接收缓冲区大小

(二)硬件系统中临时接收缓存区大小(三者关系举例子,后两个空间大小如何计算,待补)

(三)确定内存的实际分配

1.版本3.3.2在脚本中定义,显示内存系统的硬件分配:

2.版本4.2.0新增(不知道3.2.2能不能用,待测,能用再补具体参数)

3.对于使用多帧的接收缓存区定义(没看明白)

4.序列内存空间

(四)子帧DMA特征

(五)重复获取相同的接收数据帧

六、DMA传输率

(一)DMA与硬件通信

(二)影响硬件到主机传输速率的三个因素:

(三)DMA传输时间

1.实际传输时间

2.固定开销时间


一、适用及备注

本文参考vantage"Management of Receive Data and DMA Transfers "手册。四-(三)大部分参考4.2.0版本说明,之后的参考3.2.2版本说明。相关约束不包含仿真模式。对于使用机型还请参考对应手册。

二、更新与优化

新增查询“showHardwareMemoryUsage”,删除“Resource.VDAS.halDebugLevel”,早期版本即使使用子帧DMA,单个接受数据帧大小1不能超过2GB。

三、数据采集流程

master master架构 master stage_音视频

master master架构 master stage_音视频_02

 通过“SetUp...”进行内存分配和DMA传输命令合成相关的设置。

四、“Receive data buffer”接收数据缓冲区定义

(一)Resource.RcvBuffer”寄存器定义

 通过“Resource.RcvBuffer”定义。包括每帧行数(rowsPerFrame)、每帧列数(通道数,colsPerFrame)以及帧数(numFrames)。仿真可以随意定义,但对于硬件采集时:

1.rowsPerFrame,行数:

每个通道采样点数目。接收的数据为int16,每个采样点2比特。行数必须大于等于组成该帧所所有接收事件获取所有样本的总和(没看懂)。值大于该值时,未使用部分不会被DMA写入,值为0。

2.colsPerFrame,列数:

多少个通道接收数据,接受缓冲区所需列数要大于正在使用的接受信道数,至少包括32列(因为vantage接收通道32列一组,每个通道组管理他自己的DMA到主机)。

eg:对于vantage256系统+UTA260-D模式,使用64阵元换能器(例子给的P4-2v),只有64个通道,但是该值还要设置为128,为了能让系统自动开启与设置探头引脚相对应的通道号,就算没全用也得都开启。对与128位里没使用的64列值至0,并不参加重建处理(Recon processing function),但他们会包含在receive buffer的定义中(DMA传输里也包含)。(不使用的通道可以用Receive.Apod()置零)。

eg2:对于vantage64系统+UTA 260-Mux模式,可以64列接收(?)。

对于vantage4.0.0版本,指定值不正确会用实际值覆盖。(有时间可以拿这个测一下)

3.帧数:

可以定义任意帧数。典型采集是在各帧之间循环。冻结或退出程序时,当前值可以进行查看或处理。硬件系统中,帧数大于1时必须是偶数(硬件临时缓冲区使用的是“ping-pong”机制,“ping”帧传输“pong”帧采集,“pong”帧传输“ping”帧采集,防止传输帧和采集帧发生冲突)。

要注意防止新采集在前一个传输完成前就要向该帧写入,或者前一帧还没处理完新帧就开始进行下一帧传输。

(二)Receive Object:接收事件到帧内内存的映射

采集事件可以任意组合形成DMA传输的接收数据帧。根据Receive Object给出的属性进行相应采集操作,然后按照“Receive.acqNum”值顺序在缓冲区中串联发出。

1.Receive Object:(居然没了,可恶!)

3.实际样本数

由“startDepth”和“endDepth”以及系统计算的“samplesPerWave”指定,接收事件样本总数:

master master架构 master stage_音视频_03

最后得到的样本总数是128的倍数(整数块,每块128个采样)。这种量化是生成管理DMA的原因,固定的块大小是DMA传输速率的最大吞吐量。

eg:起始深2,结束深12,波采样率4可以得到样本总数80,所以系统会将结束深度改为18,得到128个采样点。

(三)定义接收架构、获取事件以及DMA传输(改为参考3.2.2版本vantage)

流程:

master master架构 master stage_master master架构_04

 0.Rcv

1.Receive Object定义(见四-(二)-1)

2.Event Sequence定义

帧到帧采集结构限制:

  1. 不同帧和缓冲器的单个采集事件不能交织,给定帧采集完成后才能开始下一帧;‘’
  2. 采集结束后,必须在下一次采集的任何采集事件开始前使用“transferToHost”命令启动该帧DMA传输。可以放置在最后一次采集事件中,或最后一次采集后的单独事件中;
  3. 如果接收的信号跨帧了,就得依次获得各帧信息,防止信息被覆盖;
  4. 使用“transferToHost”命令时,仅包括该帧执行中最小acqNum至最大acqNum中的范围。eg:acqNum1~5,采集顺序是3,5,2,然后使用“transferToHost”命令,实际DMA传输第2、3、4、5acqNum的信息。acqNum1的信息不被写入,用0填充。acqNum4会输出相应位置信息,但由于该位置未进行数据采集,该处的至是未初始化内存或无关采集事件的“垃圾数据”。
  5. 脚本编写好后,可以使用“EventAnalysisTool”查看脚本生成的实际事件序列,以确保没有明显的索引错误,然后使用幻像或其他测试对象测试脚本,以确保实际接收数据采集和处理正常运行。

3.DMA命令生成

用户需要在适当的点插入“transferToHost”命令,vantage系统就会自动创建DMA指令。传输时不能把多帧或多缓存器数据组合到一个DMA里传输,DMA传输有以下限制:

  1. 事件序列中每次DMA传输都要创建一个“transferToHost”命令,如果脚本中存在两个SeqContral索引值一样的“transferToHost”命令,则采用最后出现的DMA命令会覆盖前一个DMA命令。
  2. 系统检查事件序列中相关transferToHost命令前所有采集事件。如果事件中包含多个缓冲区及帧号,DMA传输最后一个缓冲区里的帧,之前的不会被传输。
  3. 可以在“transferToHost”命令中添加条件参数,使接收数据采集与DMA同步。在下一个DMA操作前两个停顿指令,一个是“wait for processing”,另一个DMA运行的有条件停止,从DMA进行到结束。(防止旧DMA还没传完新DMA就进来了)。“transferToHost”命令很少和“waitForProcess”一起用,硬件以自己的速率异步运行,而软件可以处理最近接受到的帧(Recon.rcvBufFrame = -1),以处理允许的速度处理帧。这种方法可以实现高帧率采集、处理与显示。
  4. 模拟情况下,直接写入接收缓冲区,“Process”和“External”直接调用缓冲区数据(存在模拟可以运行,但硬件采集不能运行的情况)。
  5. “Receive Object”和“Event sequence”必须正确定义。

五、接收缓冲区大小的系统限制

(一)主机接收缓冲区大小

根据主机分配给Matlab程序的内存大小。在处理时缓冲区可能还会放一些“Process”过程中的数据缓存(eg:ImageBuffer和InterBuffer等)。如果用户离线处理采集的rf数据可能会获得更大的接收数据。

当所需内存超过物理可用数据量时,可能会将一部分数据移除存储到磁盘驱动器的虚拟内存中(这个搁哪?)。这种情况可能不会警告报错,但是能看到采集处理数据的数目降低了。此时可能出现计时错误导致Vantage和MATLAB崩溃。

使用经验:接收数据缓存区总大小限制在主机可用内存的1/4,如果超过此值,可以考虑提高内存,或者分块采集数据。

(二)硬件系统中临时接收缓存区大小(三者关系举例子,后两个空间大小如何计算,待补)

Vantage系统的内存空间是32个通道一个通道组,每个通道组2Gb,平均一个通道64Mb。这个空间由三部分内容共享:

  1. 接收RF data的临时存储:为每个用户定义脚本分配独立缓冲区。每个缓冲区只包含1~2帧,虽然主机中定义超过了2帧(?)。
  2. 描述符内存空间:存储接收事件的属性。
  3. “Scatter-gather”(SGL表):存储脚本中定义的每个独立DMA传输的源和目标地址(值会在脚本初始化时预先计算)。

要求三个段的内容不得超过64Mb。对于少量采集事件的脚本可以设置非常大的rf data存储区,而对于采集和接收事件数多的脚本,大部分区域都被用来放描述符,rf data存储区相对较小。

(三)确定内存的实际分配

1.版本3.3.2在脚本中定义,显示内存系统的硬件分配:

Resource.VDAS.halDebugLevel = 1;

以下参数会被调出:

  • numberOfAcquisitionBlocks:块的总内存空间,每块8192bytes。
  • sizeDescriptorsTotal:描述符所用空间
  • sizeSglsTotal:SGL所用空间
  • sizeSequenceProgrammingTotal:可用总存储量
  • sizeSeuqenceProgrammingActuallyUsed:本脚本实际使用总存储量

考虑到总存储空间为2Gb,使用空间总量应等于2Gb,计算如下:

master master架构 master stage_matlab_05

未用的区域会划给描述符。对于单个通道使用量,为总量除以32。接收RF data数据类应为int 16,接收样本数为缓冲区大小的一半。

2.版本4.2.0新增(不知道3.2.2能不能用,待测,能用再补具体参数)

新增一个函数,当运行并退出VSX,且结构体信息仍保存在工作区中时,可以调用以下函数获得硬件内存使用情况:

showHardwareMemoryUsage

3.对于使用多帧的接收缓存区定义(没看明白)

通道组内只有两帧,比主机上用的内存空间小,为了最小化通道组接收数据缓冲区大小,有两个方法可以把帧数变为一帧:

  • 定义每次接收1帧
  • 每个帧使用子帧DMA转换方式(本章(四)),不管脚本中用几帧,通道组内存只用一帧。

4.序列内存空间

  • sizeSequencerProgrammingActuallyUsed:已使用序列内存空间
  • sizeSequencerProgrammingTotal:可用序列内存空间总量

(四)子帧DMA特征

目前存在小于2Gb大于64Mb的DMA传输限制。“子帧DMA”允许定义任意大的接收缓冲区帧和时间序列,此时不一定使用单个DMA传输整个帧。可以通过多个“transferToHost”命令,使DMA传输上次未获得的新数据。在所有采集的最后要有一个“final transferToHost”用来通知DMA传输完成。子帧DMA不可见,在帧的最后一个子帧DMA完成后的一个时间点将整个给处理。

例程:SetUpL7_4_128RyLnsSubFrmDma.m

约束:(用到再说P14-15)

特征:

  • 事件序列下一个“transferToHost”命令必须与当前“transferToHost”命令缓冲区和帧编号相同
  • 包含下一帧“transferToHost”命令的Receive Object必须和包含当前帧“transferToHost”命令的Receive Object 不同。

(五)重复获取相同的接收数据帧

建议尽可能避免对同一帧数据进行重复采集。如果一定需要,对重复采集的缓冲区同一帧,必须为帧的每次重复采集重复使用相同的接收结构集,并且帧中包含的采集数量也必须相同。要区分DMA采集和子帧DMA采集。

六、DMA传输率

(一)DMA与硬件通信

采样到硬件中:62.5MHz。硬件中DMA接收数据和采集功能并行,DMA通信:

All receive data is transferred from the hardware system to the host computer through DMA transfers over the PCI-express links that connect them. The DMA transfers are managed by DMA control logic built into the system hardware, so they have negligible impact on the processing throughput of the host computer. Similarly, the DMA controllers in the hardware use dedicated logic that runs in parallel with the receive data acquisition functions so the only impact on the hardware acquisition sequence is a single command executed at the point in the sequence where a DMA is to be launched. Once that command has been issued the hardware system is free to continue with acquisition events for the next frame (or subframe). The only other interaction with the DMA controller is at the point where the hardware sequencer is to launch the next DMA; if at that point the previous DMA is still not complete, the hardware event sequence will pause and wait for the previous DMA to complete and then launch the new DMA and resume. The system can only execute one DMA command at a time, and there is no mechanism for queuing up pending DMA commands.

(二)影响硬件到主机传输速率的三个因素:

  1. 32个通道的通道组有一个独立的PCIe连接到背板的多端口PCIe背板上。每个信道组有四个线路,速度为PCIe Gen 2 speed,最大数据传输速率1.2Gb每秒。
  2. 硬件连接到主机的电缆是8线路连接,速度是PCIe Gen 3 speed。从PCIe交换机连接到主机适配卡上的PCIe网桥上。最大传输速率6.6kMhz每秒。
  3. 主机主板提供到安装Verasonics主机适配器卡的扩展插槽的PCIe链路。配置正确会达到6.6Gb每秒。

综上,少于6个信道组活跃,传输速率为1.2Gb*信道组数;大于等于6个信道组活跃,会限制到6.6Gb每秒。128通道:所有通道4.9Gb每秒,每个通道19MSmaples每秒;256通道:所有通道6.6Gb每秒,每个通道13MSmaples每秒;

(三)DMA传输时间

包括两部分:实际传输时间+几毫秒的固定开销时间

1.实际传输时间

当数据少时,可以把多帧组合在一起,尽可能每次传输在64Mb左右

2.固定开销时间

一方面,开销时间与通道组数量有关,大约0.5ms每个通道组。DMA在几Mb时,开销时间更影响传输时间。另一方面,开销时间也与DMA速率抖动有关,考虑操作系统优先级或中断,有的时候可能会有10~20ms的额外开销时间,计算时应提供一定余量。