当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于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的工控机存储显示程序的实现方法。

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

在这篇文章中,小编将对USB接口的相关内容和情况加以介绍以帮助大家增进对USB接口的了解程度,和小编一起来阅读以下内容吧。

关键字: USB 通用串行总线 总线

今天,小编将在这篇文章中为大家带来嵌入式总线技术的有关报道,通过阅读这篇文章,大家可以对嵌入式总线技术具备清晰的认识,主要内容如下。

关键字: 嵌入式 总线

太阳能供电应用系统的设计需要考虑多个方面,包括太阳能电池板、储能装置、控制模块等。本文将介绍一种基于太阳能供电的应用系统设计方法,并从这几个方面进行详细阐述。

关键字: 太阳能 系统设计

在项目中,显示数据非常重要,尤其是对于客户来说,能够直观地看到当前的一些参数或配置信息是非常关键的。为了实现这一目标,可以考虑以下方法:

关键字: MCU器件 显示系统

众所周知,一款优秀的产品,不仅要有很高的性能,很好的稳定性,而且还要具备对用户非常友好和极具吸引力的图形交互界面。然而,运行一个非常酷炫且极具吸引力的图形用户界面,就要求有一个高主频,高性能,存储资源丰富的MCU作为支撑...

关键字: MCU器件 显示系统

北京2023年8月15日 /美通社/ -- 日前,在第五届OCP China Day 2023(开放计算中国技术峰会)上,浪潮信息正式推出融合架构3.0原型系统,以开创性的系统架构设计实现了计算资源、存储资源、...

关键字: 系统设计 内存 软件定义 数据中心

北京2023年8月7日 /美通社/ -- 随着大模型智能水平的提升,AIGC所需要的算力在不断增长。大模型的参数量超过千亿,甚至突破万亿级别,预计智算中心将迎来更快发展。IDC预测,2022-2026年,全球AI计算市场...

关键字: CHINA 数据中心 AI 系统设计

无论温度怎么变化始终UCQ1=UCQ2,电路以两只管子集电极电位差作为输出,就克服了温漂 当u11=u12(共模信号)T1管和T2管所产生的电流变化相等;因此集电极电位的变化也相等。

关键字: 差分放大器 系统设计 电极电位

汽车CAN/LIN总线系统测试的关键是测试流程、测试标准和测试工具,掌握专业的总线分析和测试工具的使用技术,开发测试软件并将它们应用到测试过程是对中国汽车厂家和汽车工程师的重大挑战汽车总线测试流程。概括的讲,汽车总线的测...

关键字: CAN 总线 汽车

现代电子技术的正处于一个飞速发展的时代,随着现代汽车整体性能的逐渐完善,单片机和集成电路不再是家电等电器产品的专属,也正愈来愈广泛的被在应用现代汽车上,电子控制单元部件及各种传感器数量在现代汽车的装配也越来越多。为方便这...

关键字: 汽车 总线 监控
关闭
关闭