当前位置:首页 → 计算机类 → 软件水平考试 → 中级嵌入式系统设计师->阅读以下关于数据采集与处理系统说明,回答下列问题。[说明]某
阅读以下关于数据采集与处理系统说明,回答下列问题。
[说明] 某公司承接了一个数据采集与处理系统项目,由刘工负责系统方案设计,刘工设计方案如图1所示。该方案是基于PCI总线多功能处理系统,PCI设备1是以太网,PCI设备2用于数据采集,PCI设备3、PCI设备4用于和该系统中其他处理模块进行互联,LEGACY设备1、LEGACY设备2用于处理系统中一些慢速设备。

1、在以下描述PCI总线基本概念中,正确表述有______、______、______、______、______、______。 A.PCI总线是一个与处理器有关高速外围总线 B.PCI总线基本传输机制是猝发式传送 C.PCI设备一定是主设备 D.PCI物理地址与其他总线一样,是由内存地址空间和I/O地址组成 E.PCI设备地址译码不能对配置空间直接寻址 F.PCI设备识别主要是对开发商代码和设备代码进行识别 G.访问配置空间时,PCI桥应提供IDSEL信号以选择PCI设备 H.系统中只允许有一条PCI总线 I.PCI总线是高速串行总线 J.PCI总线有3种桥,即HOST/PCI桥,PCI/PCI桥,PCI/LEGACY桥 K.PCI桥是可以把一条总线地址空间映射到另一条总线地址空间
2、PCI设备2和主CPU之间采用双口RAM方式交换数据,双口RAM是常见共享式多端口存储器,其最大特点是存储数据共享。它允许两个独立CPU或控制器同时异步访问存储单元。既然数据共享,就必须存在访问仲裁控制,否则就会出现错误或冲突。内部仲裁逻辑控制提供以下功能:对同一地址单元访问时序控制;存储单元数据块访问权限分配;信令交换逻辑(例如中断信号)等。 两个端口对同一内存操作有4种情况: A.两个端口同时对同一地址单元读出数据; B.两个端口同时对同一地址单元写入数据; C.两个端口不同时对同一地址单元存取数据; D.两个端口同时对同一地址单元,一个写入数据,另一个读出数据。 在上述情况下,两个端口存取不会出现错误是______和______,会出现写入错误是______,会出现读出错误是______。
3、PCI设备2和主CPU之间通过双端口存储器进行数据交换。刘工设计了环形队列实现方式。设备2向环形队列写入数据,主CPU从环形队列读取数据。环形队列是一个首尾相连FIFO数据结构,采用数组存储,到达尾部时将转回到0位置,该转回是通过取模操作来实现。因此环形队列逻辑上是将数组元素q[0]与q[MAX-1]连接,形成一个存放队列环形空间。
为了方便读写,还要用数组下标来指明队列读写位置,其中head指向可以读位置,tail指向可以写位置,环形队列如图2所示。

