linux怎么查看本机内存大小
251
2022-11-26
软件无线电中双缓冲模式PCIE总线的设计与实现
引言
1 PCIE总线方案论证
1.1 PCIE总线实现方式
1.2 双缓冲与单缓冲比较
图1 双缓冲PCIE系统框图
与双缓冲相对应的是单缓冲模式。以写操作为例,驱动程序每次在内存上分配一个缓冲区WR_BUF,该缓冲区的地址信息存储在DMA寄存器DMA_Reg中。当写满缓冲区WR_BUF时,DMA引擎会产生MSI中断,并通过PCIE核通知驱动程序。驱动分配新的缓冲区,并将该缓冲区地址通过PCIE总线写入DMA寄存器DMA_Reg中。中断的传输和DMA寄存器的更新会产生一定延时,这需要较大的TX_FIFO来存取延时期间DSP核产生的数据。
与单缓冲模式相比,双缓冲模式优点归纳如下:
① 更新缓冲区不会引入中断延时,这意味着较小的FIFO即可满足需求,节约了硬件资源。
② 双缓冲模式延长了驱动程序处理中断的时间,也使缓冲区数据的处理更加容易,丢包率大大减小。
③ 数据的传输和内存缓冲区的数据处理可以并行处理,系统的实时性得到保证。
2 软件无线电平台设计
软件无线电基于可编程、可重构的通用硬件平台,通过加载不同的软件实现不同的无线电功能,广泛应用于军用和民用领域。为了能够实现复杂的算法,其平台需要具备高速数据交换和实时信号处理的能力。该设计参考Xilinx ML605开发套件,基于Xilinx Virtex6 LX240T FPGA芯片,通过增加相应的模块搭建通用的软件无线电平台。
图3 软件无线电原理框图
3 双缓冲模式PCIE总线设计
3.1 PCIE驱动设计
图4 PCIE驱动中的数据接收
3.2 PCIE核配置
图5 PCIE功能框图与接口
本文使用Xilinx CORE Generator生成PCIE核,其主要配置参数如表1所列。
表1 PCIE核主要配置参数
3.3 总线主控DMA传输
① 发射引擎。发射引擎产生传输层数据包(TLP)并通过传输接口发送至PCIE核,数据包的数据来自TX_FIFO,头信息来自DMA控制/状态寄存器,也负责驱动对DMA寄存器的读取。
② 接收引擎。接收引擎将来自上位机的数据包解码并转存至RX_FIFO中,也接收来自驱动的配置信息并将寄存器值写入DMA控制/状态寄存器中。
③ DMA控制/状态寄存器。该模块是DMA的主控制器,控制着DMA复位、读写等操作;内存缓冲区的地址信息和TLP包长度等信息也存储在该寄存器中。
④ MSI中断控制器。该模块产生读写中断,然后通过中断接口通知PCIE核,进而通知驱动程序。
⑤ TX/RX_FIFO.通过Xilinx Core Generator将FIFO配置为独立时钟异步模式,实现不同时钟域的数据缓冲和位宽转换。本文PCIE时钟为250 MHz、位宽64位,而DSP核时钟为200 MHz、位宽32位。
⑥ PCIE核。该模块为例化的PCIE集成块,框图和参数详见图5和表1.
⑦ DSP核。该模块为用户设计的算法或者功能模块,例如通过Simulink调用Xilinx库实现某种功能。
图6 DMA结构框图
3.4 双缓冲PCIE协议
以写操作为例,双缓冲PCIE协议如图7所示。初始化时,驱动程序在内存中分配两块缓冲区Buff 1a/2a,然后将Buff 1a的地址信息写入DMA控制/状态寄存器DMA_Reg1(图1)中并开始写操作;DMA引擎将FIFO中的数据以数据包的形式通过PCIE总线发送至缓冲区Buff 1a中,期间驱动程序将Buff 2a的地址信息发送至DMA控制/状态寄存器DMA_Reg2中;当Buff 1a写操作完成时,MSI中断控制器产生MSI中断并通知驱动,此时驱动和DMA控制器同时切换缓冲区,即驱动将缓冲区切换至Buff 2a,DMA控制器将TLP头信息切换至DMA_Reg2,如此继续传输数据。
图7 双缓冲PCIE操作协议(写操作)
将MSI中断与新缓冲区配置间的时间间隔称为中断延时,如图2和图7所示。双缓冲模式的引入消除了中断延时的影响,使SRSE在中断延时期间仍能传输数据,节约了硬件资源,驱动程序也有更多时间来处理缓冲区的数据。
4 PCIE调试与性能
结语
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~