77范文网 - 专业文章范例文档资料分享平台

基于FPGA的PCIE接口设计(6)

来源:网络收集 时间:2019-03-09 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

基于FPGA的PCIE接口设计

产生中断的时序图

清除中断的时序图

22

基于FPGA的PCIE接口设计

第五章 基于中断方式的DMA传输设计

5.1 什么是DMA

直接存储器访问(Direct Memory Access,DMA)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统(电脑外设),可以独立地直接读写系统存储器,而不需绕道中央处理器(CPU)。在同等程度的处理器负担下,DMA是一种快速的数据传送方式。很多硬件的系统会使用DMA,包含硬盘控制器、绘图显卡、网卡和声卡。DMA 是所有现代计算机的重要特色,他允许不同速度的硬件设备来沟通,而不需要依于中央处理器的大量中断 负载。否则,中央处理器 需要从 来源 把每一片段的数据复制到 暂存器,然后把他们再次写回到新的地方。在这个时间中,中央处理器 对于其他的工作来说就无法使用。DMA 传输重要地将一个存储器区从一个设备复制到另外一个。当中央处理器初始化这个传输动作,传输动作本身是由 DMA 控制器 来实行和完成。典型的例子就是移动一个外部存储器的区块到芯片内部更快的存储器去。像是这样的操作并没有让处理器工作拖延,反而可以被重新调度去处理其他的工作。DMA 传输对于高性能 嵌入式系统 算法和网络是很重要的。举个例子,个人计算机的ISA DMA 控制器拥有 8个 DMA 通道,其中的 7 个通道是可以让计算机的中央处理器所利用。每一个 DMA 通道有一个 16位 地址暂存器和一个 16 比特 计数暂存器。要初始化数据传输时,设备驱动程序一起设置 DMA 通道的地址和计数暂存器,以及数据传输的方向,读取或写入。然后指示 DMA 硬件开始这个传输动作。当传输退出的时候,设备就会以中断的方式通知中央处理器。\分散-收集\(Scatter-gather)DMA 允许在一次单一的 DMA 处理中传输数据到多个存储器区域。相当于把多个简单的 DMA 要求串在一起。再一求;DACK 意为 DMA 确认。这些符号一般在有 DMA 功能的计算机系统硬件概要上可以看到。他们表示了介于 中央处理器 和 DMA 控制器之间的电子信号传输线路。

DMA 会导致缓存一致性问题。想像中央处理器带有缓存与外部存储器的情况,DMA 的运作则是去访问外部存储器,当中央处理器访问外部存储器某个地址的时候,暂时先将新的值写入缓存中,但并未将外部存储器的数据更新,若在缓存中的数据尚 未更新到外部存储器前发生了 DMA,则 DMA 过程将会读取到未更新的数据。相同的,如果外部设备写入新的值到外部存储器内,则中央处理器若访问缓存时则会访问到尚未更新的数据。这些问题可以用两种方法来解决:

1)高速缓存同调系统(Cache-coherent system):以硬件方法来完成,当外部设备写入存储器时以一个信号来通知缓存控制器某存储器地址的值已经过期或是应该重新更新数据。

2)非同调系统(Non-coherent system):以软件方法来完成,操作系统必须确认缓存读取时,DMA 程序已经开始或是禁止 DMA 发生。第二种的方法会造成 DMA 的系统负担。

5.2软件界面设计与关键部分代码说明

软件基于Visual C++的MFC编程语言设计,MFC语言主要设计上位机软件的总体框架,上位机的驱动程序使用windriver提供的API函数即可,该上位机程序主要实现的功能是对PCIE设备的关闭与打开,存储文件位置的选取以及DMA传输中对PCIE卡的控制功能。

设计的软件界面如图1所示

23

基于FPGA的PCIE接口设计

图1 上位机软件总体框架

上位机包括对PCIE卡控制的若干个按钮,采集状态的显示以及不同状态的文本显示。 主要的功能按钮包括“打开设备”按钮,“开始采集”按钮和“停止采集”按钮。其中最主要的功能是开始采集的按钮,以下将对该段代码作解释,其他按钮的代码部分详情见附件。

采集功能的关键部分代码如下 bsize=1024*1024;

