PCI总线范文
PCI总线范文(精选10篇)
PCI总线 第1篇
1 硬件电路设计
PCI总线和CAN总线之间的物理通路(见图1)。
在主机端使用的芯片是PLX9052,它是Plx Tech公司的PCI总线控制芯片,提供了与微机系统的数据总线和控制总线接口,同时支持对PCI-CAN适配卡端的控制。它用一块EEPROM作为初始化存储器,在设计中选用93LC46芯片。当主机端系统启动加载时,PCI9052先从该EEPROM存储器中加载初始化数据。
为了在PCI-CAN适配卡端对CAN总线进行控制,我们采用LPC2292和TJA1050t收发器,并采用74LVC4245进行光电隔离。LPC2292内部集成的2路CAN控制器符合CAN规范2.0B ISO 11898-1;可访问32位的寄存器和RAM;每个总线的数据速率为1MB/s;全局验收滤波器可识别所有总线的11位和29位Rx标识符;验收滤波器为选择的标准标识符提供有FullCAN-style自动接收功能。
TJA1050是控制器区域网络(CAN)协议控制器和物理总线之间的接口。TJA1050可以为总线提供差动发送功能,为CAN控制器提供差动接收功能。
在LPC2292和PLX9052间还连接有一块SRAM作为数据交换区。
2 静态随机存储器IDT7132介绍
本设计中采用IDT7132作为SRAM,它是美国IDT公司生产的高速2K8的双口SRAM,外部电路简单,不需外加逻辑电路,就能应用于32位或更高位的存储系统。该芯片提供了两组独立控制逻辑、地址线,同步获取本地存储器的I/O引脚,用于片选信号CE引脚和用于忙控制的BUSY引脚。
因为两端口都允许对SRAM进行读写,所以当两边同时对SRAM上的一个地址单元进行写时就会产生冲突,这时IDT7132的仲裁逻辑单元就对其进行判断,将写信号晚来的那一端的BUSY引脚拉高,使其进入等待状态,另一端拉低,使其先写,待其写完再将原来拉高那一端拉低,使其进入写状态。
美国IDT公司生产的双口SRAM分为两种:一种是中断触发方式,一种是无中断轮询触发方式。至于采用哪种双口SRAM,我们有以下考虑。
本设计中处理器就有两种状态:空闲状态和数据处理状态。当处理器处于空闲状态时,就算不进行轮询处理器也无事可做,所以这时进行的是中断触发方式还是轮询触发方式对处理器来说都是一样的;而当处理器处于数据处理状态时,又有如下两种情况:
(1)对LPC2292下位机而言,它的晶振频率为11059200Hz,经过粗略的计算,它读写1KB的地址空间最多不会超过400us,而轮询的周期定为1ms一次,所以这样的速率足可以满足我们的需求。
(2)对上位机而言,因工控机的处理器更为强大,且它除了进行与CAN总线的交互以外不再有别的任务,所以轮询对上位机来说也不是问题。
基于以上两点,最终决定采用无中断的SRAM,即IDT7132,既降低了成本又可满足我们的设计要求。
3 数据交换区的设计
本设计方案中的SRAM,大小2K8 bit,因其不带中断,所以采用基于地址位的方式来进行数据的读写。首先将其分为两个区域,每个区域的前两个地址单元为本区域的地址位,见图1所示。
主机端的发送区定义为Tarea,大小为1KB,它前两个地址单元000h和001h定义为Tarea的发送地址位;主机端的读取区定义为Rarea,大小为1KB,它的前两个地址单元400h和401h定义为Rarea的读取地址位。因为每个地址单元都指向一个字节,用两个地址单元,即两个字节就可以表示Tarea或Rarea内所有的地址单元。这两个字节的低10位用来表示所在空间的有效数据的最后一个地址(本论述中定义为后效地址)。
当主机端要往Tarea里写数据时,先读取发送地址位,得到后效地址,然后与本次要往Tarea中写入的字节数作比较,如果剩余空间的字节总数大于这次要写进去的字节数,就更新后效地址,然后再将要写入的数据写入Tarea中;如果小于就让后效地址置位为3ffh,将能写入的数据先行写入,不能写进Tarea的剩余部分数据字节等待PCI-CAN适配卡端读取后再写入(见图2)。
当PCI-CAN适配卡端要读取数据时,先读取地址位,得到后效地址,再读取数据,当读完数据以后,再读取一次后效地址,当此时的后效地址等于此时读取地址时,就更新后效地址为001h;当不等于时,就继续读取数据直到后效地址所指的地址(见图3)。
总结以上的操作,定义本设计的数据读写原则为area-addr原则:进行写操作时,先更新addr再写area;进行读操作时,先读area再更新addr。同理,PCI-CAN适配卡端对Rarea进行写、主机端对Rarea读时,也遵循area-addr原则,不过主机端和PCI-CAN适配卡端交换了一下读写方式,即主机端的写空间就是PCI-CAN适配卡端的读空间,主机端的读空间就是PCI-CAN适配卡端的写空间。PCI-CAN适配卡端的发送和主机端读取的流程完全可以参照以上两个流程。
4 本设计的特点
本设计原想采用较简单的置0-1标志位的存取方式,但为了减少延时,加快传输速率,充分发挥本卡上的硬件资源,加快数据的存取,从而决定采用area-addr原则,对比简单的置0-1标志位存取方式,area-addr原则具有以下特点:
(1)当一端正在往数据区写入数据或从数据区读出数据时,采用置0-1标志位存取方式,则只能在一端写完或者读完以后才置位标志位,所以此时当另一端有对应的读操作或写操作时,就只有等待,直到正在操作的那一端完成了操作,标志位被重新置位后另一端才可以进行对应的读写,这样就增加了延时;而采用area-addr原则,一端正在写或读时,另一端就可以进行相应的读或写,两端都可以进行操作。
(2)当采用0-1标志位存取方式时,即使只写一个数据,Taddr也置位为1,以后再有数据到来也不可以往数据区上写任何数据,不管数据区是否被填满,直到被读取后Taddr置位为0才可以继续往数据区里写入数据;而采用area-addr原则可以在数据区不满的任何时候往数据区中写入数据。
(3)当采用0-1标志位存取方式时,读取的一端读完数据区后,就退出数据区并置标志位,直到下一次再询问标志位才可以继续读取;而采用area-addr原则时,当在读的时候另一端有写操作时,读操作就可以不用退出数据区而直接继续往下读新到来的数据,直到读完刚写上去的数据为止。
有了以上的三个特点,就大大减小了时间延时,加快了数据传输的速率。
5 数据交换区的读写实现
5.1 编写Linux环境下的P CI驱动以读写S RAM
PCI是一组完全的规范,它定义了计算机的不同部分是如何交互的。PCI外设由一个总线号、一个设备号和一个功能号确定。
PCI设备有三个地址空间,分别是内存地址空间、I/O地址空间、配置地址空间。前两个地址空间由PCI总线上的所有设备共享,而配置空间则是设备私有的。每个PCI插槽有一个配置事务的私用使能线,PCI控制器一次只能访问一个外设,因此不会有地址冲突。在初始化阶段,外设的配置信息被Linux内核中的初始化程序从配置空间中读出,这样,一旦配置寄存器被读出,不需要探测,驱动程序就可以访问它的硬件了。
在PCI的EEPROM中地址空间的配置是整个驱动程序的关键部分,只有定义好了EEPROM中各个寄存器的内容才可以在驱动程序中访问SRAM上的地址单元,具体配置EEPROM可以使用PLX公司的PLXMON软件(见图4)。
在本设计中与PLX9052连接的IDT7132大小为2K8 bit,且PLX9052的片选CS0连接到了IDT7132的CEL,所以在配制EEPROM时,我们将使用Local Space0,访问方式为I/O空间方式,所以我们配置片选0基址(CS0BASE)为01002001h,局部地址空间0地址范围(LAS0RR)为FFFFC001h。因为本地总线宽度为8位,采用非预取方式,再根据设计需要配置的总线状态,所以局部地址空间0总线区域描述寄存器(LAS0BRD)配置为D41148A0h。至于局部地址空间0局部基址(重映射)(LAS0BA)则要根据操作系统的地址分配来确定,采用一段空闲的地址空间作为LAS0BA的地址,在本设计中配置其值为01000001h。
配置好了EEPROM空间以后,就可以开始写在Linux底下的驱动程序了。
Linux驱动程序分为两类:字符设备驱动和块设备驱动。PCI设备驱动属于字符设备驱动,但是在Linux中设计了专门的针对PCI设备的PCI驱动架构,因此既可以使用字符设备的架构来编写PCI驱动程序,也可以使用PCI驱动架构来编写驱动函数,本设计在实验阶段编写了两套驱动程序,都可以正常运行,现为了节省篇幅,只列出以PCI驱动架构编写的驱动的主要部分以供大家参考:
5.2 编写LP C2292中的程序以读写S RAM
在本设计中SRAM连接到了LPC2292的CS0管脚上,它的数据线宽度为8位,对应连接的是LPC2292的D0-D7,地址线宽度为11位,对应连接的是LPC2292的A0-A10。
在LPC2292中,外部地址是从0x80000000开始的,我们选用的是CS0,它对应的地址空间为16M,从0x80000000到0x80FFFFFF,本设计中我们的SRAM为2K,空间范围为从0x80000000到0x800000FF。
部分参考代码如下:
从SRAM上接收到数据后,LPC2292就将其通过CAN控制器发送到CAN总线上。在发送上,LPC2292和其他所有的CAN控制器一样,但在接收方面,LPC2292采用的滤波方式是使用全局验收过滤器,跟现今流行的滤波方式不同,所以,为了保持PCI-CAN适配卡的兼容性,我们又编写了采用通用滤波方式(单滤波和双滤波)的文件,下载到LPC2292后,可以完成验收滤波功能。但CAN总线的接收和发送不是本文讨论的重点,限于篇幅,故在这里不再作更多的描述。
6 结束语
本论述提出了一种CAN总线的接入技术,利用PCI总线与CAN总线进行通讯,划分了在PLX9052与LPC2292之间的SRAM以加快两者之间数据传输,实验结果表明本设计的效果良好。同时,该技术也可以应用于其他现场总线接入技术的研究。
摘要:为了方便工业控制计算机接入控制器区域网络CAN总线,提出了一种基于PCI总线与CAN总线的通讯设计方案,划分了PLX9052与LPC2292之间的SRAM以加快两者之间数据传输,并实现了Linux系统下的PCI驱动和微控制器LPC2292上CAN总线的固件程序,为保持适配卡的兼容性,采用通用滤波方式(单滤波和双滤波)的文件,完成滤波功能,从而实现了工业控制计算机总线与CAN的高速连接。
关键词:CAN总线,PCI驱动,SRAM
参考文献
[1]Jonathan Corber,Alessandro Rubini Greg Kroah-Hartman,Linux设备驱动程序[M].北京:中国电力出版社,2005.
[2]周立功.ARM嵌入式实验教程(二)[M].北京:北京航空航天大学出版社,2005.
PCI总线仲裁器的设计与实现 第2篇
摘要:基于Altera的CPLD器件的PCI总线仲裁器设计,实现仲裁器的AHDL编程,并结合仿真结果对PCI总线的仲裁进行了论述。关键词:PCI仲裁器,CPLD,仿真
PCI总线仲裁器通常是集成在PCI芯片组中。随着计算机应用的深入,尤其是嵌入式系统的不断发展,集成的仲裁器难以满足某些场合的应用。而采用CPLD技术实现的独立的PCI总线仲裁器,则较好的适应了这方面的需求。
一pPCI总线仲裁机制
PCI的仲裁是基于设备访问,而不是基于时间分配的。在任一时刻,总线上的一个主设备要想获得对总线的控制权,就必须发出它的请求信号(PCIreqN),如果此刻该设备有权控制总线,总线仲裁器就使该设备的总线占用允许信号(PCIgntN)有效,进而获得总线的使用权。当有多个主设备同时发出总线控制请求时,就必须由仲裁器根据一定的算法判定,当前应该由哪个主设备获得控制权。
二、仲裁算法
常用的`仲裁算法有:公平算法、循环算法等。
本仲裁器设计采用的是循环算法,设备的优先级预先设定。目前的设计实现对四个PCI设备请求的仲裁,各设备优先级由高到低安排为:设备0 >设备1 >设备2 >设备3。
系统启动伊始,没有设备使用PCI总线,也没有设备请求使用PCI总线,仲裁器总是设定设备0拥有总线控制权,即将总线停靠于设备0。此时设备0的PCIgntN是有效的。而在此之后,仲裁器总是指定PCI总线的最后一个使用者为总线的停靠设备。
当有一个或多个设备提出拥有总线使用权的请求时,仲裁器将按照事先安排的设备优先级顺序逐一查询。对于只有一个设备请求的情况,该设备的请求将会马上得到响应;如果多个设备同时发出请求时,仲裁器裁定首先响应优先等级高的设备的请求,当此设备完成数据传输交出总线使用权后,再由优先等级低的设备使用总线。示意框图见图2。
如果一个设备已获得总线使用权并且正在进行地址、数据传输时,比它优先级别高的设备也发出了占用请求,仲裁器将会撤销优先级别低的设备的总线占用信号,并把总线使用权交给优先级别高的设备,同时还要确保在任一时刻不会出现多个设备同时占用总线的情况。具体见仿真分析。
三、编程设计与实现
本设计使用AHDL语言,在MaxplusII 10.0上编译通过,并进行了仿真。
1. 仲裁器信号定义
SUBDESIGN PCI_arb
( -- 输入
PCIclk :INPUT -- PCI时钟
Arbiter_rstN :INPUT -- 复位信号
PCIreqN[3..0] :INPUT -- 总线占用请求信号
frameN :INPUT -- 数据交易的启动或开始,主设备发出
irdyN :INPUT --交易数据准备好,主设备发出
-- 输出
PCIgntN[3..0] :OUTPUT -- 总线占用允许信号
)
frameN和irdyN决定了总线的状态,只要两个信号中的一个有效,就表明总线上有数据通过,总线处于忙状态;当两个信号都无效时,则总线处于空闲状态。
2. 仲裁器状态机定义
parb_sm : MACHINE
OF BITS ( PARB2 , PARB1 , PARB0 )
WITH STATES (
PARB_SLT0 = 0, -- PCIgnt0#有效,设备0拥有总线使用权,总线空闲
PARB_SLT0D = 1, -- PCIgnt0#有效,数据在总线上传输,总线处于忙状态
P
ARB_SLT1 = 2, -- 以下类同
PARB_SLT1D = 3,
PARB_SLT2 = 4,
PARB_SLT2D = 5,
PARB_SLT3 = 6,
PARB_SLT3D = 7 );
3. 仲裁的实现
由于采用循环算法,对每一个设备而言状态的变换都是相同的,下面仅以设备0的状态转换为例:
CASE parb_sm IS
WHEN PARB_SLT0 =>
IF ( !frameN # !irdyN # frameN & irdyN & PARBtout4 ) THEN
IF ( !PCIreqN1 ) THEN
PCIgntN1 = GND;
parb_sm = PARB_SLT1D;
ELSIF ( !PCIreqN2 ) THEN
PCIgntN2 = GND;
parb_sm = PARB_SLT2D;
ELSIF ( !PCIreqN3 ) THEN
PCIgntN3 = GND;
parb_sm = PARB_SLT3D;
ELSE
PCIgntN0 = GND;
parb_sm = PARB_SLT0D;
ELSE
PCIgntN0 = GND;
parb_sm = PARB_SLT0D;
END IF;
WHEN PARB_SLT0D =>
PCIgntN0 = GND;
IF ( frameN & irdyN ) THEN
parb_sm = PARB_SLT0;
ELSE
Parb_sm = PARB_SLT0D;
END IF;
为了避免AD线上和PAR线上出现时序竞争,一个设备的PCIgntN信号有效和另一个设备的PCIgntN的撤销,如果不是在总线空闲状态,则两者之间至少要有一个时钟的延迟。设计中,将每个设备占用总线的状态分为两部分,PARB_SLTx(总线空闲)和PARB_SLTxD(总线忙);状态机不能从一个设备的PARB_SLTxD状态直接转到另一个设备的PARB_SLTyD状态,中间必须经过至少一个时钟的PARB_SLTx状态的衔接,这样就避免了总线上竞争的出现。
代码中,PARBtout为一5位计数器,对PCI时钟个数进行计数,用来判别设备发出请求信号后是否在规定时间内(16个时钟,即PARBtout[4..0] = 10000)占据了总线,启动了数据的传输;如果超时,则撤销该设备的请求信号,并按预设的优先级顺序,对其余设备总线使用权进行新一轮的裁定。计数器的编程实现:
IF ( PARBtout4 # PCIreqN0 & PCIreqN1 & PCIreqN2 & PCIreqN3 ) THEN
PARBtout [ ] = 0;
ELSIF ( frameN & irdyN ) THEN
PARBtout [ ] = PARBtout [ ] + 1;
ELSE
PARBtout [ ] = 0;
END IF;
四、仿真分析
1. 单一设备总线请求情况
系统初始化后自动将总线停靠于设备0上,总线处于空闲状态,frameN、irdyN均为高电平。需要强调的一点是,仲裁所用的PCI控制信号均在PCI时钟信号的上升沿采样而得。如图3所示,设备2发出总线占用信号,仲裁器在时钟上升沿A处采样到该信号,并开始启动PARBtout计数,此时的frameN、irdyN为高电平,设备0仍然拥有总线使用权;随后设备2驱动使得frameN和irdyN有效,在时钟上升沿B处,仲裁器采样到frameN和irdyN,计数器清零,使设备2的PCIgntN2信号有效,从而占用总线,设备把地址、数据驱动到总线上,总线处于忙状态。
之后,设备2撤销其PCIreqN2信号,放弃对总线的占用;接着frameN、irdyN信号相继无效,表明数据传输的完成,总线变为空闲,仲裁器在C处采样后,将总线停靠在设备2上。
2. 多个设备同时请求总线使用权(以两个设备为例)
设备3首先发出请求信号,仲裁器在时钟A处采样后,计数器开始计数,此时总线仍然为设备0占用着;在时钟B处的采样,检测到frameN有效,表明数据传输的开始,仲裁器使得PCIgntN3信号有效,设备3获得总线所有权;
在随后的一个时钟上升沿,仲裁器采样到设备2的总线请求信号,此时由于frameN、irdyN依然有效,表明数据传输正在进行中,必须等当前数据传输完成后,设备2才能占用总线进行自己的数据传输,此时仲裁器隐含设定设备2拥有总线使用权。设备3在时钟C之前使得frameN、irdyN无效,总线进入空闲状态,停靠在设备3上。设备2检测到总线空闲,驱动自己的frameN、irdyN信号,仲裁器在时钟D处采样到有效的frameN、irdyN信号后,使PCIgntN2有效,设备2占据总线,开始数据的传输。设备2使用完总线后,使总线回到空闲状态,停靠在设备2上;设备3检测到总线空闲,再次驱动frameN、irdyN有效,从而再次获得总线使用权(时钟上升沿F处)。所有传输完成后,总线将停靠在设备3上。
值得一提的是,如果设备3在被迫交出总线前不能完成所有数据的传输,它必须使自己的PCIreqN3信号持续有效,这样在设备2用完总线后,仲裁器能将使用权交回,从而完成剩余数据的传输。
图5为设备获得总线使用权,在设定的16个时钟周期内没有启动传输,仲裁器状态的变换。仍以两个设备为例。
PCI总线 第3篇
关键词:FPGA;PCI;遥测系统
中图分类号:TD455.1文献标识码:A文章编号:1000-8136(2010)05-0004-03
遥测技术是指对被测对象的某些参数进行远距离测量,并传送到接受点的一种测量技术。遥测系统在大型核心飞行试验中是不可缺少的重要组成部分,遥测系统用于获取飞行试验中被测系统的工作状态参数和环境数据,为确定被测系统的性能或进行故障分析提供依据。数字量变换器作为遥测系统被测系统的核心,它的主要功能是控制接收被测系统各种飞行参数。数字量变换器的可靠性是影响遥测结果的核心环节,其精度关系到被测系统研制和实验过程中的实验数据可信度,其性能关系到实验的成败。如何准确、客观、高效地评价数字量遥测变换器的性能,是数字量变换器生产中的重要环节。
课题所研制的数字量变换器测试台用于数字量变换器的单机测试,可以广泛应用于被测系统研制、生产过程中数字量变换器的测试与控制。本测试装置属于自动测试系统(ATS)的范畴,它的使用,将改变数字量遥测变换器传统的手工测试方法,使其生产、应用中的测试实现自动化,必将提高数字量遥测变换器的生产水平和质量,增进遥测系统的联试水平,降低生产和试验成本。
1 系统的整体硬件电路设计
数字量测试台实现的模拟测试信号包括激光惯组脉冲、勤务信号、计算机字。数字量变换器测试台要实现课题任务中的所有功能,必须产生各个功能模块的控制信号,这个系统具有复杂的时序,设计中选用FPGA作为逻辑控制器就得到了很好的效果,同时FPGA的可编程逻辑特性能够简化硬件电路设计,提高系统的可靠性与稳定性。
FPGA具有小批量,低投入,高性能,高密度,开发周期短等诸多优点,使国内更多的工程师们乐于采用。由于不需要任何投片费用,也不需要建立任何生产线,因此,采用FPGA所需的投资远远低于ASIC的投资。据估计,引进一套先进的FPGA自顶向下设计工具所需费用还不到ASIC所需的1/10,而大力推广先进的FPGA设计方法,既可以降低诸多产业投资成本,也可培养自顶向下的设计人才,从而为将来国内ASIC产业的快速、健康发展打下坚实的基础[1][2]。硬件结构见图1。
1.1 核心控制部分
FPGA采用XILINX公司的XC2S200E,XC2S200E是低电压(3.3 V和1.8 V)供电,含有5 292个逻辑单元,高达150 000个门电路,它内部有丰富的门阵列资源,56 kbits的RAM缓冲器,通过在FPGA中编写硬件逻辑,来实现数字量指令的发送和信号。除此之外,数字量变换器测试台系统中,FPGA的另一功能是实现PCI总线和本地总线的通信功能。
1.2 数字量测试台的的通信方式
上位机与硬件电路的通信采用PCI总线的通信方式。PCI的含义为周边设备互连(Peripheral Computer Interconnect),是一种高带宽、即插即用(PnP)的总线协议,它被用来满足当今高性能PC机和工作站以及它们的高带宽应用。PCI数字卡中接口芯片选用的是PLX公司的PCI9054这一款芯片。该芯片是32位、33 MHz的通用PCI总线控制器专用芯片。它符合PCI总线规范2.2版,突发传输速率达到132 MB/S。PCI9054内部有6个可编程的FIFO,以实现零等待突发传输及局部总线和总线之间的异步操作。
本课题选用PCI9054的工作方式为C模式,数据传输模式为PCI Target(PCI从模式)。
2 FPGA内部系统各功能模块的实现
2.1 激光惯组脉冲信号
激光惯组脉冲信号输出为16路,分为单数路和偶数路,单数路和偶数路分别采用两个不同的信号源;脉冲信号的频率可以选定10 K~256 K,至少20分档,包括256 K这个频率;脉冲信号的个数可以按组发出,每组的个数可以预定,并不小于224。图2为激光惯组脉冲模拟源实现原理图。
片选译码模块:FPGA和PCI9054连接的数据总线宽度为16位,高8位数据作为各模块的片选译码信号,低8位数据作为模块中实现功能的有效数据。
频率大小模块:这个模块是实现惯组脉冲的频率范围选择,利用晶振源clk(2.048M)分频得到,定义惯组脉冲输出的频率大小为f(10 K≤f≤256 K),分频数为N,则8≤N=2.048 M/f≤204.8,上位机发送一个8位的二进制数(低8位数据),记为分频数,在写信号的边沿触发下写入模块寄存器中,换算成十进制数的范围为0~255,由上面换算可知可以实现10 K~256 K的任意分频,也就满足任务中10 K~256 K的20分档。但是,当分频数是小数时会存在微小误差,因此20分档频率尽可能取分频数是整数的脉冲通道模块:这个模块实现了惯组脉冲通道位的选择,低8位数据的每位控制一个通道,输出端与门相连,为‘1’时通道打开,为‘0’时通道关闭。
脉冲计数模块:这个模块主要实现对频率大小模块中输出的的脉冲频率进行计数。要求每路脉冲的个数不小于224,在设计中基数用32位,所以最多可以实现232个脉冲数。32位数据由低8位数据端分开4次输入脉冲计数模块中的32位寄存器,低位在前,高位在后,片选3-6为32位寄存器每8位的片选信号。
2.2 计算机字信号
输出3种模式的计算机字:一种是固定数码,即发送17个字节,为01、23、45、67、89、AB、CD、EF、0F、10、21、32、43、54、65、76、87;第二种是采用数字量变换器测试台输出的计算机字信号的第一路(特征码)可按规律变化,即136位计算机字当中最高的8位变化是在00H-FFH范围每帧加1;第三种是数字量变换器测试台按照00、33、55、FF的规律每10帧输出一种字形的计算机字,循环发出。图3为计算机字模块实现原理图。
时钟复制模块完成了遥测请求信号和移位脉冲的逻辑复制工作,使每个遥测请求信号和移位脉冲信号输入到一个8位移位寄存器;计算机字控制模块主要实现3种计算机字模式的切换,计算机字模式选择控制位为‘1’时代表计算机字模式切换使能,具体模式由数据端Din输入的低两位决定,Din(1∶0)=01时,为计算机字模式1;Din(1∶0)=11时,为计算机字模式2,Din(1∶0)=10时,为计算机字模式3,在遥测请求信号的边沿触发下,写入计算机模式;片选位为‘1’时,代表固定数据下载使能,依次写入136位数据。
2.3 勤务信号
勤务信号分为帧同步信号、路同步信号、码同步信号,上电后自动循环发出,用于数字量变换器数据的采集和传输,并且路同步信号作为计算机字移位脉冲信号。帧同步信号脉宽12.207 us,频率为40 Hz。路同步信号频率为20.48 KHz,占空比为50%。码同步信号频率为163.84 KHz,占空比为50%。帧、路、码同步信号在FPGA内具体实现方法见图4。
首先利用40M(0.025 us)的晶振244分频后得到周期为6.10 us的方波信号(fclk)(与码同步的有效时钟周期6.1035 us相比,在误差范围内)。设定count为13位的计数器,系统上电或复位后,计数器清零。Fclk作为count的自加计数时钟,当count自加到1000000000010(十进制数为4098)时清零,经历的时间t为25 ms(6.10us*4098),实现了一帧的时间。当count的低两位小于等于10时,帧同步信号(frame)置‘1’,否则置‘0’,则帧同步信号的脉宽为6.10us*2=12.20 us;当count的第4、3位为10时,使fclk赋值给码同步信号(code),其他情况为‘0’,码同步信号一个周期的计算公式为6.10 us*32=195.2;路同步信号(Rode)由计数器的第二位赋值得到,所以一个周期为6.10 us*8=48.8 us,实现了帧、路、码同步信号的输出。
3 结束语
本文根据测试系统要求,结合系统设计原则,将系统设计细化为各子功能模块,简化了系统设计,反应了层次化的设计思想,体现了模块化的设计原则,很好的完成了数字量变换器测试台的各功能模块,下面是对各功能模块的VHDL仿真结果。
Implementation of Multi-channel Data Acquisition System
Based on FPGA and UART Interface
Ma Xudong,Wang Wenjie
Abstract: To meet the need of rapid、distant、serial transmission and real-time storage for the received data, develop a multi-channel data acquisition system based on FPGA and UART Interface. Using FPGA we realize data acquisition module、selecting the channel of Analog Signal and parallel-to-serial converter withDigital Signal, and so on; And using RS-422 Interface realize long distance and serial transmission for Digital Signal.The function simulation results and actual measurement prove the correctness of the design.
PCI总线 第4篇
随着以太网技术的发展, 工业以太网成为新的发展方向。EPA作为一种全新的适用于工业现场设备的开放性实时以太网标准, 将大量成熟的IT技术应用于工业控制系统, 为适用于现场设备的实时工作建立一种全新标准, 并在此基础上建立应用于工业现场设备间通信的开放网络通信平台。该项目得到中国政府“863”高科技研究与发展计划的支持。
EPA总线作为我国唯一一个具有自主知识产权的工业以太网总线的国际标准, 目前并未在工控机等主控制设备中得到广泛应用。因此, 为进一步推广该协议的使用, 其在PC机、工控机上已经成为标准配置的PCI接口通信。此文阐述一种通过在两种总线接口之间增加一个数据传输装置的方法解决EPA协议与PCI接口之间的通信问题。
2 设计分析
本装置设计的基本思路为:主控设备通过PCI总线扩展EPA协议总线端口, 作为EPA协议总线上的一个节点实现数据通信, 当主控设备需要发送数据时, 通过PCI总线控制电路模块写入装置的发送缓冲区, 然后EPA控制电路模块获取缓冲区的数据, 并将数据打包为EPA协议的报文并通过EPA总线发往目标节点;当主控设备需要接收数据时, 首先通过EPA控制电路模块接收EPA总线上的报文, 并将报文解包, 把数据写入装置的接收送缓冲区, 然后通过PCI总线控制电路模块读取缓冲区数据, 经PCI端口传送至主控设备。
期间由于PCI控制电路模块与EPA控制电路模块均需对缓冲区进行读写, 由于两者通信速度、通信机制、时钟完全不同, 因此两者读写并不同步, 且存在以下问题:
(1) 主控设备通过PCI总线控制器和EPA总线控制器, 同时向同一缓冲区写数据, 此类情况下必然导致冲突, 使两者均无法正确写入数据。
(2) 如果PCI总线控制器对缓冲区的刷新速度超过EPA总线控制器的数据读取速度, 则会导致PCI总线控制器写入的数据丢失, 反之则会导致EPA总线控制器读到的数据是旧数据。
(3) 如果PCI总线控制器读取速度超过EPA总线控制器的刷新速度, 则导致EPA通信数据丢失, 反之则可能导致PCI总线读到的数据是旧数据。
针对以上问题, 可以通过以下两种方法解决:
(1) 将所有要传输的数据更新到缓冲区并将缓冲区分为收、发两个片区, 这会导致缓冲区的大小限制传输数据规模的问题, 这一问题在大型系统中表现尤为明显。
(2) 将缓冲区按照最大报文长度划分为多个片区, 并设置标志区, 在PCI总线控制器与EPA总线控制器间建立冲突仲裁机制, 从而避免冲突状态的发生及缓冲空间对传输规模的限制。
按照方案一将会导致缓冲区的大小限制传输数据规模的问题, 这一问题在大型系统中的表现尤为明显, 而方案二通过设置冲突仲裁功能, 采用标志位指示操作状态, 克服了方案一的问题, 也大大提高控制的灵活性, 因此, 本设计中选择采用方案二。
3 数据传输装置组成及功能
根据上文的思路分析, 将数据传输装置分成三部分, 如图1所示。包括PCI总线控制电路模块 (PCI) 、EPA总线控制电路模块 (EPA) 及它们之间的通信控制电路。
(1) PCI控制电路模块功能。PCI控制模块实现PCI总线协议、并行总线控制功能, 将主控制设备对PCI总线的访问转换为可通过并行总线对通信控制电路模块缓冲区特定地址的读写操作。
(2) EPA控制电路模块功能。EPA控制模块实现EPA总线协议、并行总线控制功能, 一方面通过并行总线读取通信控制电路模块缓冲区特定地址的数据, 并将数据打包为符合EPA通讯协议的报文经EPA接口发送至目标节点, 另一方面将EPA接口接收的EPA协议报文解析后的数据写入通信控制电路模块缓冲区特定地址, 以便PCI控制模块读取。
(3) 通信控制电路模块功能:具有协调PCI、EPA两个控制电路模块间的数据缓冲、互传及冲突仲裁的功能, 为实现EPA总线与PCI总线间的数据传输提供桥梁。
4 数据传输装置的实现
实现本装置的关键点在于协调PCI总线数据和EPA协议总线之间的读写操作, 因为PCI总线和EPA总线之间数据传输速率、传输机制完全不同, 导致它们之间的数据不能同步传输, 易出现传输数据损坏、丢失的情况。为解决该问题, 本装置通过在EPA控制电路模块和PCI控制电路模块间增加数据读写协调、仲裁缓冲电路, 称之为通信控制电路模块, 包括双端口RAM数据缓冲区和冲突仲裁两部分, 其电路框架如图2所示。
由图2可知, 双端口RAM分为缓冲区、标志区、配置区, 用于PCI总线和EPA总线端口之间接收数据和发送数据的缓存、标志位的更新及EPA总线配置字参数的更新。另外, 由于PCI控制电路模块和EPA控制电路模块均具有并行总线主控制器功能, 为防止两电路总线对主控制权的争夺、数据的丢失甚至硬件的损坏, 故在通信控制电路中增加冲突仲裁电路, 用于防止PCI模块和EPA模块同时操作数据缓冲区导致的混乱, 如读写数据失败、报文破碎等, 冲突仲裁电路具有以下控制作用:
(1) PCI控制电路模块和EPA控制电路模块在同一时刻只能由其中一个模块对双端口RAM进行操作。在一个模块进行操作时, 冲突仲裁电路自动封锁另一模块对双端口RAM的操作, 当前操作模块在操作完成后解除对双端口RAM操作的占用封锁。
(2) 当PCI控制电路模块和EPA控制电路模块同时发起对双端口RAM的操作时, 冲突仲裁模块封锁EPA的操作。
(3) 缓冲区溢出。若PCI控制电路模块或EPA控制电路模块向双端口RAM写入新数据时超越数据区范围, 则覆盖最早的数据, 同时更新双端口RAM标志区的起始地址和结束地址。
通过通信控制电路, 本传输装置可以实现配置EPA总线运行参数和数据接收、发送数据传输工作的功能, 每项功能实现的操作流程如下:
(1) EPA总线运行参数的配置操作流程, 如图3所示, 该过程只需主控设备通过PCI总线的控制电路向双端口RAM的配置区写入EPA总线配置参数, EPA控制电路通过查询标志区配置更新标志位, 若有更新, EPA控制电路模块则读取配置字参数, 更新EPA总线运行的配置参数, 完成通过PCI总线对EPA协议总线运行参数更新的功能。
(2) 数据传输操作流程。将缓冲区按照EPA报文的最大长度划分为多个缓冲片区, 通过标志字将其状态划分为五种状态:空闲、EPA电路模块占用、PCI电路模块占用、待EPA模块读取和待PCI模块读取。在PCI总线与EPA协议总线的数据进行交换的过程中, 读缓冲区和写缓冲区过程如下:
(1) 当数据从PCI接口发送至EPA接口时, 发送流程如图4a所示, 主控设备首先通过PCI控制电路模块向冲突仲裁电路读取当前缓冲区状态;然后选择空闲缓冲区并将缓冲区状态设置为占用状态, 若没有空闲缓冲区, 则选择处于“待EPA模块读取”状态的缓冲区中最早被设置的缓冲区设置为占用状态 (此时数据会丢失) ;最后向双端口RAM缓冲区写入要发送的数据及更新标志;EPA控制电路在检查到“待EPA模块读取”状态标志字时, 按先进先出原则将缓冲区设置为“EPA电路模块占用”状态后, 数据打包为符合EPA协议的报文并发送, 在发送成功时更新发送标志字为空闲。
(2) 当数据从EPA接口发送至PCI接口时, 接收流程如图4b所示, EPA控制电路模块把从EPA总线接收到的报文进行解析, 然后将解析出的数据按照PCI控制电路模块相同的流程找到相应的缓冲片区并写入和更新标志为“待PCI模块读取”状态, 等待主控设备读取。主控制设备通过PCI总线读取到“待PCI模块读取”状态后, 通过PCI控制电路模块从双端口RAM的缓冲区读取数据。
该装置采用某品牌PCI总线接口芯片PCI9030作为PCI总线控制电路核心芯片, 该芯片内建全功能的并行总线控制器, 通过外置时钟对总线时序加以控制。EPA总线控制器作为总线控制电路, 并采用双端口RAM作为缓冲区从根本上避免冲突的发生。由于Compact PCI、PCI104总线均采用PCI电气定义, 只是机械接口定义和配置有所不同。因此, 本文设计的方法也同样适用于EPA与Compact PCI、PCI104总线间的数据传输装置。另外, EPA总线控制电路模块采用EPA模组, 并行总线接口。
5 结束语
EPA标准作为我国自主开发的基于工业以太网的现场总线协议, 对提升我国自动化技术的整体水平具有十分重要的意义, 特别是将EPA标准引入国际标准, 意义尤为重大。一个标准的成功与否, 关键在于推广应用, 通过本装置的设计, 使得EPA总线能够很好地与当前应用广泛的PCI协议兼容, 有助于以EPA标准为核心的系列标准产业化推广。
参考文献
[1]李贵山, 陈金鹏.PCI局部总线及其应用.安电子科技大学出版, 2003.
[2]GB/T 20171-2006.用于工业测量与控制系统的EPA系统结构与通信规范.
[3]PCI-SIG.PCI Local Bus Specification.
[4]胡现辉, 车震平, 魏彪, 李开龙, 米德伶, 秦岚.PCI接口芯片在X光测量系统中的设计与实现.
PCI总线 第5篇
摘要:介绍了应用在焊缝缺陷自动超声检测系统中的高速数据采集卡的性能,给出了其硬件实现方案和WINDOWS98下的虚拟设备驱动程序(VXD)。该数据采集卡不仅具有较高的采样频率,而且充分利用PCI总线带宽,实现了高速数据传输。测试表明,WINDOWS98应用程序能够稳定地采集焊缝信号,满足系统对数据采集的要求。
关键词:数据采集PCI总线焊缝缺陷VXD
焊缝缺陷自动超声检测系统是一种重要的无损探伤设备,可用于检测平板、管道、容器等的纵、横焊缝以及接管角焊缝缺陷。与手工检测方法相比,该系统具有运行平稳、漏检率低、显示直观等优点。
在焊缝缺陷自动超声检测系统中,缺陷回波信号通常为宽度约10ns~100ns、幅值在几十μV到几十mV之间的窄脉冲。为满足缺陷回波信号的检测要求,研制了一种基于PCI总线的高速数据采集卡,它是面向超声检测应用而设计的:该卡采用转换速率为60MHz的八位高速A/D以满足数据采集的要求;为缓存A/D芯片输出的高速数据并充分利用PCI总线带宽,加入32KB的高速FIFO缓存组;同时,为满足多通道探伤的要求,设计了通道选择电路以实现通道之间的切换;此外,为调理缺陷回波信号,卡上还配有高增益高带宽放大电路。
1高速数据采集卡的工作原理
焊缝缺陷自动超声检测系统的信号采集框图如图1所示。系统的工作原理是:首先由高压脉冲发生电路发射高压脉冲;高压脉冲经换能器形成超声波信号,遇到缺陷或杂质时产生反射波,经换能器转换为电压信号,该信号经放大调理、A/D转换后,形成数字量,写入高速FIFO存储器中。最后,由PCI接口芯片将FIFO中的数据适时地写入内存。
2数据采集电路的硬件设计
2.1高增益高带宽放大电路
采用带触发的直流逆变电路产生高压脉冲,采用多路模拟通道选择电路实现通道切换以满足多通道探伤要求。模拟信号经五级放大、滤波后,作为A/D转换电路的输入。放大电路采用最高增益为80dB、带宽为15MHz且分辨率为1dB的放大器,并且采用数字电位器实现放大增益的动态调整。
2.2A/D转换电路
A/D转换电路采用美国BB公司的ADS830。该芯片的信噪比高、功耗低、非线性畸变小,广泛应用于图像处理、数字通信和视频测试系统中。ADS830的精度为八位,最高采样频率为60MHz,可满足焊缝缺陷自动超声检测系统对数据采集精度和采样频率的要求。它有共模和差模两种信号输入方式,且输出的数字量可直接与5V或3.3V芯片接口。
2.3高速FIFO存储器
高速缓存是保证高速数据不丢失的关键,确保了数据的真实性。同时,高速FIFO缓存使A/D芯片不必工作在PCI同步时钟下,提高了A/D芯片的利用率。IDT公司的存储器性能优良,且同系列存储器一般可以做到管脚级兼容,容易实现硬件设计的模块化。为方便读写数据,选择先进先出式(FIFO)的缓冲存储器IDT7205L15。其访问时间为15ns,每片容量为8K9位。支持异步读写,并提供诸如满、半满、空等用于位扩展和深度扩展的信号。高速数据采集卡为实现8位A/D和32位PCI总线的宽度匹配,采用了位扩展技术。为加深FIFO的缓冲深度,将外加FIFO缓存与PCI接口芯片内部的FIFO相级连。
2.4基于CPLD的控制逻辑
基于CPLD的控制逻辑是高速数据采集卡的核心,它为PCI接口芯片提供满足时序要求的读写信号,同时选择模拟信号的输入通道、控制高压脉冲发生逻辑并设定放大电路的.增益。此外,CPLD还能利用高速FIFO缓存的空、满标志位,配合PCI接口芯片实现DMA写操作,完成高速数据传输。Xilinx公司的XC9572XL-VQ64芯片的脚到脚延迟最大为10ns,可满足PCI总线接口时序的要求。单片XC9572XL-VQ64能满足焊缝缺陷自动超声检测系统逻辑控制的要求,且具有体积小、可靠性高、调试方便等突出优点。
图2是基于有限状态机FSM(FiniteStateMachine)方法设计的控制逻辑状态转换图。其中,RST和IRQ是由PCI接口芯片S5933输出的可由程序任意控制的两个信号,它们的高低状态同高速FIFO缓存的空、满信号一起决定了控制逻辑的六个可能的状态,图中以椭圆表示。计算机上电时,控制逻辑处于RST=IRQ=1的状态。值得一提的是,RST和IRQ信号都有适当的上拉电阻,所以不会出现高阻浮空的状态,使控制逻辑能够稳定地工作。实线是控制逻辑采用的状态转移路线,而虚线是可能的但不采用的状态转移路线。在各状态之间进行切换是很容易的,只需通过程序使RST或IRQ信号出现高或低跳变。状态转移时伴随着的电路动作见转换线旁的注释。
2.5PCI接口芯片
PCI总线协议2.1版出现以后,集成芯片商们纷纷推出了与其兼容的总线接口芯片。其中,AMCC(AppliedMicroCircuitCorperation)公司的S5933接口方便、控制灵活,软件配置简单,在高速网络接口、数字通信、高速成像等领域有着广泛应用?2?。S5933最突出的优点是能够作为PCI主控设备发起DMA操作,即S5933完全具备双字DMA控制器的功能。
图3是结合系统应用而绘制的S5933结构框图。由图3可知,S5933内部具有配置寄存器组和操作寄存器组,配置寄存器组用于控制S5933在PCI总线系统中的运作方式(访问延迟、能否发起主控DMA操作等)以及记录系统分配给S5933的资源信息(如中断引脚、I/O等)?3?,而PCI总线和外加电路之间的数据交换则通过操作寄存器组实现。以I/O资源为例,计算机上电后,系统将分配给S5933的I/O资源首地址填入基地址寄存器,此值决定了操作寄存器组在I/O空间中的映射位置(S5933的操作寄存器组缺省地映射到I/O地址空间,便于软件操作),见图3。之后,CPU只需执行简单的I/O操作就可以读写操作寄存器组,隐含的地址译码工作由S5933完成。外加电路控制逻辑则保证操作寄存器组与外加电路的正常通信。S5933提供了三种形式的外加电路接口,高速数据采集卡使用信箱(Mailbox)寄存器实现双字输出,用FIFO方式实现高速DMA写操作。
图3S5933的结构框图
3高速数据采集卡的软件设计
3.1虚拟设备驱动程序的设计
系统的控制软件工作在WINDOWS98操作系统下,为此开发了高速数据采集卡的虚拟设备驱动程序(VXD)。由S5933的结构可知,VXD需要实现双字I/O操作和物理内存管理。双字I/O的操作相对简单,调用虚拟机管理器(VMM)的SIMULATE_VM_IO例程即可,较困难的是物理内存管理。由于S5933发起的DMA操作需要物理内存的起始地址,因此必须涉及页面级的物理内存操作,故采用下述内存管理策略:
・应用程序加载VXD;
・加载成功后发送申请缓冲区的事件给VXD;
・VXD使用PAGEALLOCATE例程得到地址连续的适当长度(如四页即16K字节)的物理内存;
・锁定缓冲区并将物理地址逆映射为线性地址;
・将物理首地址填入S5933的写RAM地址寄存器;
・允许S5933进行主控DMA传输;
・传输完毕时,应用程序请求VXD释放上述物理内存。
3.2应用VXD设计数据采集程序
将VXD放在应用程序的同级目录下,则以下VC++代码就能动态加载(VXDVIEWER可验证)一个VXD:
HANDLEhDEVICE=CreateFile?“\.pathname”?0?0?NULL?0?FILE_FLAG_DELETE_ON_CLOSE?NULL?;
编好的VXD为应用程序提供了若干服务例程,应用程序执行下面的代码即可调用服务例程ZHC1:
DeviceIoControl?HDEVICE?ZHC1?lpinbuffer?ninsize?lpoutbuffer?noutsize?NULL?NULL?;
数据采集算法如下:
DO?{读取写RAM字节计数器;
再次读取写RAM字节计数器;
IF计数器内容为零THEN
跳出循环进行后续数据处理;
ELSEIF两次读取的结果不同THEN
不做任何处理而进入下一次循环;
ELSE
清相应的状态标志并设置有关寄存器以从断点处续传;
ENDIF
}
调试表明,应用VXD的数据采集程序能够稳定、高速地采集外部数据。对焊缝缺陷自动超声检测系统的实际测试表明,该高速数据采集卡能满足缺陷回波的检测要求。图4(a)为实际测试时用示波器观测到的模拟放大电路的输出信号,图4(b)是A/D转换后、截掉始波并经半波整流后得到的信号。
高速数据采集卡具有体积小、可靠性高、控制逻辑更改方便、可扩展性强等优点。对于检测厚度为10~100mm的钢板,一次采集的数据最多为4KB,至多只需0.13ms就可
PCI总线硬件故障容错技术研究 第6篇
PCI总线(Peripheral Component Interconnect)是嵌入式计算机系统中最常使用的总线,但是由于PCI总线属于时分复用的双向应答总线,需要发起/应答信号间的相互配合,当PCI总线设备无响应的时候,PCI总线控制器就无法对其余的PCI设备进行正确的配置、读写等操作,会出现PCI总线时延较大,甚至总线瘫痪。
基于FPGA实现了一种硬件故障模式的PCI总线容错技术,通过可编程逻辑实现PCI桥的IP核,使得PCI总线控制器与其他PCI总线设备进行数据通信,解决了由于某个PCI总线设备无响应后,出现的PCI总线周期较长或将整个总线处于等待状态,并对故障设备进行隔离并恢复PCI总线数据传输功能。
1 PCI总线功能分析
1.1 PCI总线工作方式
PCI桥将CPU的数据与PCI设备的数据进行转换,并向PCI总线上的所有的PCI主设备(PCI总线的发送方,Master)和PCI从设备(PCI总线的接收方,Target)提供地址映射。
PCI总线是地址/数据线复用的非智能总线,也是一种时分复用双向应答总线[1]。PCI总线具有突发分组机制,总线传输协议步骤如下:
(1)在PCI总线的地址周期中,PCI总线控制器通过C/BE[3:0]这4条PCI总线控制信号确定总线工作方式:I/O空间读写、存储器空间读写、总线配置空间读写或总线信息广播等;
(2)通过REQ#和GNT#这2条PCI总线控制信号由仲裁机构确定总线的控制权;
(3)在PCI总线的数据周期,根据步骤(1)的命令方式完成数据传输。
传统的PCI总线结构如图1所示。通过图1的PCI总线拓扑连接方式,发现PCI总线属于开放式连接,并无终端端接设备,这样的连接方式,决定了PCI总线信号传输是通过反射波实现。
当PCI总线主设备的总线驱动器驱动总线信号,总线驱动器只是将该信号的电平驱动到协议要求的电平一半,当该信号传输到PCI总线从设备后,将该信号完全反射回来,完成该信号的电平叠加,达到PCI总线协议要求的电平[2]。
根据PCI总线的信号传输的工作方式,同一PCI总线的主设备和从设备的总线接口驱动器的输入/输出阻抗必须保持一致。
1.2 PCI总线信号分类
PCI总线主设备:获取PCI总线主控权,能驱动地址/数据信号和控制信号,支持传统方式的读/写操作,同时也能支持突发传输,执行DMA操作,峰值数据率为132 MB/s,至少需要49根,比从设备多出的两根信号线分别是REQ#和GNT#(用来进行总线仲裁)。
PCI总线从设备:不能获取PCI总线控制权,只能被PCI主设备控制,被动接受主设备的读写操作,同时不支持DMA操作,至少需要47根信号线。
PCI总线信号描述如图2所示[3]。
PCI总线信号线的长度有要求:所有信号(除CLK信号)的最大走线长度为1 500 mil(1 mil=25.4μm),CLK信号线的长度为(2 500±100)mil。REQ#和GNT#是点到点信号,与总线信号在输入建立时间和输出有效时延上有差别。
将32 b的PCI总线,设定的最高工作频率为33 MHz时,总线上的每一个信号在时钟的上升沿到来之前,都有一定的建立时间和保持时间,在这个时间段内不允许信号跳变。一旦过了时钟的上升沿,信号的值已经被设备采样,输入信号的建立时间<7 ns,输出信号[3]满足时钟上升沿至输出有效<11 ns,PCI总线主设备发出GNT#建立时间为10 ns,REQ#建立时间为12 ns。
2 PCI总线硬件故障模式分析
2.1 PCI总线硬件控制时序模式
PCI总线数据传输的整个过程是由主设备的FRAME#,IRDY#和从设备的TRDY#这三种信号相互配合完成,PCI总线数据传输分为3个阶段:
(1)FRAME#标明了一个完整的PCI总线数据传输的开始和结束,在其有效后的第一个时钟上升沿,主设备产生地址周期,分别在控制信号上传输总线命令和在地址/数据复用线上传输地址信息;
(2)当下一个时钟的上升沿时,标志为一个或多个数据周期,主设备的IRDY#有效,同时从设备的TRDY#有效,开始数据传输,若主从设备的这两个信号无效,则PCI总线上主从设备可加入等待周期,等待主从设备产生有效的Ready信号;
(3)最后一个数据周期开始时,在时钟的上升沿,首先主设备的FRAME#处于无效状态,保持主设备的IRDY#有效,等待从设备发出TRDY#无效,一旦TRDY#无效,标志着数据传输完成,同时主设备发出IRDY#无效,整个PCI总线数据传输完成,这时PCI总线的主设备释放总线控制权。
不管是主设备的数据写入从设备,还是主设备读出从设备的数据,都离不开FRAME#,IRDY#和TRDY#三种信号的相互配合,这三种信号任意信号无响应都会造成PCI总线的无限等待或者锁死,导致其他PCI设备无法正常响应,甚至PCI总线瘫痪。
PCI总线数据传输的终止过程要有主设备和从设备的相互配合,但是数据传输完成的最后一步需要由主设备发出IRDY#无效信号后完成。但是,不是任何一个开始或者即将开始的PCI总线数据传输都能够正常完成,在PCI总线协议设计之初,就涉及到了PCI总线数据传输中止情况,分为主设备主动发出的传输终止和从设备主动发出的传输终止:
(1)主设备发出的终止情况。当主设备的GNT#无效且其主设备内部延时计数器已满,主设备强制FRAME#无效,同时产生IRDY#有效,同时从设备判定主设备提出传输中止请求,发出TRDY#有效,紧接着IRDY#无效,同时主设备IRDY#无效,满足数据传输完成的条件(FRAME#和IRDY#都无效)。或者当从设备在FRAME#信号建立后的至少5个周期还没有建立起DEVSEL#信号时,主设备将认为从设备没有能力响应或者地址有误且不能重复,而提前终止数据传输。
(2)PCI总线的某从设备处于非空闲状态或者某设备处于互斥访问的锁定状态,使得PCI从设备无法进行正常的信号响应或者由于从设备在其后来的等待时间内不能对主设备作出响应等原因,从设备向主设备发出STOP#信号以示请求终止,放弃本次PCI总线数据传输。
2.2 PCI总线容错机制实现
根据PCI总线的传输中止和正常完成的特点,为了保证整个PCI总线不被主、从设备无法正常产生信号握手响应,而导致PCI总线挂死,在FPGA内部实现一个PCI的IP_Core,PCI错误控制状态机和PCI标准接口。将FPGA作为一个带有容错机制的二级PCI⁃PCI透明桥模式控制器完成CPU与PCI设备之间的数据操作。
如图3所示,在FPGA内部实现一个开放性的PCI_IP⁃Core,它内部的信号控制是受PCI错误控制状态机监控,在PCI总线正常传输完成时,PCI总线信号不受PCI错误控制状况干预,当PCI总线的传输没有信号响应的时候,PCI错误控制状态机接管FPGA内部主从设备的PCI_Interface接口的信号,模拟主从设备,给对方发出应该响应的信号,完成PCI总线传输中止的时序控制,同时在对应的FPGA内部寄存器(处理器PCI接口寄存器、PCI设备寄存器)中记录PCI设备或者处理器的错误代码,同时产生中断,上报处理器,处理器进入中断服务程序,并根据PCI设备的重要程度和PCI设备的主从特点,将按照以下三类情况,对PCI总线传输错误进行处理。
(1)从PCI设备错误
处理器将标明ID号的PCI设备错误,通知系统控制单元,同时控制FPGA内的PCI错误控制状态机,将此PCI设备的IDSEL信号进行无效处理,并把PCI设备状态寄存器进行故障标明,提示PCI总线控制器不再访问此PCI设备,以免造成PCI总线的二次挂死。
(2)主PCI设备错误
处理器将标明ID号的PCI设备错误,通知系统控制单元,同时控制FPGA内的PCI错误控制状态机,将此PCI设备的IDSEL信号进行无效处理,同时屏蔽该设备的GNT#,REQ#,IRDY#和FRAME#信号,并把PCI设备状态寄存器进行故障标明,提示PCI总线控制器不再访问此PCI设备,以免造成PCI总线的二次挂死。
(3)PCI总线控制器错误
FPGA内的PCI错误控制状态机释放主机的PCI接口信号,同时PCI_IPCore接管PCI总线控制器的角色,完成该次PCI总线操作,同时以高优先级的中断方式通知处理器,并将处理器的PCI接口故障以离散量的方式通知PCI总线主设备,并让其暂时接管PCI总线。
FPGA内部的PCI错误控制状态机的控制流程,如图4所示。
3 PCI总线容错机制验证
基于物理的故障注入方法(硬件注入)[4]结合软件故障注入方法[5],向正在运行的PCI总线中注入故障,观察FPGA内的PCI错误控制状态的运行情况,是否能够有效地处理3类型故障,并保证整个嵌入式设备不会因为PCI总线死等或者“挂起”,避免整个嵌入式系统瘫痪。PCI总线故障注入方式和PCI总线容错机制控制的响应时间的验证关系,如表1所示。
4 结语
具有容错处理能力的PCI总线能够暂时接管总线或者恢复PCI总线的部分功能,以加速执行高吞吐量、高优先级的任务,增加了PCI总线的任务监控,发现硬件故障和隔离,发起故障恢复操作,降低了整个嵌入式设备的PCI总线规划难度和电路复杂程度,增加了嵌入式设备的可靠性。
摘要:由于PCI总线属于并行总线,在数据传输的过程中,可能出现某个PCI设备故障或者无法产生响应信号,导致整个PCI总线系统瘫痪。为了解决这一难题,采用FPGA实现PCI总线硬件故障容错技术,保证PCI总线在总线设备偶发故障或者设备无响应信号情况下,能够恢复PCI总线传输功能,并有效地屏蔽故障的PCI设备。
关键词:PCI总线,硬件故障,容错技术,数据传输
参考文献
[1]Anon.PCI local bus specification draft:revision 2.2[EB/OL].(1998-06-08)[2012-05-30].http://www.wenku.baidu.com/view/213ba0146edb6f.
[2]杨东,余松煜.PCI总线规范及其接口[J].微型机与应用,1996(8):21-24.
[3]李贵山,陈今鹏.PCI局部总线及其应用[M].西安:西安电子科技大学出版社,2003.
[4]唐志敏,董剑,吴智博,等.PCI总线故障注入器的研究与设计[J].计算机工程与设计,2012,33(1):173-179.
[5]李金锋,张展,左德承,等.Linux平台上软件实现的PCIE总线故障注入系统[J].工业控制计算机,2012,25(8):1-3.
[6]雷海鹏,刘久文.基于PCI的ARINC429总线适配器设计与驱动开发[J].测控技术,2005,24(1):43-46.
[7]樊江锋,徐连波,叶波,等.基于PCI总线的Power PC8245处理器嵌入式系统硬件的设计与实现[J].现代电子技术,2015,38(16):62-65.
[8]许永辉,孙闯,李世斌.基于PCI总线的图像目标模拟器设计与实现[J].现代电子技术,2014,37(24):105-107.
基于PCI总线的实时数据采集系统 第7篇
关键词:PCI总线,虚拟仪器,实时数据采集
PCI总线是一种高性能32/64位地址与数据线复用的局部总线, 它可以支持多种外围设备, 其设计为CPU及高速外围设备的通信提供了一座桥梁。此外, PCI总线采用线性突发的数据传输模式, 确保总线不断满载数据, 并且具有完全兼容现有PC机软硬件的能力。因此在CPU与高速缓冲存储器、高速图像处理及高速数据采集等需要高速传输信息的场合得到了广泛应用。
1 实时数据采集系统的设计
以往使用的高速A/D采样模板大多采用板内存储器、事后处理技术, 如在板上安装DRAM作为存储器, 数据传输通过内存映射方式读缓冲区, 但是实时性较差而且受到内存储空间的很大限制。在实际中, 选择美国NI公司 (National Instruments) 生产的12位基于PCI总线E系列数据采集板来完成高速动态数据的实时采集任务。它的单通道采样频率达500KS/s, 多通道采样频率可达250 KS/s, 有16个单端或8个差分模拟输入通道, 2个精度达12位的模拟输出通道, 8通道数字输入/输出, 2通道timing I/O, 支持模拟/数字触发方式。PCI总线E系列板具有支持DAQ功能的Bus-Master能力, 可以将采集板上采集的数据直接传送至计算机内存, 而与CPU并行工作, 保持了数据采集的连续性。试验中主要观察电流、电压等参量在短路前后的瞬变过程, 所以采用了精度高、响应快的霍尔电流电压传感器, 传感器与被测参量所在的主回路高度绝缘, 被测电流或电压信号感应产生的磁场通过霍尔器件转换为电压输出信号。传感器的输出信号是通过NI标准的68芯 (Pin) I/O Connector及68芯屏蔽电缆 (shielded cable) 输入PCI E Series数据采集板, 在PC机显示器上实时显示变化过程, 同时将实时采集的数据存盘 (如图1所示) 。
2 实时数据采集系统软件设计
虚拟仪器技术是当今计算机辅助测试领域的一项重要技术, 与传统的测量仪器不同, 虚拟仪器将所有程控仪器的程控信息包含在虚拟仪器的函数模块中, 在调用底层设备驱动程序的基础上, 通过组合各类函数模块, 生成软件来控制仪器, 并且充分利用计算机强大的图形用户界面 (GUI) 来实时显示采集的数据和存储数据。
2.1 实时数据采集软件的开发平台
实时数据采集软件的设计平台采用美国NI公司的Lab VIEW, 它是一种图形化的开发语言, 可用来进行数据采集和控制、数据分析和数据表达。用G语言编写一个完整的应用程序 (VI) 由仪器面板 (front panel) 和图形模块 (block diagram) 两部分组成。
2.1.1 实时数据采集系统的仪器控制面板的设计
Lab VIEW使用“所见即所得”的可视化技术建立人机界面, 针对测试和过程控制领域, Lab VIEW提供了大量的控制对象。本系统主要控制对象包括:a.Device用来控制PCI E系列数据采集板在计算机内的初始化信息;b..Channels用来监视所有定义的数据采集通道的工作情况;c.Scan Rate可以控制计算机的采样频率;d.Buffer Size可以控制存储数据缓冲区的大小;e.Write Rate可以控制被采集的数据存入数据文件中的速度;f.Inputt Limits数据采集板各个通道输入信号的最大值和最小值。因为传感器的输出信号 (differential) 为±4 V, 相应定义Input Limits为±5V;g.Waveform Chart实时显示各个通道的波形。可以实时观测试验过程中被测参量的瞬变过程;h.Button用来控制实时数据采集进程。按下STOP就停止采集过程。
2.1.2 实时数据采集系统的图形模块的设计
实时数据采集系统的图形模块采用LabVIEW独特的G语言来设计。Lab VIEW使用丰富的图标来表示功能模块, 每一个图标模块实现一个简单功能, 类似于C语言的子程序, 主程序通过调用、组合及开发子程序 (连接图标) 来实现特定的功能。软件具有结构化、可视化、逻辑化和模块化等特点, 易于建立复杂的应用程序, 且可读性强。实时数据采集系统的图形模块设计思路主框图 (如图2所示) a.Data In.VI拟将总线采集的数据存入已经存在的数据文件中或创立新文件;b.Config.VI对每个通道的模拟输入信号进行初始化。为每个通道分配一个存储数据的缓冲区;c.Start.VI根据设置的采样速率进行高速数据采集;d.Read.VI从缓冲区中读出的数据;e.Save.VI将采集的数据存入指定文件或新文件中;f.Waveform.VI将实时采集的数据实时显示;g.STOP循环控制逻辑。True时, 实时数据采集过程在FOR循环控制下不断进行;Fasle时, 数据采集过程中止;h.Clear.VI数据采集过程中止后, 释放缓冲区。
2.2 实时数据采集系统的设备驱动程序
虚拟仪器系统软件的基础是设备驱动软件。NI-DAQ驱动程序结合Lab VIEW软件平台使用G语言编程来控制实时数据采集系统中的硬件设备。驱动程序具有通用的应用编程接口 (API) , 可以通过接口将硬件设备与计算机连接, 交换数据, 并且在虚拟仪器前面板上同步显示结果 (如图3所示) 。
结束语
采用Lab VIEW和NI-DAQ编制的基于PCI总线的实时数据采集软件, 运行过程中采用编译方式运行该32位应用程序, 不但解决了其他用解释方式运行图形化程序速度较慢的问题, 而且支持多种系统平台, 可移植性强, 图形界面友好。通过试验调试和实际使用效果良好。
参考文献
[1]刘兵.微型计算机通信与接口技术[M].北京:中国水利水电出版社, 2005, 6 (1) .
[2]李贵山.PCI局部总线开发者指南[M].北京:西安电子科技大学出版社, 2001, 10.
PCI总线 第8篇
实现PCI总线协议目前主要有专用接口芯片和CPLD实现两种方式。专用接口芯片使用简单方便、工作稳定可靠,但往往具体应用中只用到部分功能,并且需要可编程逻辑配合使用,这样不仅浪费专用芯片的资源,而且也增加了电路板面积。采用Complex Programmable Logic Device(CPLD)实现突出的优点就在于其灵活的可编程性,这使得硬件电路的升级只需改进软件就可实现,大大提高了硬件平台的通用性;此外CPLD内部有丰富的逻辑资源,可将用户控制逻辑和PCI接口逻辑在同一块芯片中实现,这样不仅充分利用了逻辑资源,还能使系统设计显得更加紧凑[2]。
文中主要介绍了采用CPLD实现32 bit 33 MHz PCI从设备接口的设计方法,该从设备接口模块遵从PCI规范2.2版,实现了资源的自动配置,支持突发传输,并为用户提供了一个简单的接口。设计完成后配置到一块PCI开发板上的CPLD中,系统工作稳定、可靠,验证了该设计方法的工程可行性。
1 PCI总线协议简介
一个PCI系统中,如果某设备取得了总线控制权,就称其为主设备;而被主设备选中以进行通信的设备称为从设备或目标设备。PCI接口信号线共有100根,分为系统信号、仲裁信号、接口控制信号、地址/数据线、错误报告信号、中断信号等类型,其中作为从设备至少需要47条信号线。表1中列出了从设备接口设计必需的接口信号及说明。
一个完整的PCI总线交易过程如下:要发起数据交易的设备先置REQ#,在得到仲裁器的许可(GNT#)后,通过拉低FRAME#启动一个传输交易(TRANSACTION),并同时在AD[31:0]总线上放置地址,在CBE[3:0]总线上放置命令。PCI总线上所有的设备都对此地址译码,被选中的从设备要置DEVSEL#有效以声明自己被选中,同时对命令译码确定访问类型。在接下来的数据期中,IRDY#和TRDY#分别表示主、从设备准备好。两者同时有效,则在时钟上升沿传输数据;主从双方可以分别通过使IRDY#或TRDY#无效,在数据期中插入等待周期。数据传输结束前,主设备通过撤销FRAME#并建立IRDY#标明只剩最后一组数据要传输,并在数据传输完后放开IRDY#以释放总线控制权。从设备也可以通过有效STOP#信号来请求终止传输,从设备断开连接有RETRY、DISCONNECT和ABORT3种情况,RETRY是由于数据传输的起始字节超过16个PCI时钟周期引起的;DISCONNECT是由于在数据传输的非起始字节,从设备在8个时钟周期里不能对主设备做出反应引起的;ABORT是由于目标设备发现严重错误或者不能完成数据请求,而使STOP# 和DEVSEL#都无效来终止当前进程。传输终止后总线进入空闲状态,等待下个PCI总线交易开始。
表1中,#表示信号低电平有效,否则为高电平有效。IN表示标准的输入信号,OUT表示标准的输出驱动信号,T/S表示双向的三态输入/输出信号,S/T/S表示持续且低电平有效的三态信号,O/D表示漏极开路信号。
2 PCI从设备接口的CPLD实现
设计的32 bit 33 MHz PCI从设备接口的内部结构框图如图1所示,由结构图可以看出它主要由状态机、配置空间、译码模块、数据通道、奇偶校验和重试模块组成。PCI从设备接口实现的功能是将一个不符合PCI总线协议的设备桥接到PCI总线上,为计算机PCI总线和用户应用之间传输数据提供一个数据通道。该从设备接口为用户提供了一个简单的总线接口,特别适合PCI总线与32位SRAM或FIFO等高速存储设备的桥接。
2.1 状态机
状态机是整个PCI从设备接口设计的控制核心,它控制着PCI总线交易时序和控制信号的产生,文中结合PCI规范的要求,使用Verilog HDL语言[3]、采用One-hot编码[4]方式设计了全同步状态机,状态机由表3 所列的8个状态组成,状态机状态转移图如图2所示。
PCI目标状态机状态转移有以下几种情形:
(1)Idle→B_busy→Idle,地址译码设备未被选中,则处于B_busy总线忙状态等待总线交易结束,直到FRAME#失效当前总线交易结束才返回Idle。
(2)Idle→B_busy→Wait→Backoff→Turn_ar→Idle,设备未能在16个时钟周期内准备好第一个传输数据,超时重试(RETRY)断开连接,总线停留在Backoff等待总线撤消FRAME#,然后总线释放返回空闲态。
(3)Idle→B_busy→Wait→(R_wait)→L_data→(Backoff)→Turn_ar→Idle,从设备同时有效Ready和Term信号,表明从设备不支持突发传输或者没有更多的数据存储空间进行突发传输,只能进行最后一个数据交易。如果是读交易,则插入读等待状态R_wait。若访问为突发访问,当惟一的数据期完成以后,总线停留在Backoff状态等待主设备无效FRAME#,然后交易结束。
(4)Idle→B_busy→Wait→(R_wait)→Data→(L_data)→(Backoff)→Turn_ar→Idle,突发数据交易,读交易则插入读等待状态R_wait。若从设备提出终止,则插入L_data和Backoff状态与主设备断开连接;若是主设备提出终止则正常的结束总线交易。
在设计中,配置访问不支持突发传输,总线时序和情形(3)一致;而内存访问支持突发传输,情形(3)和(4)的时序均会出现。用户应用可以通过Ready和Term信号不同的输入组合来控制状态机的状态转移,如表4所示。但是在本设计中的顺序要么是先等待,然后正常数据交易、正常结束或者提出断开连接;要么是先等待,然后重试直接断开连接,只有这两种顺序,用户应用不能在正常数据交易期中再插入等待状态,这是不允许的。
2.2 配置空间
配置空间是容量为256 Byte并具有特定记录结构或模型的地址空间,包括头标区和设备有关区,前64 Byte是头标区,用来唯一的识别设备,并使设备能以一般的方法控制,是PCI设备必须实现的。
本模块实现了头标区所有的字段,可读可写字段中可写的位由触发器来实现,其它位和只读字段全部硬件连线接地或者接高。通过配置空间寄存器,配置软件可以确定设备的存在、功能以及资源请求。配置空间主要字段的设置及含义说明如表5所示。
2.3 译码
译码模块包括命令译码、地址译码。在总线交易的地址期,译码模块通过将 AD 信号线地址期的值与配置空间基址寄存器值相比较,确定访问是否落在本设备的地址空间范围内;或确定是否被选作配置访问的目标设备。同时对地址期C/BE信号线的值进行命令译码,确定总线访问的类型,本模块支持配置读、写和内存读、写4种PCI总线访问方式。若译码后设备被选中,则发送HIT信号通知状态机做进一步处理。
2.4 数据通道
在总线交易的地址期,数据通道锁存AD总线上的地址信号,并在IRDY#和TRDY#同时有效的时钟上升沿,将地址自动增加一个双字地址并提供给用户接口。在数据期,写交易时将AD总线上的数据写入配置空间或者用户设备,在读交易时数据通道负责将要读出的配置数据或用户设备数据锁存送到AD总线上,并产生偶校验值送给奇偶校验模块。数据通道为PCI访问配置空间和用户设备提供了一个地址和数据接口。
2.5 奇偶校验
奇偶校验主要用来确定主设备是否成功的寻址到它希望的目标设备,以及数据传输的正确与否,在总线交易中,任何设备驱动数据总线输出数据,就必须在相应的地址或者数据的下一个时钟周期驱动PAR线。设计中省去了奇偶校验值的检验电路,只实现了必须的偶校验值产生电路,计算出要输出数据和CBE的偶校验值后,在数据期的下一个总线时钟周期送给主设备检验。
2.6 重试模块
从设备接口如果承诺了一个数据交易,则必须在16个时钟周期内准备好发送和接受数据,否则超时重试。如果用户设备被选作交易的从设备,但没有准备好,无法开始起始字节的数据交易,则状态机一直处于等待状态,如果在规定的时间内用户设备仍没有有效Ready信号,该模块通知状态机超时重试,然后断开连接。
2.7 其他逻辑
该部分主要包括一个总线选择器和一个三态总线驱动器。总线选择器根据总线访问的类型,选通配置空间读数据或用户设备数据送至数据通道;三态总线驱动器对输出到用户设备的数据进行三态驱动。
3 时序仿真
文中采用Verilog HDL语言设计实现了上述模块,在Altera公司MAX+plusII10.0软件环境下,选用FLEX10K20RC208-3器件进行综合编译,占用341个逻辑单元,最高工作频率36 MHz,满足PCI总线的时序要求。图3是内存突发读访问的时序仿真波形,突发传输4个数据,在每个数据传输的下个时钟周期输出奇偶校验值,最后用户设备提出终止传输请求,最后一个数据传输完成后交易结束。图4是内存突发写访问的时序仿真波形,突发传输4个数据后,主设备插入等待周期,同时用户设备也有效Ready和Term请求终止传输,在第5个数据也是最后一个数据传输完成后,总线交易结束。这两个时序图属于传输最后一个数据并断开连接情形的两种不同情况。仿真波形的分析表明,从设备接口模块符合PCI规范的要求。
4 结束语
将一个FIFO模块连接到PCI从设备接口的用户总线组成测试平台,由FIFO的状态和控制信号提供同步的Ready和Term信号。这个测试平台在MAX+plusII下编译,并下载到PCI开发板上一片EPF10K20RC208-3芯片中,安装驱动程序后,PCI开发板正确识别、工作稳定、读、写数据准确无误;多组数据传输测试,测得数据突发传输率约可达到20 MB·s-1。
摘要:提出了一种PCI总线从设备的CPLD实现方法。该方法遵从PCI规范2.2版,实现了资源自动配置并且支持数据突发传输。试验证明该方法的有效性,其突发传输速率可达20 MB.s-1。
关键词:PCI总线,从设备接口,CPLD
参考文献
[1]李贵山,戚德虎.PCI局部总线开发者指南[M].西安:西安电子科技大学出版社,1997.
[2]曾哲昱,叶卫东.用CPLD实现PCI总线目标接口[J].测控技术,2002(1):54-58.
[3]张亮.数字电路设计与Verilog HDL[M].北京:人民邮电出版社,2000.
PCI总线 第9篇
智能化、高精度和高实时性一直是现代测控系统追求的目标。由传统电子仪器组成的测控系统往往达不到令人满意的要求,而虚拟仪器能使测试系统按要求来改变测试内容和系统结构,从根本上实现测控系统智能化。结合PCI总线和虚拟仪器技术研制的高性能虚拟仪器,能够提高系统测试的速度、精度和智能化,降低系统的构建成本,从而提高测控系统的性价比。
1 基于PCI总线虚拟仪器系统结构
1.1 硬件结构
硬件模块主要由计算机、虚拟仪器PCI硬件板卡和测控对象组成,其核心部分是PCI总线接口和虚拟仪器功能电路。PCI桥接芯片用来实现PCI总线协议;而对于不同测控对象,功能电路也不同,但是其核心部分都是对测控对象的信号进行检测和处理,从而达到测控操作的目的。PCI总线虚拟仪器硬件模块结构如图1所示。
1.2 软件结构
软件模块主要实现对采集数据的处理、分析以及波形和图象等结果的实时显示,具有传统电子仪器拥有的量程、时基、采样率调节等功能。
软件模块的结构如图2所示。应用层包括人机接口和用于实现各种数据处理的动态链接库。一般在LabView软件平台上开发基本的虚拟仪器控制面板,在Visual Studio平台上实现各种数据和信号处理函数的动态链接库程序,然后在VI程序中调用DLL函数来实现对虚拟仪器PCI板卡的操作。内核层包括硬件板卡底层总线驱动和上层功能驱动程序两部分:底层总线驱动由操作系统提供;上层功能驱动程序即为普通的硬件驱动程序,主要实现虚拟仪器硬件板卡的初始化、资源分配和中断操作等,以便提供给应用层硬件操作系统的API函数。
2 基于PCI总线DAQ板卡的研究与实现
基于DAQ(数据采集)板卡和信号调理电路的PC-DAQ测控系统,是虚拟仪器测控系统中的一个重要组成部分。
2.1 基于PCI总线DAQ卡的设计结构
基于PC-DAQ虚拟仪器测控系统,通用的构建方法是在计算机上插入DAQ卡,通过应用程序构建虚拟面板和发送通信命令。因此,基于PCI总线DAQ卡的软硬件设计是该系统的核心内容,其结构如图3所示。
2.2 硬件电路的设计
2.2.1 设计方案
针对PCI接口的方案主要有可编程逻辑器件和专用总线接口器件两种。
(1)采用可编程逻辑器件比较灵活,如ALTERA公司的CPLD器件、XINLINX公司的FPGA器件等。但是,逻辑验证和时序分析繁杂,开发周期较长。
(2)采用专用接口器件成本较低,而且具有很好的通用性,能够优化数据传输,提供配置空间,具备用于突发传输功能的片内FIFO等,能有效降低接口设计的难度,缩短开发周期。
经综合比较分析,本系统采用PLX公司专用接口芯片PCI9052来设计DAQ卡。PCI9052是PLX公司开发的低价位PCI总线目标接口芯片,低功耗,PQFP160pins封装,符合PCI V2.1规范。该芯片可方便地实现PCI总线接口的控制和时序逻辑。
2.2.2 原理图设计
硬件板卡电路原理如图4所示。其中,PCI9052用于实现PCI总线接口各种时序电路;EEPROM采用93LC46B,用于实现PCI板卡的即插即用功能;外围芯片74LS668实现地址片选;GPIB功能电路实现接口协议。
2.3 DLL软件驱动的设计
软件设计主要是硬件板卡的驱动程序和仪器虚拟化功能函数的实现。在Windows98操作系统环境下,硬件板卡有VXD、DLL和WDM三种形式的驱动程序。由于Windows98提供了能够在应用层直接操作硬件I/O空间的API函数。因此,对带有GPIB接口的DAQ卡驱动软件,就可通过直接操作硬件I/O空间的DLL来实现。
2.3.1 DLL的内在工作机制
DLL包含一个导出函数表,对需要导出的函数,在定义时作如下类似声明:
extrn“C”_declspec(dllexport) int
FunctionName(int n)
另外,编译工作中还必须为连接器指定导入库,而且客户程序必须至少调用一个DLL的导出函数。
在创建DLL时,通常使用VC++6.0进行开发。在DL上的开发过程中,需要定义一个C语言文件(必须)、一个自定义的头文件(可选,在应用程序中调用)及一个模块定义文件(可选,在-stdcall方式调用时可能需要)。
2.3.2 Windows98下操作硬件的API函数
Windows98操作系统提供了6个API函数用于硬件I/O空间字节、字和双字的读写。3个端口读函数原型和说明如下(括号内参数为16位I/O读地址)。
(1)读字节:int_inp(unsigned short port);
(2)读字:unsigned short-inpw(unsigned shortport);
(3)读双字:unsigned long-inpd unsigned short port)。
3 个端口写函数原型和说明如下。
(1)写字节:int_outp(unsigned short port,int databyte);
(2)写字:unsigned short-outpw(unsigned short port,unsigned short dataword);
(3)写双字:int_oupt(unsigned long_outpd,unsigned long dataword)。
在上述3个写函数中,第1个参数为需要写入数据的16位I/O地址,第2个参数为需要写入的数据。
3 PCI总线DAQ卡在示波器测控系统的应用
本测控系统主要是实现对TDS220数字示波器的程控操作。在工业现场使用示波器进行信号测量,当受实际情况限制而无法处理时,可通过GPIB总线接口,将数字示波器和位于PC机的通信接口卡相连,把数据传输到计算机,然后再在应用层使用图形化编程软件LabView构建示波器的虚拟控制面板,通过对测试现场示波器的程控操作,在计算机的虚拟示波器面板上显示实际的测量结果,并对实际的数据进行分析、存储等处理,实现示波器的虚拟化操作。示波器测控系统的结构框图如图5所示。
实际应用时,对TDS220进行程控操作最基本的几个程控命令如下。
(1)初始化硬件:IBFTND(GPIB总线地址,0,3 000);
(2)初始化示波器:IBDEV(仪器地址);
(3)发送命令至示波器:IBWRT(仪器地址,控制命令);
(4)接收数据(字符串形式):IBRD(仪器地址,缓冲区地址,接收数据个数);
(5)接收数据(数组形式):IBRDI(仪器地址,缓冲区地址,读出数据字节数);
(6)仪器返回本地:IBGTL(仪器地址)。
实验时,示波器测控系统硬件部分主要是一块自主研制的基于PCI总线的GPIB接口板卡,用于实现示波器数据的采集;软件部分是驱动GPIB板卡的DLL功能驱动程序,用于实现发送命令和数据采集的软件控制。实验结果表明,PCI总线DAQ卡的精度和实时性技术指标均达到设计要求,满足应用需要。
摘要:介绍基于PCI总线虚拟仪器系统的软硬件结构,对PCI总线接口协议以及Windows设备驱动程序等关键技术进行深入研究。设计开发基于PCI总线的高速DAQ卡,并应用在TDS220虚拟示波器测控系统中。实验结果表明,PCI总线DAQ卡的精度和实时性均达到了设计要求,满足应用需要。
PCI总线 第10篇
随着视频技术以及大规模集成电路的飞速发展,视频监控系统的应用越来越广泛。作为其核心,视频采集技术也日趋成熟。目前,大多数采集卡都采用了视频局部总线,可以将图像数据直接采入内存,采集卡不再需要专门的帧存储体。其中基于PCI总线的视频采集卡以其强大而灵活的功能和价格而成为目前市场上的主流产品[1,5]。
本文研究一个支持四路标准视频信号输入,采集的像素阵列为720576每秒钟采集25帧8位黑白图像的高速图像采集卡。该数据采集卡能够多路同步显示,减少了所要了解对象的盲区,同时能够监测运动物体。对此现在国外的技术比较成熟,但价格均昂贵,而国内研究比较少[5]。因此,本文对其进行研究,具有较高的应用价值。
2 基于PCI总线图像采集卡的总体方案
本文设计的图像采集卡系统原理如图1所示。整个系统中,FPGA是中心控制器件,它协调各个部分的时序和工作[4]。系统上电后,它负责图像采集模块的初始化,数据缓冲模块的数据写入,PCI系接口的状态转换和数据传输。基于FPGA技术的采样控制器要产生众多的控制信号,可以分成三个模块:图像数据采集控制(I2C总线)、FIFO读写控制器、与PCI接口通信模块。
本图像采集卡设计中关键技术有:
(1)四路CCD摄象机的同步控制设计中摒弃了选用视频分配放大器MAX4137,以一个CCD视频输出信号为基准源,经过同步电路分配放大后,作为其余CCD摄象机的外同步信号的硬件实现控制方案,采用现有的现场可编程门阵列(FPGA)进行同步的逻辑控制。
(2)标准视频信号采集模块的设计
采用视频解码芯片SAA7111,对摄像头输出的标准模拟视频信号进行采集,输出数字视频信号、分离后的同步信号以及采样时钟。视频解码芯片的初始化通过FPGA模拟I2C总线来实现,摒弃了通过单片机或DSP的I/O端口模拟I2C总线的时序的硬件方案。
(3)数据缓冲与传输控制逻辑的实现
解码芯片输出的数字视频信号传输速度快、数据量大,同步传输会大量占用计算机的资源,因此有必要对数据进行缓冲。这里采用容量为163849bit的型号为IDT7206的FIFO,同时,采用可编程逻辑器件进行图像传输的逻辑控制,保证了图像数据的顺序性。
(4)基于PCI接口数据交换模块的设计
数据缓冲器中的数字视频信号需要及时传输到计算机内存,并完成动态显示。这里选用PCI专用芯片组(PCI9052),通过专用芯片来实现完整的PCI主控模块和目标模块的功能,将复杂的PCI总线接口转换为相对简单的用户接口。
下面介绍系统的工作流程
(1)系统上电,PCI接口芯片的复位,同时也复位视频解码器和FIFO;
(2)控制器初始化视频解码器;
(3)视频信号经过视频解码器后形成YUV格式的量化的数字信号,其高8位为亮度信号,并产生行、场同步信号;
(4)控制器同时接到PCI的准备命令,根据来自视频解码器的同步信号,并产生FIFO的写信号,将有效的亮度信号存入FIFO;
(5)PCI总线开始读取数据,并把数据送往PC机。
3 基于PCI总线图像采集卡的硬件设计
3.1 数据采集模块的设计
视频采集处理芯片是SAA7111[2],它是Philips公司生产的可编程数字图像解码芯片,可将模拟视频信号实时转化为数字图像,其内部包含两路模拟处理通道,能实现视频信号源的选择、抗混叠滤波、模数转换、自动嵌位、自动增益控制、时钟产生、多制式解码及亮度、对比度和饱和度控制,它的结构示意图如图2。
SAA7111的管脚可分为四类:芯片初始化(I2C)管脚、图像模拟信号输入管脚、图像数字信号输出管脚、同步信号输出管脚。
从SAA7111的四个模拟输入端AI11,AI12,AI21和AI22输入的模拟视频信号,经模拟处理后,一路通过缓冲器从模拟输出端(AOUT)输出用于监视,另一路经A/D转换后产生数字亮度信号和色度信号,分别进行亮度信号处理和色度处理[3]。亮度信号处理的结果分两路,一路送到色度信号处理模块,进行综合处理,产生Y和UV信号,经格式化处理后从VPO(16位)端口输出;另一路送入同步分离器,经数字PLL产生相应的行和场同步信号HS和VS同时PLL驱动时钟发生器,产生与HS锁定的时钟信号LLC和LLC2。对芯片功能的控制是通过I2C总线输入控制参数完成的。
IICSA管脚是SAA7111初始化的读写控制位,把它接地(IICSA=0)表示SAA7111的地址是48H。这里采用FPGA虚拟I2C总线来初始化SAA7111。
为了控制图像有序的进行采集,需要充分利用视频信号中的同步信号,用其来做数据存储的控制信号。模拟视频信号每扫描一行或对一帧进行扫描完一次后,都会产生延迟,这时是没有有效数据输出的,只有在行参考信号HREF、场参考信号VREF同时有效时,VP0-VP8才有效。RTS0标示了输出的数据属于奇数场或偶数场,当RTS0为高电平输出为奇数场,低电平时为偶数场,RTS0由0变为1表示一帧图像的开头。由于输出数据的格式设置为YUV422的,因此输出数据与LLC2同步,所以可以利用FPGA的逻辑控制电路,RTS0作为高电平有效开关,HREF和VREF一同作为与非门输入,经过开关,作为LLC2输入的使能输入,LLC2输出作为工作同步时钟接到。同时LLC作为FIFO的读工作时钟,也应利用FPGA的逻辑电路。
3.2 数据传输及逻辑控制模块的设计
实现数据缓冲及传输的电路设计局部总线接口逻辑较为复杂,主要是涉及到读取数据的时序匹配问题和先入先出存储器满或空后的电路控制。
局部数据总线与先入先出存储器IDT7206的数据输出端口(Q0-Q7)相连。局部总线使用总线时钟作为工作时钟,同时,先入先出存储器使用LLC作为读取操作同步时钟接到R。局部总线控制信号RD#用作先入先出存储器R的时钟开关,控制FIFO的数据读出,当局部总线读取数据时,RD#信号有效,使先入先出存储器在LLC时钟上升沿从缓冲队列中取出数据写入输出缓冲寄存器。当RD#信号有效后,数据被依次读出,每经过一次时钟上升沿,先入先出存储器缓冲队列中向外读出一个数据(8位)。当最后一个数据读出同时,先入先出存储器从缓冲队列取出一个数据放入输出缓冲器,保存到下一次局部总线读操作时,在数据读取过程中小会发生数据丢失现象。
设计中采用SAA7111输出的13.5MHz时钟信号作为FIFO的写时钟。当中断产生时,由于PCI局部总线采用33MHz的时钟,可以保证读操作的速度大于写操作,从而不会发生写指针覆盖读指针的情况。
当先入先出存储器缓冲队列满时,将无法向其输入数据,这就意味着将丢失部分图像数据,在这种情况下,有两种解决方案,一种是利用IDT7206的FF#信号引发中断,在中断处理程序中,用软件方式使PCI9052的局部总线初始化信号(LRESET#)有效,将此信号输入到IDT7206的RS#引脚,使先入先出存储器缓冲队列清空,然后在进入又一轮的数据输入。
当先入先出存储器缓冲对列空时,局部总线上无法获取有效数据,必须暂停局部总线上的读操作,插入相应的等待时间。将EF#信号反向接入PCI9052的LRDYi#引脚可以达到这个目的。当LRDYi#引脚功能有效,在局部总线数据读写时,只有等到LRDYi#上信号输入为有效时,操作才可结束。这样,只要EF#信号持续有效,即先入先出存储器缓冲对列为空时,当前的读操作就继续被保持,直到EF#信号无效。示意图如图3所示。
3.3 基于FPGA逻辑控制的电路设计
FPGA是逻辑控制中心,它模拟I2C总线初始化SAA7111,控制信号的采集,控制信号的缓冲,并控制数据的传输,起着极其重要的作用。其连接电路示意图如图3所示。以及它们的相互连接关系如图4。这里采用的是并行主模式来配置FPGA(XCS30)通过JTAG下载线,把程序载入EPROM中。在ISE环境下,采用VHDL语言编写程序[4]。
3.4 PCI接口模块的设计
PCI9052接口按功能特点可分为四组:PCI总线接口信号组、局部总线接口信号组、ISA总线接口信号组和EEPROM接口信号组。其中ISA总线信号组设计中未使用,下面简要介绍其它三组信号连接的设计[5]。
(1)PCI总线接口信号组:PCI9052是PCI从设备接口芯片,所以它没有提供总裁信号REQ#和GNT#,其他的信号是完备的,可直接将这些PCI接口信号与PCI总线相连,不需要额外的驱动电路。
(2)局部总线接口信号组:为了使PCI9052的局部总线端能适应不同速度的外设需要,局部总线端信号时序可通过内部寄存器编程设置。这里把BCLKo通过74LS00与LCLK相连,使局部总线的时钟为33MHz。
(3)EEPROM接口信号组:与PCI9052兼容的串行EEPROM芯片为NM93CS46,这里PCI9052与NM93CS46的总线信号直接相连。这样,当PCI9052上电,自动读取EEPROM中的数据初始化其内部寄存器部分内容。
PCI9052为PCI总线提供了非常简单的接口,PCI连接器和PCI9052相关引脚的连接关系中,只需将PCI9052上的PCI总线接口引脚与PCI总线连接器上的同名引脚相连接。
在上电时,PCI总线的RST#信号有效,同时,PCI 9052输出局部复位信号LRESET#,并且检查EEPROM是否存在,若存在则PCI9052根据EEPROM内容设置内部寄存器,否则设为缺省值,PCI配置寄存器只能通过EEPROM或PCI主机CPU进行设置,因此有必要对寄存器进行说明。
PCI9052内部的寄存器组主要分为两部分:PCI配置寄存器组和局部总线配置寄存器组。PCI配置寄存器组提供了对PCI总线配置空间头标区的支持,格式与配置空间完全兼容。在PCI配置寄存器中设各识别字段,供应商代码字段,分类代码字段、Subsystem ID字段、Subsystem Vendor ID字段和中断引脚字段可在PCI9052初始化时根据串行EEPROM中的相应数据赋予初值。
局部总线配置寄存器组的访问要借助PCI配置寄存器组中的PCI基址寄存器提供地址映射来完成。PCI基址寄存器的第一个双字基地址在内存空间上提供了对局部总线配置寄存器组的地址映射,此基地址寄存器位0通过硬件方式连接低电平,PCI总线检测配置空间时自动为此基址寄存器分配内存映射基地址,通过这个基地址加上偏移地址就可访问局部总线配置寄存器组中的任意寄存器。PCI基址寄存器的第二个双字基地址在I/O空间上提供了对局部总线配置寄存器组的地址映射,此基地址寄存器位0通过硬件方式连接高电平,PCI总线检测配置空间时自动为此基地址寄存器分配I/O映射基地址,同样,通过这个基地址加上偏移地址可访问局部总线配置寄存器组。串行EEPROM在芯片上电时可初始化局部总线配置寄存器中所有内容。
4 基于PCI总线图像采集卡的软件设计
4.1 虚拟I2C总线初始化图像采集模块
SAA7111内部有32个寄存器(Subaddress 00H~1FH),其中02H~12H是可读写寄存器,其中2H~05H是模拟输入控制寄存器,02H用于设置模拟视频信号输入方式,03H~05H用于设置增益控制方式,06H~12H主要用于设置解码方式,通过配置这些寄存器可以设置行同步信号的开始和结束位置,并可确定亮度、色度、饱和度的大小以及输出图像数据信号的格式。需要注意的是,在读00H寄存器前,必须将它初始化为0。在对多个连续的寄存器进行操作时,寄存器地址有自动加1功能。
硬件连接中IICS是SAA7111的读写控制位,IICSA=0表示SAA7111的写地址为48H。这里把SAA7111初始化设定为:一路模拟视频信号输入(AI12),自动增益控制,625行50Hz PAL制式,YUV 422 16位数字视频信号输出,设置默认的图像对比度、亮度及饱和度。相应的寄存器初始化值按要求进行设置。
编程采用的语言是Verilog HDL。首先必须根据I2C总线的原理写出启动、结束、发送应答信号及读、写一个字节的程序,然后根据SAA7111的寄存器操作格式写出读、写寄存器的程序,最后根据以上子程序写出初始化SAA7111的程序段。SAA7111的初始化流程如图5所示。
4.2 PCI总线图像采集卡驱动程序的设计
系统在Windows2000环境下开发了VXD驱动程序,当应用程序端需要图像信息时,应用程序通过调用Device IO2Control函数向VXD发送W32-DEVI2CEIOCONTROL消息,而引发VXD调用On W32Device IOControl消息映射函数,在此函数中,首先设置PCI9052内部控制寄存器的Soft Reset位,引发LRESET信号使FIFO寄存器清空[6]。VXD在系统地址空间申请图像缓冲区,数据通过PCI9052读出,存在已申请的缓冲区中,然后借助WIN32 Queue User Apc调用接口调用在应用程序中已申请的回调函数,图像缓冲区地址作为传递参数,应用程序端就可以在回调函数中显示图像了。当PCI总线繁忙,FIFO存储器中的数据来不及读出,FIFO存储器产生FF#信号引发中断,在中断处理函数中清空FIFO存储器,即可使系统复位。
由于PCI9052需借助串行EEPROM中的数据初始化内部寄存器,所以在正式编写设各驱动程序之前,要在串行EEPROM芯片中写入初始化数据,通过对PCI9052局部配置寄存器组中的控制寄存器(CNTRL[29:24])中相应功能位的操作可完成数据写入。对局部配置寄存器组的访问映射到了PCI基址寄存器组中的前两个基址地址,所以要访问局部配置寄存器组必须首先访问PCI配置空间。系统提供了两个地址为OCF811和OCFCH的32位I/O端口寄存器来访问PCI设备的配置寄存器,其中一个为配置地址端口(CONFIG_ADDRESS,I/O地址为0CFBH~0CFBH),另一个为配置数据段口(C O N F I G_D A T A,I/O地址为0CFCH~0CFFH)。
5 实验分析
图象的数据量非常大,因此PCI接口采用的是突发模式进行数据传输,必需对其进行仿真实验。在实验中,假设传送的数据是256个字节。根据设计,结合PCI接口的读状态转换仿真,设置突发方式传输数据,由满信号触发传输开始中断。开始往FIFO写数据仿真。通过仿真可知,由于FIFO的满信号未触发中断,所以PCI接口的数据线处于高阻状态。当FIFO给出满信号时,PCI接口开始传输数据。当一次传送结束时,PCI接口的数据线再次进入高阻状态,等待下一次的FIFO满信号触发。由于设置的PCI读时钟大于FIFO的写时钟,所以一次读完毕后,总会有一段高阻状态。
由仿真可知,在FPGA的控制下,PCI接口能够顺利的进行读写状态的转换,PCI顺利利的从FIFO中读取数据,实现数据的传输。
6 结束语
采集的数据中,一帧图像是576720个象素,动态约为30帧,取得是黑白灰度图像,所以一个象素8bite,四路所需传送速率总共约为48MB/S。PCI总线的工作频率为33MHz,数据宽度为32位,故其理论数据传输率应为132MB/S。根据前人的经验,数据总体传输率小于PCI最大理论数据传输率,但是所需要的数据传输率48MB/S比132MB/S小很多,所以此方案是可行的,能实现四路实时传输显示。
摘要:本文在设计了一种基于PCI总线的多路同步图像采集卡,该视频采集卡以FPGA为逻辑控制中心,采用SAA7111将四路视频信号分别转换为数字图像数据,经FIFO缓存后,由PCI总线接口芯片PCI9052将数据送入计算机,最后通过应用程序将图像显示出来。
关键词:PCI总线,视频采集卡,驱动程序,FPGA
参考文献
[1]金明等.FIFO芯片在高速系统中的应用[J].电子技术应用.1998:61-62
[2]张军,李含善.可编程视频信号输入处理器SAA7111[J].国外电子元器件.2002(8):39-40
[3]肖儿良,纪爽,卢子峰,吴常泳.可编程视频输入处理芯片SAA7111及其在图象多媒体中的应用[J].电子技术应用.1999(4):71-73
[4]刘虹,黄涛.基于FPGA的高速图像采集卡系统的研究与实现[J].工业控制计算机.2004,17(8):18-19
[5]孙康明,袁祥辉.PCI9052在图像采集系统中的应用[J].仪器仪表学报。2002,25(4):555
PCI总线范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。