一种PCI总线仲裁器的设计与实现

发布者:iota19最新更新时间:2012-09-12 来源: 自动化在线 关键字:PCI总线  仲裁器  优先级 手机看文章 扫描二维码
随时随地手机看文章

随着VLSI/ULSI技术的发展,可编程逻辑器件EPLD/FPGA越来越受到人们的青睐,由于它具有集成度高、速度快、开发周期短、费用低、用户可定义功能及可重复编程和擦写等许多优点,其应用领域不断扩大。这些器件的灵活性和通用性使得它们已成为研制和开发复杂数字系统的理想选择。

在PCI总线技术规范的基础上,采用EPLD实现了高速PCI总线背板中多主控设备的总线仲裁。

1 PCI总线的仲裁机制

PCI总线仲裁是基于访问而不是基于时间片,也就是说,对于一个PCI总线主设备,必须为它在总线上进行的每次访问提出仲裁要求。PCI总线上采用的是并行仲裁(也叫独立请求仲裁)方案,其仲裁机制如图1所示。在这种仲裁中,每个主控器各有自己独立的总线请求线_REQ 和总线允许线_GNT 与总线仲裁器相连,相互间没有任何控制关系。PCI总线的仲裁是“隐含的”,就是说一次仲裁可以在前一次总线访问期间完成,这样就使得仲裁的具体实现不必占用PCI总线周期。当然在总线空闲时除外。

当PCI总线进行操作时,发起者(Master)先置REQ#,当得到仲裁器(Arbiter)的许可时(GNT#),会将FRAME#置低,并在AD总线上放置Slave地址,同时C/BE#放置命令信号,说明接下来的传输类型。所有PCI总线上设备都需对此地址译码,被选中的设备要置DEVSEL#以声明自己被选中。然后当IRDY#与TRDY#都置低时,可以传输数据。当MaSTer数据传输结束前,将FRAME#置高以标明只剩最后一组数据要传输,并在传完数据后放开IRDY#以释放总线控制权。

在实际的PCI总线仲裁电路中,与仲裁直接有关的控制线除_REQ和_GNT外,还有_FRAME、_IRDY。此外,为了保证总线交换的同步,还应有一根总线时钟信号PCIclk和一根总线复位信号_PCIrst,如图1虚线所示。

2 总线的缺省占用

总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。

当总线空闲(其他器件都以高阻态形式连接在总线上)且一个器件要与目的器件通信时,发起通信的器件驱动总线,发出地址和数据。其他以高阻态形式连接在总线上的器件如果收到(或能够收到)与自己相符的地址信息后,即接收总线上的数据。发送器件完成通信,将总线让出(输出变为高阻态)。

所谓总线的缺省占用,就是指在当前没有设备使用总线或请求总线的情况下,允许仲裁器根据一定的方式选定一个设备作为总线缺省的拥有者,并向它发出_GNT信号。选择的方式有多种,如可为某一固定设备,也可为最后一次使用总线的设备,当然也可以指定自己(仲裁器本身)为总线缺省的拥有者。

当仲裁器将某一设备确定为总线的缺省拥有者时该设备可以不通过发_REQ信号就开始一次总线操作(只要总线空闲且_GNT信号有效)。如果该设备需要做多次的数据传输,它就应当发出_REQ信号,以便向仲裁器提出多次操作的请求;而如果该设备只要求做一次总线操作,它就不应当发出_REQ信号,否则仲裁器可能在它不需要使用总线的情况下又给它发出_GNT信号。

3 仲裁信号协定

综上所述, PCI总线的仲裁主要是通过_REQ和_GNT两个信号来实现的。前者用于某一设备要求占用总线的请求,后者用于允许某一设备占用总线的应答。只有总线仲裁器才可以指定谁是总线缺省的拥有者。

当仲裁器允许某一设备使用总线时,就向该设备发出_GNT信号;相反,当仲裁器不再允许某一设备拥有总线控制权时,可以在任意时钟撤消该设备的_GNT信号。如果_GNT信号无效,这次操作就不可以进行。

PCI总线的仲裁信号之间必须遵循一定的协定,具体描述如下:

· 若总线不是处于空闲状态,有可能一个_GNT的撤消碰巧是另一个_GNT发出的同时,但如果是在空闲状态,则要求一个_GNT撤消到下一个_GNT的发出之间必须有一个时钟周期。否则可能会在AD线和PAR线上出现冲突;

