总线仲裁

更新时间:2023-03-19 18:34

总线仲裁(bus arbitration),系统中多个设备或模块可能同时申请对总线的使用权,为避免产生总线冲突,需由总线仲裁机构合理地控制和管理系统中需要占用总线的申请者,在多个申请者同时提出总线请求时,以一定的优先算法仲裁哪个应获得对总线的使用权。

简介

总线上的设备一般分为总线主设备和总线从设备。总线主设备是指具有控制总线能力的模块,通常是CPU或以CPU为中心的逻辑模块,在获得总线控制权之后能启动数据信息的传输;与之相对应的总线从设备,是指能够对总线上的数据请求做出响应,但本身不具备总线控制能力的模块。在早期的计算机系统中,一条总线上只有一个主设备,总线一直由它占用,技术简单,实现也比较容易。

随着应用的发展,主要是工业控制、科学计算的需求,多个主设备共享总线的情况越来越多,这对总线技术提出了新的要求。根据这类系统的特点,需要解决各个主设备之间资源争用等问题,这使得总线的复杂性大为增加。

总线仲裁就是在多个总线主设备的环境中提出来的。在多处理机系统中,每个处理机都可以作为总线主设备,都要共享资源,它们都必须通过系统总线才能访问其它资源,总线也可视为是一种重要的公共资源。由于每个处理机都会随机地提出对总线使用的要求,这样就可能发生总线竞争现象。为了防止多个处理机同时控制总线,就要在总线上设立一个处理上述总线竞争的机构,按优先级次序,合理地分配资源,这就是总线仲裁问题。用硬件来实现总线分配的逻辑电路称为总线仲裁器(Bus Arbiter)。它的任务是响应总线请求,通过对分配过程的正确控制,达到最佳使用总线。

总线判优控制按照仲裁控制机构的设置可分为集中控制分散控制两种。其中就集中控制而言,常用的总线仲裁方式有:菊花链仲裁、二维仲裁、同步通信方式、异步通信方式和半同步通信方式。

连接到总线上的功能模块有主动和被动两种形态,CPU可以做主方也可以做从方,而存取器模块只能用作从方。主方可以启动一个总线周期,而从方只能响应主方的请求。对多个主设备提出的占用总线请求,一般采用优先级或公平策略进行仲裁。

仲裁方式分类

按照总线仲裁电路的位置不同,仲裁方式分为集中式仲裁和分布式仲裁两类:

1.集中式总线仲裁的控制逻辑基本集中在一处,需要中央仲裁器,分为链式查询方式、计数器定时查询方式、独立请求方式;

(1) 链式查询方式

链式查询方式的主要特点:总线授权信号BG串行地从一个I/O接口传送到下一个I/O接口。假如BG到达的接口无总线请求,则继续往下查询;假如BG到达的接口有总线请求,BG信号便不再往下查询,该I/O接口获得了总线控制权。离中央仲裁器最近的设备具有最高优先级,通过接口的优先级排队电路来实现。

链式查询方式的优点: 只用很少几根线就能按一定优先次序实现总线仲裁,很容易扩充设备。

链式查询方式的缺点: 对询问链的电路故障很敏感,如果第i个设备的接口中有关链的电路有故障,那么第i个以后的设备都不能进行工作。查询链的优先级是固定的,如果优先级高的设备出现频繁的请求时,优先级较低的设备可能长期不能使用总线。

(2)计数器定时查询方式

总线上的任一设备要求使用总线时,通过BR线发出总线请求。中央仲裁器接到请求信号以后,在BS线为“0”的情况下让计数器开始计数,计数值通过一组地址线发向各设备。每个设备接口都有一个设备地址判别电路,当地址线上的计数值与请求总线的设备地址相一致时,该设备 置“1”BS线,获得了总线使用权,此时中止计数查询。

每次计数可以从“0”开始,也可以从中止点开始。如果从“0”开始,各设备的优先次序与链式查询法相同,优先级的顺序是固定的。如果从中止点开始,则每个设备使用总线的优先级相等。