使用环形队列时需要判断队列为空还是为满。当tail追上head时,队列为满,当head追上tail时,队列为空。
通常判断环形队列为空/为满有两种判断方法。
(1)附加一个标志位tag,当head赶上tail,队列空,则令tag=0,当tail赶上head,队列满,则令tag=1;
(2)限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素空间。队列空:head==tai;队列满:(tail+1)%MAXN==head。 如果采用第一种方法(即附加标志实现算法),则环形队列结构定义如下: typedef struct ringg { int head; /*头部,出队列方向*/ int tail; /*尾部,入队列方向*/ int tag; int size; /*队列总尺寸*/ int space[RINGQ_MAX]; /*队列空间*/ }RINGQ; RINGQ p, *q; q=&p; 初始化环形队列C语言代码为: q->head=q->tail=q->tag=0; q->size=RINGQ_MAX; 判断队列为空C语言代码为______。 判断队列为满C语言代码为______。 入队操作时,如果队列不满,则入队后更新尾指针C语言代码为q->tail=______。出队操作时,如果队列不空,则出队后更新头指针C语言代码为q->head=______。如果采用第二种方法,还采用上述数据结构,初始化环形队列C语言代码为: q->head=q->tail=0; q->size=RINGQ_MAX; 判断队列为空C语言代码为______。 判断队列为满C语言代码为______。 入队操作时,如果队列不满,则入队后更新尾指针C语言代码为q->tail=______。 出队操作时,如果队列不空,则出队后更新头指针C语言代码为q->head=______。
1、B、E、F、G、J、K
2、A C B D
3、(q->head==q->tail)&&(q->tag=0) ((q->head=q->tail)&&(q->tag==1)) (q->tail+1)%q->size (q->head+1)%q->size (q->head==q->tail) (q->head==(q->tail+1)%q->size)) (q->tail+1)%q->size (q->head+1)%q->size
1、本题考查嵌入式系统中计算机总线、存储、环形队列等相关知识。 该方案是基于PCI总线多功能处理系统。PCI(Peripheral Component Interconnect)总线是一种高性能局部总线,是为了满足外设间以及外设与主机间高速数据传输而提出来。
在数字图形、图像和语音处理,以及高速实时数据采集与处理等对数据传输率要求较高应用中,采用PCI总线来进行数据传输,可以解决原有标准总线数据传输率低带来瓶颈问题。
PCI总线是一种树型结构,并且独立于CPU,可以和CPU并行操作。PCI总线上可以挂接PCI设备和PCI桥片,一个PCI设备可以既是主设备也是从设备,但是在同一个时刻,这个PCI设备或者为主设备或者为从设备。在PCI总线中有3类设备,PCI主设备、PCI从设备和桥设备。其中PCI从设备只能被动地接收来自HOST主桥,或者其他PCI设备读写请求;而PCI主设备可以通过总线仲裁获得PCI总线使用权,主动地向其他PCI设备或者主存储器发起存储器读写请求。
而桥设备主要作用是管理下游PCI总线,并转发上下游总线之间总线事务。PCI总线有3种桥,即HOST/PCI桥、PCI/PCI桥和PCI/LEGACY桥。 PCI总线地址总线与数据总线是分时复用。这样做好处是,一方面可以节省接插件管脚数,另一方面便于实现猝发数据传输。
在做数据传输时,由一个PCI设备做发起者(主控,Initiator或Master),而另一个PCI设备做目标(从设备,Target或Slave)。总线上所有时序产生与控制,都由Master来发起。PCI总线在同一时刻只能供一对设备完成传输,这就要求有一个仲裁机构(Arbiter),来决定谁有权力拿到总线主控权。
PCI总线有如下显著特点:
(1)高速性,PCI局部总线以33MHz时钟频率操作,采用32位数据总线,数据传输速率可高达132MB/s,远超过以往各种总线。而早在1995年6月推出PCI总线规范2.1已定义了64位、66MHzPCI总线标准。因此PCI总线完全可为未来计算机提供更高数据传送率。另外,PCI总线主设备(Master)可与计算机内存直接交换数据,而不必经过计算机CPU中转,也提高了数据传送效率。
(2)即插即用性,PCI设备识别主要是对开发商代码和设备代码进行识别,PCI设备硬件资源,则是由计算机根据其各自要求统一分配,绝不会有任何冲突问题。作为PCI板卡设计者,不必关心计算机哪些资源可用,哪些资源不可用,也不必关心板卡之间是否会有冲突。
(3)可靠性,PCI独立于处理器结构,形成一种独特中间缓冲器设计方式,将中央处理器子系统与外围设备分开。这样用户可以随意增添外围设备,以扩充计算机系统而不必担心在不同时钟频率下会导致性能下降。PCI总线增加了奇偶校验错(PERR)、系统错(SERR)、从设备结束(STOP)等控制信号及超时处理等可靠性措施,使数据传输可靠性大为增加。
(4)复杂性,PCI总线强大功能大大增加了硬件设计和软件开发实现难度。硬件上要采用大容量、高速度CPLD或FPGA芯片来实现PCI总线复杂功能。软件上则要根据所用操作系统,用软件工具编制支持即插即用功能设备驱动程序。
(5)自动配置,PCI总线规范规定PCI设备可以自动配置。PCI定义了3种地址空间:存储器空间、输入/输出空间和配置空间,每个PCI设备中都有256字节配置空间用来存放自动配置信息,在系统初始化时,通过idsel引脚片选决定PCI设备,自动根据读到有关设备信息,结合系统实际情况为设备分配存储地址、中断和某些定时信息。
(6)共享中断,PCI总线是采用低电平有效方式,多个中断可以共享一条中断线。
(7)扩展性好,如果需要把许多设备连接到PCI总线上,而总线驱动能力不足时,可以采用多级PCI总线,这些总线上均可以并发工作,每个总线上均可挂接若干设备。因此PCI总线结构扩展性是非常好。
(8)多路复用,在PCI总线中为了优化设计采用了地址线和数据线共用一组物理线路,即多路复用。PCI接插件尺寸小,又采用了多路复用技术,减少了元件和管脚个数,提高了效率。
(9)严格规范,PCI总线对协议、时序、电气性能、机械性能等指标都有严格规定,保证了PCI可靠性和兼容性。由于PCI总线规范十分复杂,其接口实现就有较高技术难度。
2、双口RAM是在一个存储器上具有两套完全独立数据线、地址线和读写控制线,并允许两个独立系统同时对该存储器进行随机性访问。每个读写口都有一套自己地址寄存器和译码电路,可以并行地独立工作。
两个读写口可以按各自接收地址同时读出或写入,或一个写入而另一个读出。与两个独立存储器不同,两个读写口访存空间相同,可以访问同一个存储单元。通常使双端口存储器一个读写口面向CPU,另一个读写口则面向外设或输入/输出处理机。如图3所示。