· 当_FRAME无信号时,_GNT可以在任意时间撤消,以便服务于另一个主设备,或者作为对相应的_REQ撤消的响应;

· _GNT信号的每次发出,只限于相应的总线主控器可以使用总线进行一次总线操作。若该主控器还想做多次总线访问时,可以保持它的_REQ信号一直有效。此时,如果没有其它请求,或者当前的主控器具有最高优先权,仲裁器就会继续批准总线给当前主控器;

·一个主控器可以在任意时刻撤消其_REQ信号,但要注意,_REQ信号一旦撤消,仲裁器将认为该设备不再请求使用总线,因而撤消其_GNT信号。若一个主控器只希望做一次总线传输,它应当在发出_FRAME的同一时钟周期撤消_REQ; [page]

4 优先级仲裁算法

为了合理地控制和管理系统中需要占用总线的数据源,PCI仲裁器必须实现一个特别的优先级仲裁算法,以便在多个设备同时提出总线占用请求时,能依据该仲裁算法判决出哪个设备应获得对总线的控制权。总线仲裁可以确保任何时刻总线上最多只有一个设备发送信息,而决不会出现多个主控器同时占用总线的情况。

由于总线仲裁算法从根本上说与PCI总线技术规范无关,所以设计者可以根据实际需要自由地进行选择和修改。但要注意,设计时必须为所选用的I/O控制器及接插卡提供所要求的访问延迟保证。

总线优先级仲裁算法通常有两种,一种是固定优先级算法,一种是循环优先级算法。但不管是哪一种仲裁算法,都必须满足以下三个基本要求:

· 每一时刻只能有一个设备作为总线主控器;

· 先请求者先响应,且在一个总线操作周期之内不被打断;

· 同一时刻有几个设备发出请求时,按优先级排序响应。

所谓固定优先级算法,就是指PCI总线中各主控器的优先级是事先确定好的,在仲裁器仲裁过程中固定不变;而循环优先级算法则不同,各主控器的优先级在仲裁器的仲裁过程中不是一成不变,而是根据一定规律发生变化的。

表1给出了采用循环优先级算法或固定优先级算法时,PCI总线仲裁器中N个主控器的优先级变化规律。

采用固定优先级算法,可以对那些有重要数据传输、或有大量实时数据传输以及经常需要占用总线的主设备赋予较高的优先权,以便有效地利用PCI总线周期。在实际中,常常将这两种算法结合起来使用,以便构成更为灵活的仲裁机构。

5 仲裁器的EPLD编程设计

下面以支持5个总线主控器的PCI总线仲裁器为例,给出采用Altera公司的EPLD进行功能实现的主要设计思路,其中,所用编程语言为Altera公司的AHDL语言。该仲裁器采用循环优先级仲裁算法,且总线的缺省拥有者指定为最后一次使用总线的主设备。

5.1 PCI总线的状态机

PCI是Peripheral CompONent Interconnect(外设部件互连标准)的缩写,它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽。PCI插槽也是主板带有最多数量的插槽类型,在目前流行的台式机主板上,ATX结构的主板一般带有5~6个PCI插槽,而小一点的MATX主板也都带有2~3个PCI插槽,可见其应用的广泛性。

PCI总线是一种不依附于某个具体处理器的局部总线。从结构上看,PCI是在CPU和原来的系统总线之间插入的一级总线,具体由一个桥接电路实现对这一层的管理,并实现上下之间的接口以协调数据的传送。管理器提供了信号缓冲,使之能支持10种外设,并能在高时钟频率下保持高性能。PCI总线也支持总线主控技术,允许智能设备在需要时取得总线控制权,以加速数据传送。

PCI总线的状态机包括三种基本状态:无任何总线请求(NO_REQ)、等待周期(WAIT_CYCLE)和帧信号_FRAME的撤消(FRAMED)。其中,_FRAME信号的撤消,意味着当前的总线操作将进入最后一个数据传输周期,此时,_IRDY有效,一旦 _TRDY也有效最后一个数据传输周期就可完成。而判断_FRAME是否撤消的具体方法就是判断_FRAME是否出现从低到高的上跳变。图2所示即为PCI总线的状态机。图中,TIME_OUT为从_GNT发出到_FRAME变为有效所允许的PCI总线周期数。