计数器的初值也可用程序来设置,这可以方便地改变优先次序,但这种灵活性是以增加线数为代价的。

(3)独立请求方式

每一个共享总线的设备均有一对总线请求线BRi和总线授权线BGi。当设备要求使用总线时,便发出该设备的请求信号。中央仲裁器中的排队电路决定首先响应哪个设备的请求,给设备以授权信号BGi。

独立请求方式的优点:响应时间快,确定优先响应的设备所花费的时间少,用不着一个设备接一个设备地查询。其次,对优先次序的控制相当灵活,可以预先固定也可以通过程序来改变优先次序;还可以用屏蔽(禁止)某个请求的办法,不响应来自无效设备的请求。

2.分布式仲裁不需要中央仲裁器,每个潜在的主方功能模块都有自己的仲裁号和仲裁器。当它们有总线请求时,把它们唯一的仲裁号发送到共享的仲裁总线上,每个仲裁器将仲裁总线上得到的号与自己的号进行比较。如果仲裁总线上的号大,则它的总线请求不予响应,并撤消它的仲裁号。最后,获胜者的仲裁号保留在仲裁总线上。显然,分布式仲裁是以优先级仲裁策略为基础。

总线分配技术

对总线仲裁问题的解决是以优先级(又称优先权)的概念为基础的,通常有三种总线分配的优先级技术──串联、并联和循环。

串联优先级判别法

图1中有Ⅰ、Ⅱ、…、N等N个模块,都可作为总线主设备,各个模块中的“请求”输出端采用集电极(漏极)开路门,“请求”端用“线或”方式接到仲裁器“请求”输入端,每个模块的“忙”端同仲裁器的“总线忙”状态线相连,这是一个输入输出双向信号线。当一个模块占有总线控制权时,该模块的“忙”信号端成为输出端,向系统的“忙”状态线送出有效信号(例如低电平)。其它模块的“忙”信号端全部作为输入端工作,检测“忙”线上状态。一个模块若要提出总线“请求”,其必要条件是选检测到“忙”信号输入端处于无效状态。与此相应,仲裁器接受总线请求输入的条件,也是“忙”线处于无效状态。

进一步可以规定仲裁器输出“允许”信号的条件首先是“忙”线无效,表示总线没有被任一模块占用;其次才是有模块提出了总线请求。“允许”信号在链接的模块之间传输,直到提出总线“请求”的那个模块为止。这里用“允许”信号的边沿触发,它把共享总线的各模块要使用总线时,便发生信号禁止后面的部件使用总线。通过这种方式,就确定了请求总线各模块中优先级最高的模块。显然,在这种方式中,当优先级高的模块频繁请求时,优先级别低的模块可能很长时间都无法获得总线。一旦有模块占用总线后,“允许”信号就不再存在。

并联优先级别判别法

图2中有N个模块,都可作为总线主设备,每个模块都有总线“请求”线和总线“允许”线,模块之间是独立的,没有任何控制关系。这些信号接到总线优先控制器(仲裁器),任一模块使用总线,都要通过“请求”线向仲裁器发出“请求”信号。仲裁器一般由一个优先级编码器和一个译码器组成。该电路接到某个模块或多个模块发来的请求信号后,首先优先级编码器进行编码,然后由译码器产生相应的输出信号,发往请求总线模块中优先级最高的模块,并把“允许”信号送给该模块。被选中的模块撤销总线“请求”信号,输出总线“忙”信号,通知其余模块,总线已经占用。在一个模块占用总线的传输结束以后,就把总线“忙”信号撤销,仲裁器也撤销“允许”信号。根据各请求输入的情况,仲裁器重新分配总线控制权。

循环优先级判别法

循环优先级判别方法类似于并联优先级判别方法,只是其中的优先级是动态分配的,原来的优先级编码器由一个更为复杂的电路代替,该电路把占用总线的优先级在发出总线请求的那些模块之间循环移动,从而使每个总线模块使用总线的机会相同。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}