双口RAM最大特点是存储数据共享。
一个存储器配备两套独立地址、数据和控制线,允许两个独立CPU或控制器同时异步地访问存储单元。因为数据共享,就必须存在访问仲裁控制。当两个端口对同一内存操作时,当两个端口同时对同一地址单元读出数据,或者两个端口不同时对同一地址单元存取数据情况下,两个端口存取不会出现错误;当两个端口同时对同一地址单元写入数据情况下,会出现写入错误;当两个端口同时对同一地址单元,一个写入数据,另一个读出数据情况下,会出现读出错误。
3、环形队列是在实际编程极为有用数据结构,它有如下特点:它是一个首尾相连FIFO数据结构,采用数组线性空间;数据组织简单,能很快知道队列是否满或空;能以很快速度来存取数据。因为简单高效,甚至在硬件都实现了环形队列。
内存上没有环形结构,因此环形队列实际上是数组线性空间来实现。那当数据到了尾部如何处理呢?它将转回到0位置来处理。这个转回是通过数组下标索引取模操作(Index% MAXN)来实现。 因此环列队列是逻辑上将数组元素q[0]与q[MAXN-1]连接,形成一个存放队列环形空间。为了方便读写,还要用数组下标来指明队列读写位置。定义Head/tail两个变量,其中head指向可以读位置,tail指向可以写位置。 环形队列关键是判断队列为空,还是为满。
当tail追上head时,队列为满;当head追上tail时,队列为空。但如何知道谁追上谁,还需要一些辅助手段来判断。 如何判断环形队列为空、为满有两种判断方法。
一是附加一个标志位tag,当head赶上tail,队列空,则令tag=0,当tail赶上head,队列满,则令tag=1;
二是限制tail赶上head,即队尾结点与队首结点之间至少留有一个元素空间。队列空时head==tail,队列满时(tail+1)%MAXN=head。
入队操作时,如队列不满,则写入q->tail=(q->tail+1)%q->size;出队操作时,如果队列不空,则从head处读出。下一个可读位置在q->head=(q->head+1)%q->size。