5.2 PCI总线仲裁器的状态机

由于此仲裁器最大支持5个PCI总线主控器,至于仲裁器的仲裁状态什么时候应该发生变化则由总线状态机的状态决定,具体如下:当总线状态机处于FRAMED状态,表明在最后一个数据传输周期结束后,它将释放PCI总线,此时,仲裁器便可撤消对它的_GNT信号,以便去服务于另一个主控器;所以,若用EnChange来代表允许仲裁器仲裁状态发生变化的条件,则采用AHKL语言的具体编程如下:EnChange=(EnCHstate ==FRAMED)#(eNchSTATE == no_req)#(TimeOut[]==TIME_OUT)

该仲裁器中,由于采用循环优先级算法,仲裁器从每一种仲裁状态转换到其它仲裁状态的方法都是一样的,所以,下面只给出了仲裁器的仲裁状态为主控器1时向其它仲裁状态的转换机理(如图3所示)。另外,若仲裁器在刚启动时处于无效状态,则强制状态机在下一个时钟转换到Master0态。

5.3 总线允许信号_GNTi(低电平有效)的建立

在PCI对话中,由于_FRAME 和 _IRDY决定着总线的忙/闲状态。两者之中只要有一个信号成立,总线就处于忙碌状态;当两个信号都无效时,总线才处于空闲状态。所以建立_GNTi的具体编程如下:!_GNTi=(GNTstate==Masteri)&GLOBAL(_PCIrst)&!MaskGNT;%式中,MaskGNT=_FRAME&_IRDY%

总之,本文介绍的PCI总线仲裁器,由于采用单片EPLD即可实现,所以它具有系统结构简单、成本低、可靠性高、在线修改方便及升级容易等特点。目前,采用该仲裁器的PCI高速总线背板已应用在我们研发的总线型高性能网络交换机系列中。经过近两年的实际运行表明,仲裁器工作正常,性能稳定可靠。

关键字:PCI总线  仲裁器  优先级 引用地址:一种PCI总线仲裁器的设计与实现

上一篇:Linux下I2C总线EEPROM驱动程序设计方法
下一篇:MIC2550通用串行总线收发器及其应用

推荐阅读最新更新时间:2024-05-02 22:19

基于CPCI总线的FPGA加载设计
  0 引言   由于具有极强的实时性和并行处理能力,FPGA芯片在无线通信、信号处理等领域得到了广泛应用。   作为一种半定制电路,FPGA 的使用非常灵活,对于同一片FPGA,通过加载不同的编程数据可以产生不同的电路功能。但是,由于基于静态只读存储器(SRAM,Static Random Access Memory)的架构,FPGA 掉电后就变为白片,再次上电时需要EPROM 芯片对其进行加载。对于需要切换算法的场景,就需要通过上位机对其进行动态加载。本文在深入分析了FPGA 配置流程和理解CPCI 总线的基础上,设计实现了基于CPCI 总线的FPGA 动态加载。   1 硬件设计   系统中需要对三片Virt
