当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于PC104(Plus)总线的数据接收存储显示系统设计

摘要:提出了一种双通道大容量数据接收存储显示系统的实现方案。阐述了以PLX9054为核心、以异步FIFO为数据缓冲通道的PC104(Plus)接口电路的设计方法,同时给出了FPGA控制逻辑设计与Linux系统下基于Qt/Embedded和Framebuffer工控机存储显示程序的实现方法。
关键词:PC104(Plus);Qt/Embedded;Framebuffer;实时存储;同步显示;工控机

0 引言
    在现代数字信号处理领域,对于大容量高速数据的存储和显示是进行后续相关处理的基础,也是信息处理系统的关键组成部分。随着数字视频视觉技术和视频采集技术的发展,很多应用场合都需要对接收到的模拟数据进行模数转换,然后再进行数据的实时存储和同步显示。为此,本文介绍了对模数转换后的数字信号所进行的处理,提出了一种基于PC104 (Plus)总线的双通道大容量高速数据的接收、存储和显示系统的设计方法。该系统通过FPGA-PC104(Plus)接口对数据进行接收和预处理,再通过FIFO数据传输通道来上传数据,最后由工控机的软件来实现数据的实时存储和同步显示。其中工控机软件采用Linux(2.6内核)下Qt/Embedded的GUI来设计,并用Framebuffer的显示技术来提供良好的人机界面交互和快速的存储显示操作。

1 系统结构
    本系统由数据接收模块、FPGA控制模块和工控机显示存储模块组成,其系统结构如图1所示。图中的FPGA选用Xilinx Spartan3系列的XC3S2000F456,其最大用户IO为333个,系统门达到200万门,并内置576KB的RAM块;FIFO选用IDT公司的IDT72V36110,该芯片容量为512KB,可支持36位输入、输出数据,最高工作频率可达166MHz;另外,PLX9054是PLX公司的总线桥接芯片,它支持多种工作模式,本系统采用C模式。在该模式下的DMA传输时,PLX9054对PC104(Plus)总线和本地总线都是主控制器;工控机选用Senbo公司的LX-3072PC/104 CPU模块,该模块搭载的AMD Geode LX800 CPU,其工作频率高达500MHz,遵从PC/104+标准,并提供有PC104(Plus)总线,同时集成了PS/2、RT、IDE、USB2.0和10M/100M网口等接口,而且功耗低,可靠性高,可广泛适用于数据采集、通信等领域。为了保证系统的实时性和稳定性,本工控机上运行的是Linux操作系统。


    数据接收模块的两路输入通道分别连向FPGA的IO端口,在FPGA模块的控制下,两路输入数据同时分别进入各自的FIFO进行缓存。为了避免PLX9054控制本地端时的总线竞争以及简化时序设计,可将两片FIFO的输出端复用,且经由FPGA的IO端口连向PLX9054的本地数据端,进而在FIFO产生相应状态响应的时候,由FPGA控制模块向PLX9054发出读取FIFO的中断请求,PLX9054在响应中断后,即将数据以DMA的方式经由PC104(Plus)总线上传至上位机,上位机通过PCI驱动读取DMA传输的数据,然后进行数据分析,再分别进行存储和显示。

2 系统设计
2.1 数据接收模块设计
    本系统中的数据接收模块采用J18型37针视频通信接口,该接口协议可根据实际需求自行定义,但最大为32位。由于输入数据为高速数字信号,因此,为防止输入FPGA的信号产生过冲,可在视频通信接口的后端对32位数据分别进行RC端接,并串联33Ω的电阻和0.01μF的电容。
2.2 FPGA控制模块设计
    本系统的数据传送采用DMA结合中断的方式。该方式不仅能保证数据传输的速率,而且能提高系统的工作效率。接收高速数据时,要使用缓冲区对数据进行缓存,但是,如果等缓冲区全部存满以后再进行DMA传输,那么,在数据流速率比较高的时候,就会造成数据的丢失。因此,在FIFO半满时就必须进行数据的DMA传输,这样可使工控机从FIFO读取数据和FPGA从外部接收数据能同时进行。
    FPGA控制模块是本系统的硬件核心,其主要功能是完成系统复位,接收数据进行缓存,控制读取两个FIFO数据的逻辑顺序,并控制DMA传输。FPGA控制模块电路如图2所示。


    在图2电路中,为了保证FPGA与FIFO同步工作,应将两片FIFO的各自读写时钟连接在一起,且分别由FPGA输入到时钟驱动芯片以后获得。[!--empirenews.page--]
    为了满足PLX9054上电启动速度的要求,其时钟应由晶振直接提供。
    系统上电后,PLX9054NFPGA发出复位命令,同时由FPGA对FIFO进行复位,并完成对FIFO的初始化,以使其处于工作状态。在FP-GA接收数据时,存储数据通道和显示数据通道的数据同时进入FPGA,为了使工控机软件能够区分两路数据,可在FPGA内部根据数据同步信号分别对两路数据加上帧头,然后同时写入FIFO1的D1[0…31]和FIFO2的D2[0…31]。数据半满后,FPGA要根据两片FIFO的半满信号和对其进行读取控制。FIFO的读取控制主要由实现。在实际应用中,存储数据一般要求能够优先上传,且数据连续,而对同步显示的要求相对较低,显示数据的速率也较低,只要能够满足显示刷新率的要求即可,因此,本设计中存储数据缓冲区FIFO1的半满信号的优先级高于。具体实现方法是对进行逻辑运算,图3所示是其运算逻辑图。


    运算后可得到化简结果,然后令;之后再在FPGA内部将、做与运算,可得到,然后判断,若为低,则FPGA向PLX9054发出中断。这样就能保证两片FIFO的数据根据优先级不断向上发送。
    PLX9054响应中断后,即可通过LHOLD申请对本地总线进行控制,FPGA则通过LHOLDA作出应答,进而由PLX9054获得本地总线控制权并启动DMA传输周期。FPGA收到读信号和地址选通信号后,产生信号,并在最后一个数据传送信号有效之前一直保持有效。在此期间,FPGA将根据图3所示的运算逻辑结果,并按照优先级读取相应FIFO的数据进行上传。具体的控制及数据传输时序如图4所示。
