CamLink 相机是指带有 Camera Link 接口的相机。Camera Link 是由数家工业摄影机及影像卡大厂共同制订出来知足各种视频传输哀求的标准接口。这个标准不仅可以知足各种高速视频传输的哀求,规范了数字摄像机和图像采集卡之间的接口,而且使视频设备供应商在设备开拓和掩护上的韶光和本钱大大减少。Camera Link 供应了超高的图像传送速率,并且由于它的高性能、低本钱以及其连接的便利性,迅速得到大多摄像头及图像采集卡生产商的支持。
在一些高端领域,尤其是机器视觉领域,对打算机的数据传输和处理能力提出了严重的磨练,当前图像采集卡的发展逐步向高速稳定传输和高速处理方向发展。PCI Express 采取了目前业内盛行的点对点串行连接办法,比起 PCI 以及更早期的打算机总线的共享并行架构,每个设备都有自己的专用连接,不须要向全体总线要求带宽,而且可以把数据传输率提高到一个很高的频率,达到 PCI 所不能供应的高带宽。PCI-Express 规格从 1 条通道连接到 32 条通道连接,有非常强的伸缩性,以知足不同系统设备对数据传输带宽不同需求。例如,PCIExpress X1 规格支持双向数据传输,每向数据传输带宽 250 MB/s,而 33 位 33 MHz 的 PCI 总线传输带宽仅为 133 MB/s。PCI Express X16 模式每向数据传输带宽可高达 4 GB/s,双向数据传输带宽有 8 GB/s 之多。以是对付高帧频的 CamLink 接口相机来说,传统的总线(例如 PCI 总线接口)已经不能知足实时图像传输的哀求。
本系统利用 PLX 公司的 PEX8311 作为 PCI Express X1 接口芯片,系统中采取 FPGA芯片实现对全体系统的掌握,利用 FPGA 内部供应的 FIFO IP 核和外接的两片独立的 SDRAM 实现了高速图像数据的缓存处理。

1 、系统构成及事理
基于 PEX8311 的 CamLink 图像采集系统的硬件构造分为 4 个模块:CamLink 接口模块、FPGA 掌握模块、SDRAM 存储模块、PCI-Express 接口模块。图 1 为系统的事理框图:
系统的事情事理:系统上电后,上位机软件通过驱动程序掌握 FPGA 对 CamLink 相机进行内部参数配置。配置完成后,CamLink 相机输出帧频旗子暗记、行频旗子暗记、像索时钟旗子暗记和视频旗子暗记。由于 CamLink 接口输出的是差分旗子暗记,以是通过 DS90CR288A 芯片将差分转换成单端旗子暗记,输入给 FPGA。在 FPGA 内部,通过 FIFO 对数据进行缓冲,在同步和时钟旗子暗记的掌握下,FIFO 输出的数据存放到 SDRAM 中。由于在同一时候只能对 SDRAM 进行读或写操作,所以为了防止数据丢失,FPGA 外接两片 SDRAM,在奇帧的时候,向 SDRAM1 写一帧图像,而从 SDRAM2 读已保存的偶帧图像,完成图像传输的乒乓操作。利用 PEX8311 芯片完成 PCIE 接口,PEX8311 由 FPGA 的逻辑程序对其掌握。在上位机编写基于 PCIE 总线的驱动程序,将图像从 SDRAM 利用 DMA 办法读到打算机的内存中,上位机软件实现图像的显示和处理。
2、 PCI-Express 接口模块
PCI-Express 的接口实现方法很多,在本设计中利用 PLX 公司的 PEX8311 芯片通过桥接办法实现。PEX8311 作为一种桥接芯片,在 PCI Expr-ess 总线和 Local 总线之间通报信息,它可以作为 2 个总线的主控设备去掌握总线,也可以作为两个总线的目标设备去相应总线。芯片通过内部的掌握逻辑模块、内部总线状态机和局部总线状态机模块来共同掌握芯片的数据传输。PEX8311 的掌握逻辑模块包含各种寄存器组,这些寄存器组用来掌握数据的传输,记录传输的状态。
PEX8311 供应两个串行 E2PROM 接口,在系统上电后读取配置信息。SPI 串行 E2PROM 是 PCI—Express 的配置 E2PROM。它紧张用来掌握 PCI—Express 的性能。
PEX8311 供应完备的 PCI—Express 从设备支持,PCI-Express 接口部分的旗子暗记线可以直接与 PCI—Express 连接器(俗称金手指)连接。个中,REFCLK±是一组差分时钟,它由系统主板供应。2 个参考时钟都哀求保持在正常事情频率 100MHz 的±300ppm 之内。PRSNT1/PRSNT2 旗子暗记线用于检讨附加卡是否插入连接器。这次设计中将 PRSNT1 和 PRSNT2 相连,这样当接口板插入到 PCI—Express 连接器时就能进行存在检测。PCI-Express 接口部分事理图,如图 2 所示。
3 、系统软件设计
3.1 FPGA 逻辑程序
利用 Verilog 编写 FPGA 逻辑掌握程序,共有 5 个底层模块和 1 个顶层模块。每个模块卖力不同的功能。顶层模块为 PCIE_CAMLINK 模块,它通过调用其他模块的功能来实现全体系统的功能;CAMLINK 模块用来掌握 Camera Link 接口的读写;DoubleSdcon 模块用来掌握 SDRAM 芯片的使能和读写,实现图像的乒乓操作;FIFO 模块用来缓冲数据和匹配各芯片的事情速率;C_16450 模块进行串行到并行的转换,完成对 CamLink 相机的掌握;PEX8311-LOCAL 模块用来掌握 PCI—Express 接口部分的读写,也便是对 PEX8311 芯片进行掌握,对 PEX8311 的掌握是实现 PCI—Exp-ress 总线的关键。
设计中是通过编写状态机(FSM,Finite State Machine)来对 PEX8311 的读写进行掌握的。图 3 为 PEX8311 的单周期读写的 Verilog HDL 措辞时序掌握状态机设计。状态 0 为空闲状态,如本地总线要求旗子暗记 LHOLD 被置为 1,则转到状态 1,否则勾留在状态 0。状态 1 为总线保持状态,在此状态下应将本地总线相应旗子暗记 LHOLDA 置为 1。如 ADS 旗子暗记为 0 且 LW/R 为 1 转到状态 2;如 ADS 旗子暗记为 0 且 LW/R 和 BLAST 都为 1 转到状态 3,为单周期读状态。状态 2 为单周期写状态,在此状态下要置 READY 旗子暗记 0,以表示写数据有效,在 BLAST 为 0 时转到状态 3。状态 3 为读写完成操作状态,当 LHOLD 被置为 0 时,表明 PEX8311 不再要求本地总线,转到状态 0,当 BLAST 为 0 且 LHOLD 为 1 时,表明 PEX8311 还要进行读写数据,则转到状态 1 连续。
3.2 驱动程序
PCI—E 总线与 PCI 总线在软件层是完备兼容的,因此 PCI—E 总线驱动程序的开拓过程与 PCI 设备驱动程序的开拓过程是一样的。本设计利用 VC++6.0 和开拓工具包 Driver Studio(DS)进行驱动程序的开拓。DS 可以集成到 Visual C++环境中,针对特定的运用天生相应的驱动程序框架,在编程中采取面向工具的编程方法,极大地提高了编程效率。
驱动程序紧张完成的功能:1)设备的初始化,找到所要掌握的硬件,在驱动程序工具中设置驱动程序分发例程的程序入口点,建立所有驱动程序工具或其他系统资源;2)创建设备工具,利用 AddDevice 函数创建了一个设备工具,并将其连接到以 PD0 为底的设备堆栈中;3)中断的相应与处理,完成对外部硬件中断的相应并将中断信息通报给运用程序;4)DMA 操作,完成 DMA 的读写操作并在 DMA 传输结束后产生 DMA 中断,通过相应的 DMA 中断,将传输的数据发送到外部总线或运用程序。
4 、实验结果
通过编写上位机程序对系统的传输性能进行测试,测试的基本事理是上位机天生一批数据然后从打算机的 PCI-Express 接口写到 PEX8311 再写到 FIFO,末了写到 SDBAM 中,然后上位机再从 SDRAM 中读回刚才写入的数据,比较读和写入的数据是否同等就能判断系统的读写是否精确,并且测试数据的传输速率。经由一段韶光的测试,系统最大传输速率达到 180 MB/s,知足了本系统高速数据的传输哀求。
5 、结论
本文设计了基于 PCI Express 总线的 CamLink 接口的高速图像采集系统,在完成系统的硬件设计后,编写了 FPGA 的逻辑掌握程序,并开拓了驱动程序和上位机运用程序。系统采取 PCI Express 总线实现硬件电路与打算机之间的高速数据传输。接口芯片采取 PLX 公司推出的第一款 PCI Express 桥接芯片 PEX8311。实验结果表明,设计的硬件系统知足高速图像传输的哀求,并且性能稳定。