位置:51电子网 » 技术资料 » 接口电路

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

发布时间:2008/6/3 0:00:00 访问次数:510

作者email: jie_yi@sohu.com

摘要:基于altera的cpld器件的pci总线仲裁器设计,实现仲裁器的ahdl编程,并结合仿真结果对pci总线的仲裁进行了论述。

关键词:pci仲裁器,cpld,仿真

pci总线仲裁器通常是集成在pci芯片组中。随着计算机应用的深入,尤其是嵌入式系统的不断发展,集成的仲裁器难以满足某些场合的应用。而采用cpld技术实现的独立的pci总线仲裁器,则较好的适应了这方面的需求。

一﹑pci总线仲裁机制

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#有效,数据在总线上传输,总线处于忙状态
parb_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;

作者email: jie_yi@sohu.com

摘要:基于altera的cpld器件的pci总线仲裁器设计,实现仲裁器的ahdl编程,并结合仿真结果对pci总线的仲裁进行了论述。

关键词:pci仲裁器,cpld,仿真

pci总线仲裁器通常是集成在pci芯片组中。随着计算机应用的深入,尤其是嵌入式系统的不断发展,集成的仲裁器难以满足某些场合的应用。而采用cpld技术实现的独立的pci总线仲裁器,则较好的适应了这方面的需求。

一﹑pci总线仲裁机制

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#有效,数据在总线上传输,总线处于忙状态
parb_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;

相关IC型号

热门点击

 

推荐技术资料

耳机放大器
    为了在听音乐时不影响家人,我萌生了做一台耳机放大器的想... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!