一种公平的总线仲裁方法及仲裁装置
技术领域
本发明涉及通信系统中高速总线的仲裁方法,具体涉及通信系统中确定高速总线使用权的公平仲裁方法,更具体地说,涉及一种可在基站系统中确定高速总线使用权的公平仲裁方法,本发明还涉及基于所述方法的仲裁装置。
背景技术
在基站系统当中,采用共享总线式的交换,需要实现20块单板总线共享两套总线。这就要求一种比较公平的总线使用竞争与仲裁方法及装置来实现。在基站系统上交换的数据多是语音短包,而且数据包的长度不定。现有通信系统中的通用仲裁方法是采用轮循的总线仲裁(如UTOPIA2总线):首先仲裁器轮询下挂总线的使用者,检查其应答信号,再确定总线的使用权。虽然该方式实现简单,而且对总线下挂的使用者也比较公平。但是,该方法存在如下缺点:仲裁的延时会随着下挂使用者的增多而线性增加,对于多是短包的系统,其仲裁效率比较低。而且轮询方式有时不能保证先申请先使用,即时间上没有得到充分利用。
发明内容
本发明要解决的技术问题在于,提供一种总线仲裁方法和仲裁装置,可以在时间与权重上都比较公平,这种仲裁方法和装置的延时固定并且比较小,适用于通信系统实现高速总线主从模式的共享与仲裁。特别是在从设备比较多的系统当中,仲裁的效率不会随从设备的增加而下降。
本发明上述技术问题这样解决,构造一种在基站系统中确定高速总线使用权的公平的总线仲裁方法,包括如下步骤:
对在同一时钟周期产生的总线申请进行采样;
统计同一时钟周期内申请的个数,并按申请时间的先后对申请进行排序,赋予每个申请一个队列排序值,该数值代表申请到达的先后次序,对每个申请进行时间仲裁;
统计总线的使用情况,对在同一时钟周期产生的N+1个总线申请产生N+1个不同的权重,其中:最低的权重定为0,最高定为N,并将占用总线次数少的申请定为权重高;所述N+1表示总线申请数量;
根据每个申请的权重,对在同一时钟周期同时到达的申请中,进行权重仲裁,选出权重最大的一个给予总线使用权。
在上述公平的总线仲裁方法中,所述对在同一时钟周期产生的总线申请进行采样步骤中还包括如下步骤:用同一时钟对N+1个申请线进行采样,当检测到申请线上的下降沿时产生总线申请,在同一采样周期内到达的申请将同时产生总线申请。
在上述公平的总线仲裁方法中,所述统计同一时钟周期内申请的个数,并按申请时间的先后对申请进行排序步骤中还包括如下步骤;
采用队列的方式进行排序,位于队列头的序列号定为1,为0表示没有出于序列当中;
申请累加器,统计同一时钟周期内到达申请的个数,队列尾产生器初值为1,表示队列尾的初始的序列号为1;
队列尾产生器把当前的数值和申请累加器的结果累加,表示新的申请到来,队列尾往后移;申请计数器在申请被允许后减1,表示一个申请从队列当中清除,队列尾往前移动1。
从队列尾产生器获得目前的队列尾序列号,将这个序列号作为该申请在队列的初始化序列号,也就是将该申请连接在队列的尾部,同时队列尾产生器加1,更新队列尾的位置,所有的申请根据采样的时间次序,排列在队列当中,其中队列头的序列号为1,存放的是最早到达的申请。
在上述公平的总线仲裁方法中,所述选出权重最大的一个给予总线使用权中还包括如下步骤:
从输出的有效申请线当中,找出权重最大的申请,具体步骤如下:申请表示为S0_REQ0...S0_REQN,权重表示为0...N,表示为二进制L(k)2k+L(k-1)2(k-1)+...+L(0)20;其中,S0_REQ0是第0个设备的总线申请标志,取值范围是(0,1),L(k)表示二进制数第k比特的取值,范围(0,1),k表示设备的数目可以使用最小k个比特二进制数来区分;
首先检查有效申请的权重中,有没有L(k)为1的,如果有,则最大的权重必然大于2k,则把权重大于2k的申请进行第二级选择S20-S2N,否则,把权重小于2k的申请进行第二级选择;
上述过程在逻辑实现上表示为:
经过K=LOG2(N+1)级选择后,可选择出权重最大的申请;当一个申请获得总线授权后,把该申请的权重设为最低,权重比它小的申请的权重都加1,经过若干次的仲裁后对权重进行若干次调整,最后,N+1个申请仍然处于N+1个不同的权重中,权重与一次使用总线的时间间隔有关,时间越长,权重越大,权重越大,允许使用总线的几率就越高,保证各从设备使用总线的时间。
本发明另一问题这样解决,构造一种在基站系统中确定高速总线使用权的公平的总线仲裁装置,包括时间仲裁器、权重仲裁器及输出接口。
在上述公平的总线仲裁装置中,所述时间仲裁器包括在同一时钟内对N+1个申请线进行采样的采样器、与所述采样器连接用于统计同一时钟周期内到达申请个数的申请累加器、对所述累加器中的申请进行排序的队列尾产生器、对所述队列尾产生器进行管理的队列管理器,所述队列管理器从队列尾产生器获得目前的队列尾序列号,将该序列号作为该申请在队列的初始化序列号,排列在输出给权重仲裁器的队列中。
在上述公平的总线仲裁装置中,所述权重仲裁器包括串接连接的多级权重选择器,与所述多级权重选择器连接的权重产生器,所述权重产生器对每个申请产生一个权重,所述多级选择器根据每个申请的权重,从时间仲裁器输出的同时到达的申请中,经过多级权重选择器多级选择后,选出权重最大的一个给予总线使用权通过所述输出接口输出。
实施本发明提供的公平的总线仲裁方法及装置,具有如下优点:采用两级仲裁,先经过时间仲裁器,保证先申请,先使用;再经过权重仲裁器,保证使用者占用总线的公平性;为实现时间的公平性,本方法采用申请队列方式,赋予每个申请一个队列排序值,该数值代表申请到达的先后次序。通过比较该数值,就可以实现先申请,先允许的仲裁原则。为了实现权重的公平性,本方法统计总线的历史使用情况,给使用次数低的申请赋予较高的权重,从而保证总线使用的公平性;仲裁结果由被授权的总线使用者标号(GNT_NUM)和允许使用总线信号(GNT)组成。下挂总线的使用者根据仲裁结果决定是否享用总线。
附图说明
图1是本发明公平的总线仲裁装置的结构框图;
图2是图1所示本发明公平的总线仲裁装置中权重产生器产生权重排序时的示意图;
图3是图1所示公平的总线仲裁装置中权重产生器进行仲裁充许示意图。
具体实施方式
如图1所示,采样器T用同一时钟对N+1个申请线进行采样,当检测到申请线上的下降沿时产生总线申请,在同一采样周期内到达的申请将同时产生总线申请,因此时间仲裁器的精度为一个时钟周期。时间仲裁器采用队列的方式实现,队列头的序列号为1,为0表示没有出于序列当中,具体实现过程如下:
申请累加器,统计同一时钟周期内到达申请的个数,队列尾产生器初值为1,表示队列尾的出始的序列号为1。队列尾产生器把当前的数值和请累加器的结果累加,表示新的申请到来,队列尾往后移。申请计数器在申请被允许后减1,表示一个申请从队列当中清除,队列尾往前移动1。举例说明,假设某一时刻队列尾产生器的值为P,此时申请脉冲SRQ(I)到来,队列管理器(I)就从队列尾产生器获得目前的队列尾序列号P,将P作为该申请在队列的初始化序列号,也就是将该申请连接在队列的尾部,同时队列尾产生器D加1,更新队列尾的位置。这样,所有的申请就根据采样的时间次序,排列在队列当中,其中队列的头序列号为1,存放的是最早到达的申请。
新申请从队列尾产生器D获得处于队列尾的初始化序列号,队列管理器(B0-BN)根据反馈信息:总线仲裁应答信号(ACK)和被授权的总线使用者标号(GNT_NUM),更新各申请在队列中的位置。其中ACK是仲裁结果已经被从设备接收,可以进行下一个申请的仲裁的指示标记。GNT_NUM为仲裁输出的允许适用总线的申请的标号。队列管理器更新序列号的过程如下:在接收到ACK信号,表明标号为GNT_NUM的从设备已经接收到仲裁结果,因此它的申请的序列号清为0,即将该申请清除出队列。对于其它标号不等于GNT_NUM且处于队列头的申请(即序列号为1),维持为1。其它非队列头的申请(序列号大于1),序列号减1,即队列中的申请往前移。队列管理器同时还将处于队列头的申请送往权重仲裁器。
权重仲裁器的输入为时间仲裁器的输出,其输出包括授权的总线使用者标号(GNT_NUM)、总线仲裁结果输出指示(GNT)。其中GNT_NUM和GNT作为最终的仲裁结果输出,把总线使用权交给标号为GNT_NUM的总线申请从设备。
如图1所示,多级权重选择器S,权重产生器,共同组成了权重仲裁器。权重产生器,公平的为每个申请产生一个权重,选择器根据申请的权重,从时间仲裁器输出的同时到达的申请中,选出权重最大的一个给予总线使用权。
权重产生器工作原理:它实际上是一个总线使用历史统计器,在N个从设备的系统中,最低的权重为0,最高为N。算法统计总线的历史使用情况,让占用总线次数少的申请权重高。
算法如下:
给标号I的申请赋权重初值I,如图2a所示,当一个申请(标号为I)获得总线授权后,把该申请的权重设为最低,权重比它小的申请的权重都加1,如图2b。经过若干次的仲裁后,权重产生器用图2b的方式对权重进行了若干次调整,最后,N+1个申请仍然处于N+1个不同的权重中,不过此时各个申请对应的权重已经没有初始化的那样有规律。但是各申请的权重在统计上,权重与一次使用总线的时间间隔有关,时间越长,权重越大。权重越大,允许使用总线的几率就越高,这就保证各从设备的使用总线的时间。
选择器S的实现的功能为采用对分选择的算法,从时间仲裁器输出的有效输出申请线当中,找出权重最大的申请。具体算法如下:申请S0_REQ0...S0_REQN,权重0...N,表示为二进制L(k)2k+L(k-1)2(k-1)+...+L(0)20。首先检查有效申请的权重中,有没有L(k)为1的,如果有,则最大的权重必然大于2k,则把权重大于2k的申请送往第二级选择器S20-S2N,否则,把权重小于2k的申请送往第二级选择器。上述过程在逻辑实现上可以表示为:
可用布尔表达式表示为
如此经过多级选择,最终选出权重最大的申请。采用这种方式要经过K=LOG2(N+1)级选择器就能选择出权重最大的申请。当然,选择器也可以采用冒泡法实现,但比较次数随着N的增加而增多,硬件实现上延时比较大。
权重仲裁器根据各申请的权重,从高到低每次输出一个总线使用授权。由输出接口器检测到从设备的应答信号“忙”(BUSY),发现BUSY信号则将输出ACK信号,和GNT_NUM一起,控制时间仲裁器及权重仲裁器进行下一个申请的仲裁,新的仲裁结果受从设备的应答BUSY信号控制,等使用总线的从设备释放总线后才输出。这样,两个仲裁器在总线使用期间就可以进行下一个仲裁过程,使用结束立即可以输出结果,减少仲裁的时延,从而提高总线的利用效率。
本发明方法可采用VHDL语言编写,装置可采用ALTERA公司的FLEX10K50来实现。