教你设计pci总线的高速数据采集卡(基于pci9054)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

教你设计PCI总线的高速数据采集卡(基于PCI9054)

2007-03-13 21:02

眼下有不少场合需要用到PCI总线的数据采集卡,下面我就来谈一下设计PCI数采卡的原理及要点。

首先我要以我的实际经验,纠正存在于很多人心里的几个误区:

1.设计PCI采集卡要通读PCI协议。

相信有很多初学者都在这个地方被吓住了,几百页的英文要通读并理解谈何容易!其实PCI协议处理的这部分功能已经被PCI接口芯片完成了,如PLX公司的9054、9056和9052等等,它封装了PCI协议的细节,我们只需要控制这颗接口芯片local端的几个控制线就可以完成PCI总线的数据传输。PCI协议也有它的用处,我们只需要在某些需要注意的地方查阅一下相关章节即可,比如PRSNT1#和PRSNT2#引脚至少要有一个下拉,才能识别到卡,这就是PCI协议中的规定。

2. PCI卡布线很复杂,一不小心就可能不成功。

其实对于32位33MHz的PCI总线来说,布线相对比较简单,只要稍加注意就不会出问题。比如:PCI总线的时钟线要做成2500(+/-100)mil,这个是要注意的一点,一般PCI卡上的蛇行弯曲走线就是这条线,因为走直线距离一般都达不到此长度。其他要求,比如地址和数据线要在1500mil以内,其实你超过一些也没什么问题,不要超太多就好了。

3. PCI卡的驱动程序编写很难。

其实无论是软件还是硬件设计,都有一些相对成熟的资料可以参考。对驱动程序来说也是这样,对实际项目的开发没有几个是从头到尾自己在编代码,都可以在网上找到一些成熟的代码,然后自己修改一下即可,况且PCI卡的驱动程序又相对比较成熟,可参考的资料也较多。所以你要从网上找代码,向PCI接口芯片的供应商要代码,等收集到足够多的代码,再配以适当的教材(比如对于windows2000/XP系统下的WDM驱动程序,可以参考武安河老师的教材就足够),就可以进行你自己的驱动设计了。

下面我再针对具体应用谈谈PCI采集卡的设计:

一般数采卡的情况是将A/D转换后的数据通过PCI总线上传到PCI机,然后利用

上层的软件进行分析处理。

这里通常会将一片FPGA与PCI接口芯片相连,对于很多应用来说,PCI总线端向主机上传的速度远远大于A/D通过FPGA处理后的数据向9054传送的速度。比如如果采用PCI9054的DMA方式,向主机上传的带宽很轻松可以达到100MB/s。这是因为比较常用的A/D转换器的位数为8bit,10bit,12bit等,而PCI总线的宽度为32bit。另一方面PCI总线的频率为33MHz,一般应用的A/D也一般远小于此值,这样算下来,PCI总线的带宽自然要富余很多,设计起来还是比较轻松的。

对于8位的A/D来说,如果要完全利用PCI总线的32位宽度的话,需要在FPGA 内做数据宽度转换的模块。当然对带宽要求比较低的场合,也可以直接把A/D

的八位数据线直接连到PCI的32位数据线的低8位,但这样做是不值得推荐的,对PCI资源也是极大的浪费,况且该宽度转换模块并不复杂,只有几个锁存器就可以解决,也可以用FIFO来实现。

另外,为了将数据通过PCI总线上传,FPGA内要做PCI接口芯片的 local端的控制逻辑模块。所谓local端,就是指PCI9054开放给设计者的端口,主要包括这几条控制信号线:ADS#,blast#, lwr, lhold, lholda, ready, reset#。相对于local端的另一端是PCI总线端,也就是连到PCI卡金手指的那些信号,这是标准的PCI总线。也就是说,我们只需要通过控制local端的区区几个控制信号,就可以达到控制复杂的PCI总线的目的,而这个从local端到PCI端的映射工作,就是由9054来完成的。

当然,要使9054工作起来,要编写它的驱动程序,无非就是打开设备,初始化设备,设备读写,中断服务程序,关闭设备,这几步,可以先找些现成的驱动程序来看,把这几步的代码实现理清楚,然后把每一步搞懂就可以了。其实主要操作也就是读写9054的各个寄存器,这些可以参照芯片的datasheet来读,上面有寄存器的详细描述。我在这里主要说明一种数采卡的设计原理,以后有时间会继续探讨驱动程序编写的一些问题。

相关文档
最新文档