[嵌入式]
基于PCI总线的电视图像处理仿真系统
引言 随着电视图像处理系统性能的提高,设计人员需要不断采纳新的数字图像处理算法,如何对这些新算法进行评估,如何将理论设计转化成工程应用成为设计人员关心的首要问题。 实现电视图像信号处理需要设计一套复杂的电路系统,且硬件电路的设计应综合考虑高速DSP芯片的开发、超大规模集成电路设计、视频转换、接口等复杂电路。设计印刷电路板和调试将占用设计人员较多的工作时间,较长的研制周期和较高的研制经费均不利于图像处理新思路、新算法向工程应用的转化。仿真系统能较大程度降低硬件电路设计的复杂性,缩短研制周期,有利于科研设计人员集中精力对新算法进行评估和测试。 能否实时采集和实时处理电视图像信号是设计仿真系统的关键问题。鉴于微型计算机运算速
[嵌入式]
51单片机的中断优先级及中断嵌套
说最基本的,老的51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。 中断的优先级有两个:查询优先级和执行优先级。 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级: 外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、
[单片机]
ARM Cortex-M4中断优先级和嵌套
坐在上海回北京的高铁上,漫长的旅途着实让人感到无聊(没买到直达的高铁,只能慢悠悠的走一站停一站,晕,都高铁时代了,竟然还这样,想起了大学放假回家站十几个小时绿皮车的时光啊,哈哈),遂有点“写心萌动”,不由感叹——“春”天真是来了,春为啥加引号捏,我相信大家都懂的,哈哈。这样也好,俺又可以慢悠悠的写作抒情了,走着。。。 其实都搞了这么长时间的ARM开发,关于其至关重要的中断优先级问题我早就想跟大家伙分享分享了,可惜一方面想真正的讲清楚这个问题估计又得大费周章和墨水,另一方面自己越来越忙进一步导致写文章倒是越来越懒了,呵呵。所以趁着坐高铁无聊赶紧撸胳膊抹袖子整吧,不然把这么重要的内容放在自己脑子里封存落灰实在是颇为浪费呀,哈哈。那
[单片机]
ARM Cortex-M4中断<font color='red'>优先级</font>和嵌套
基于cPCI总线的嵌入式遥测前端处理系统设计
  遥测数据处理系统在航空、航天等军工试验领域有着广泛的应用。在航空飞行试验中.遥测数据处理系统为各类试飞测试数据的实时处理提供了手段和平台,试飞员、试飞指挥员及试飞工程师协同完成新机试飞必不可少的重要设施,是确保现代飞机试飞安全、提高试飞效率、缩短试飞周期、实现综合试飞的重要手段。   遥测数据处理系统中的核心设备——遥测前端处理器,技术上经历了从分立式、智能式到嵌入式的快速发展。我遥测前端处理器的研发经历了从引进、合作研制到完全自行研制的历程。   遥测前端处理器是一套嵌入式实时计算机系统,承担着遥测PCM数据的同步、分路、工程单位转换、数据计算、数据分配等实时处理任务。它和遥测系统管理服务器、工作站等设备通过网络联接
[嵌入式]
定时/计数 的使用(自然中断优先级
定时器/计数器的使用可以分成两大步骤与代码 1、初始化定时器 2、编写中断子程序(也叫中断函数通俗点就是调用一个函数) 初始化定时器 1)设置定时器/计数器的模式(在前面有) 2) 开启定时器中断(定时器/计数器 0或者1或者其他) 3) 启用定时器/计数器(定时器/计数器 0或者1或者其他) 4)打开总中断 5)给定时器赋值 注:以上步骤可以打乱但是不可以少。(如果有的条件在其他函数里面初始化了这里可以省略) 编写中断子程序 void tim0_isr (void) interrupt 1 1
[单片机]
基于PCI总线模块的多通道串行数据采集系统设计
  O 引言   目前市面上有多种数据采集卡,但其应用都具有一定的局限性,不可能完全满足用户的需求。本文介绍的数据采集卡可应用于某视频图像采集系统中,数据源发送多路同步串行数据,然后经过数据采集卡传入上位机用以进行后续分析。上位机向外写控制字并转换后以异步串行方式输出。用以控制视频图像的采集。本系统将PCI接口逻辑和其他用户逻辑集成于一片FPGA中,因而大大节省了资源,便于进行串口扩展及其他功能的添加,性能良好,用途广泛。   1 PCI总线   PCI总线是一种高性能的局部总线,具有32位可升级到64位的、独立于CPU的总线结构。工作频率为33/66 MHz,最高传送速度可达132 MB/s(32位、33 MHz)或528
[电源管理]
基于<font color='red'>PCI总线</font>模块的多通道串行数据采集系统设计
Cortex-M3的中断优先级的分组方式
Cortex-M3的中断优先级的分组方式最多可以有有8种,因为CM3强制规定:SubPriority至少要占一个位(如果没有该强制规定,那么CM3分组方式最多有9种)。 我们知道:STM32把指定中断优先级的寄存器的MSB4位有效,共有以下5种分组方式: 第0组方式:所有4位用于响应优先级 第1组方式:最高1位用于抢占式优先级,最低3位用于响应优先级 第2组方式:最高2位用于抢占式优先级,最低2位用于响应优先级 第3组方式:最高3位用于抢占式优先级,最低1位用于响应优先级 第4组方式:所有4位用于抢占式优先级 在MISC.H里面有: #define NVIC_PriorityGroup_0 ((uint32_t)
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved