当前位置:   article > 正文

PCI总线(二)_pci rom优先级

pci rom优先级

5. PCI仲裁器工作原理

假设PCI仲裁器上接三个PCI设备,如下图所示。

假定PCI1,PCI2,PCI3三个设备的优先级相同,上电后,PCI总线仲裁器会将PCI1设备的GNT1信号驱动为低电平(有效)。即PCI1占用PCI总线。如果此时PCI1上没有数据传输,但PCI2上有数据要传输,PCI2设备就会驱动REQ2为低电平来向仲裁器发出PCI总线使用请求。仲裁器在时钟的上升沿采样到REQ2信号,在下一个时钟沿,PCI2FRAMEIRDY驱动为低电平(FRAMEIRDY是所有PCI设备共用的),仲裁器在时钟的上升沿采样到这两个信号后,就将GNT2驱动为低电平,应答PCI2的请求,这样,PCI2就拥有了PCI总线的使用权。

这里有一个问题,为什么PCI总线仲裁器不在采样到REQ2信号有效后立即将GNT2置低,将PCI总线的使用权交给PCI2设备,而是要等到PCI2设备的FRAMEIRDY信号有效后才执行呢? 这主要是仲裁器避免某些PCI设备申请总线使用权而实际上不使用,所以要等到FRAMEIRDY信号有效后(表示数据传输准备就绪)才授权使用总线。如果仲裁器在采样到REQ2有效后,一直没有采样到FRAMEIRDY信号有效,仲裁器会不会一直等待下去呢?答案是不会,仲裁器内部有一个定时器,等到定时器超时后,仲裁器就不再等了。

仲裁规则:优先级高设备抢占优先级低设备资源

假设三个PCI设备的优先级顺序为:PCI3>PCI2>PCI1

某个时刻,PCI1正在使用PCI总线传输数据,如果此时PCI2想要使用PCI总线,于是将REQ2驱动为低,向PCI总线仲裁器申请PCI总线的使用权,此时REQ1REQ2都处于有效状态,虽然PCI2的优先级高于PCI1,但是总线仲裁器不会马上响应PCI2的请求。而是等待PCI1完成一次操作(注意:是一次操作,不是全部)后,PCI1FRAMEIRDY总线驱动为高(每完成一次操作都需要进行此操作的)PCI2探测到PCI总线空闲后,将FRAMEIRDY信号驱动为低。总线仲裁器采样到这两个信号有效后,将GNT1驱动为高,同时将GNT2驱动为低,将总线的使用权转交给PCI2

此时,如果PCI1完成了全部传输,会将REQ1驱动为高。

如果PCI1还有数据等待传输,那么它会将REQ1一直保持为低电平,一直进行总线申请。一直等待到PCI2完成所有操作后,还会将PCI总线的使用权释放给PCI1

6.PCI操作类型

前面已经说过了,在FRAME信号有效后的第一时钟周期,AD[31:0]总线上传输的是目标PCI器件的地址,C/BE[3:0]上传输的操作命令类型。如下图所示。

7.PCI总线的读写时序

PCI总线写时序如下图所示

如上图所示,在FRAME#有效后的第一个时钟周期内,AD上传输的是要写入目标PCI设备的地址信息,C/BE#上传输的是命令类型(I/O写命令为0011)DEVSEL#信号有效后,表明目标PCI设备已经被选择到,IRDY#TRDY#同时有效后,主PCI设备向目标PCI设备中传输要写入的数据,在第5个时钟周期时,IRDY#TRDY#同时变为无效状态,AD总线上被插入一个等待周期,第6和第7个时钟周期时,IRDY#有效,但是TRDY#无效,传输仍然不能有效进行,总线上被继续插入两个等待周期,第8个时钟周期时,IRDY#TRDY#都有效,数据传输继续。 PCI总线的读时序如下图所示。

读操作同写操作类似,只是在FRAME#有效后的第一个时钟周期内,C/BE#上传输的是读操作命令而已(I/O读操作命令为0010)

8. PCI设备的配置空间

所有除主桥之外的设备功能,必须实现配置地址空间,目前有三种类型的首部格式:首部类型0,用于全部除PCI桥之外的设备;首部类型1,用于PCI-PCI桥;首部类型2,用于Card Bus桥。

每个PCI设备的配置空间大小为256字节,用来存放PCI配置文件,其中文件头标识区占64字节,下图为Type0类型首部。

1).厂家ID(Vender ID):用来区别每个PCI设备生产商,由PCI-SIG组织分配,0xFFFF表示无效。

2).设备ID:用来标识设备类型。

3).命令寄存器:为发出PCI和响应PCI总线命令提供粗略控制。

4).状态寄存器:用于记录PCI总线的事件状态信息。

5).版本标识:标识PCI设备的版本。

6).分类代码:用来表示PCI设备的功能分类和特定的编程接口,为只读存储器。

7).Cache行大小:指定系统中高速缓存cache一行的长度,以Dword为单位,可读写。

8).持有定时器:指定PCI总线主设备的延时计时值,以PCI总线的时钟为单位。

9).配置类型:表示头标区类型,以及是否为多功能设备。

10).自测能力BISTBuilt-In self test,支持自测的PCI设备为1,不支持的为0

11).基地址0~5:实现PCI设备所有使用地址空间的再定位。

12).扩展ROM基地址:表示ROM再内存中的起始地址,执行其中代码完成PCI初始化。

13).中断线:报告PCI设备与系统中断连接情况。

14).中断引脚:表示PCI设备使用了哪些中断引脚。

15).最短获准时间:指定PCI设备对延时计数器的设定值。

16).最大等待时间:指定PCI设备对延时计数器的设定值。

9.PCI总线小案例

在测试PCI总线的TRDY信号时,发现该信号从低电平拉升到高电平时太缓慢,如下图所示。

 

问题分析:

 TRDYs/t/s信号,在前面已经讲过了,s/t/s信号有如下特点:

  1).在某一个时刻只能由一个设备驱动;

  2).在释放之前必须将该信号驱动到高电平,并且至少保持一个时钟周期;

  3).其它设备必须等到该信号释放至少一个时钟周期后才能重新驱动它。

  4).该信号必须进行外部上拉处理。

经过分析该PCI总线的逻辑代码得知,该逻辑在处理s/t/s信号时没有完全按照规范要去来做,在将TRDY信号置为低电平有效后直接释放到高阻态,没有将它驱动到高电平后再释放,因此,TRDY在低电平位置被释放到高阻态后,完全依靠外部的上拉电阻将其拉到高电平位置,由于外部上拉比较弱,导致我们上面见到的TRDY电平上升缓慢现象。修改逻辑代码后,问题消失。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/422165
推荐阅读
相关标签
  

闽ICP备14008679号