file.Open(Pointer->filepath,CFile::modeCreate|CFile::modeReadWrite|CFile::typeBinary,NULL); Pointer->mydriver.CompleteFlag=0; Pointer->StopFlag=0;

Pointer->timer=CTime::GetCurrentTime();

s1.Format(\开始传输\\r\\n\,

Pointer->timer.GetHour(),Pointer->timer.GetMinute(),Pointer->timer.GetSecond());

Pointer->log=s1+Pointer->log;

Pointer->SetDlgItemText(IDC_EDIT2,Pointer->log); t=clock(); while(TRUE) {

Pointer->mydriver.AddWrite32(0,REG_DMACST, 2); while (TRUE)

24

基于FPGA的PCIE接口设计

{

Pointer->mydriver.AddRead32(0,REG_RXDATA_NUM_VAL, &refe);// 查询数据状态 if ((refe& 0xfffffff) >= 0x100000) // 有1M数据,则启动DMA

{

if (refe==0xffffffff)

break;

Pointer->mydriver.AddWrite32(0,REG_DMACST, 1); WDC_DMASyncCpu(Pointer->mydriver.pDma); break;

}

elseif (Pointer->StopFlag)

break; continue; else } Sleep(20); while (TRUE) {

Pointer->mydriver.AddRead32(0,REG_DMACST,®); if ((reg& 0x2)!=0) {

Pointer->mydriver.AddWrite32(0,REG_DMACST, 2); break;

}

if (Pointer->StopFlag) break;

}

if (Pointer->StopFlag)

break;

WDC_DMASyncIo(Pointer->mydriver.pDma); // 启动DMA传输

file.Write(Pointer->mybuf,bsize);// 将内存中的文件写入到计算机硬盘中

本部分代码以1M的DMA大小作为传输长度,程序中的bsize即为DMA的大小,AddRead32为windriver提供的API接口函数,其作用为以32位字的方式读取BAR中的内容,约定读取的BAR0的偏移地址为FPGA中设计好的BAR的偏移地址,其代表FPGA中的缓存的DMA长度,一旦查询到DMA的长度大于1M,即开始DMA的传输。在DMA的传输过程中,使用到的AddWrite32也是windriver提供的API接口函数,其作用和AddRead32相反,为向BAR地址中以32位字的形式写入相应的内容,当查询到DMA长度大于1M可以进行传输时,使用AddRead32向BAR的相应的约定好的地址中写入1即

25

基于FPGA的PCIE接口设计

开始了DMA的传输。当点击了“停止采集”的按钮时,StopFlag会置1,同时循环也会break,从而停止了DMA的传输。设计的上位机程序只需改动bsize的大小和查询时的大小即可以实现不同DMA长度的PCIE传输方式,方便灵活。程序的完整代码详见附件。

5.3软件使用与系统性能测试

5.3.1 软件使用

对PCIE卡下载好程序重启电脑后,打开该软件,首先点击“打开设备”按钮,此时如果设备正常其他的灰色按钮会变为实色按钮代表可以进行操作了,点击“路径”按钮选择文件存放的位置,然后点击“复位”与“clear”按钮对PCIE板进行FIFO和DDR的清空,然后点击“开始采集”按钮后,采集状态会显示相应的速度和采集大小。同时选测存放文件的位置也会出现相应的文件。 5.3.2系统性能测试

系统性能的测试主要包括两个方面,一是DMA传输的稳定性,即保证DMA在传输时不会发生丢数和错数的情况,测试方法为:在FPGA程序里产生线性数,通过PCIE上传到计算机上,利用matlab读取数据看是否是线性数。二是在保证传输正确的情况下系统传输速度的测试,测试系统在不同DMA长度下的传输速度。测试方法为:改变不同的DMA长度,测试其传输速度。

以下为测试时的软件截图和matlab截图。

由以上的截图可以看出,以8M的DMA传输的速度为43MB/S,采集状态中的采集大小为下图为使用UltraEdit打开111.dat文件,可以看出,其存储的数据确实为线性数。因

152MB,实际文件大小也为152MB,采集状态显示正确。

为数据较大,为保证测试的严谨性,编写matlab程序对文件是否是线性数进行分析。Matlab的分析结果如下图所示。

26

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于FPGA的PCIE接口设计(6)在线全文阅读。

基于FPGA的PCIE接口设计(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/501526.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: