设计中是通过编写状态机(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 继续。

基于PCI Express总线的CamLink接口的高速图像采集系统

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。实验结果表明,设计的硬件系统满足高速图像传输的要求,并且性能稳定。