由图4可见,当同时有效时,其FIFO1的优先级高于FIFO2,故可满足设计要求。

[!--empirenews.page--]
2.3 工控机显示存储模块设计
    本系统利用PLX9054和Linux的DMA技术来实现大量数据的高速传输,同时使用Qt/Ernbedded进行人机界面设计和Framebuffer的帧缓冲显示,以对视频数据进行存储和显示控制。整个软件的功能图如图5所示。


    PLX9054的PCI设备驱动是DMA传输的关键,驱动程序利用PLX9054芯片的DMA功能可将FPGA控制模块中的数据快速传输到Linux操作系统的内核内存中。要实现对PLX9054的DMA操作并设置DMA控制寄存器,设备驱动程序需要做两件事:一是检测PCI设备并初始化:二是建立DMA操作环境。在Linux2.6内核中,PCI设备检测和初始化可通过专门的注册函数pci_regis-ter-driver来实现。内核根据pci_device_id结构中的预设ID来对pci_devices链表进行搜索,一旦找到目标PCI设备,pci_register_driver函数将调用设备探测函数(probe)并向该函数传递该设备的pci_dev变量,然后由设备探测函数完成对设备的初始化。建立DMA操作环境的工作包括DMA缓冲区的分配和中断处理。本系统使用流式DMA映射(dma_map_single())来申请适当大小的DMA缓冲区。当一个缓冲区被流式映射后,只有将其unmap除掉以后,驱动程序才能安全地访问里面的数据内容,并通过request_irq函数实现中断处理程序的注册。这里有两个问题需要注意:一是PCI设备注册中断时,必须使用共享中断方式,并应在中断处理程序中增加对中断源的检查;二是PLX9054的中断信号一旦产生就一直有效,它必须通过代码清除中断。
    本系统采用Qt/Embedded(4.5)进行GUI设计,以便为系统用户提供一个高性能、高可靠的GUl支持。Qt/Embedded是著名的Qt库开发商Trolltech公司开发的、面向嵌入式系统的Qt版本,许多基于Qt的X Window程序都可以非常方便地移植到Qt/Embedded上,而且与X11版本的Qt在最大程度上接口兼容,因而延续了在XWindow上的强大功能,并在底层彻底摒弃了X lib,而仅采用Framebuffer作为底层图形接口。同时,使用Qt的多线程设计则使人机交互、视频显示和数据存储能够同时进行。
    本系统采用Framebuffer帧缓冲技术来实现视频数据的快速显示。Framebuffer机制模仿的是显卡的功能,它将显卡硬件结构抽象掉,可通过Framebuffer的读写直接对显存进行操作。内核编译时可选上对Framebuffer的支持。进入Framebuffer可以在系统启动时向内核传送vga= modenumber的参数来激活Framebuffer设备(如:vga=791)。Framebuffer的设备文件一般是/dev/fb0、/dev/fb1等。
    在应用程序中,一般可将Framebuffer设备映射到进程地址空间的方式使用,比如利用下面的程序就可以打开/dev/fb0设备,并通过mmap系统调用进行地址映射,随后用memset将屏幕清空(这里假设显示模式是1024x768-32位色模式和线性内存模式):

    在子函数initFb中,对映射过的内存地址(即显存)再进行分行映射,即把原来的一维线性地址转换为二维线性空间,这样,映射后的fbp[x][y]就可以在屏幕上表示水平位置为y、垂直位置为x的像素。


    利用该映射能够对显示区域中的某一行进行操作,也可以对显示数据包的每一帧进行行分析,进而对每一行进行控制和显示。这样既可保证显示的灵活性,又具有良好的显示速度。

3 结束语
    本文给出了一种基于FPGA控制逻辑的高速数据接收存储显示系统的硬件设计方案,同时详细介绍了Linux系统下基于Qt/Embedded和Fr-amebuffer的工控机存储显示程序的实现方法。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