AGP总线传输机制简介
6 \8 o* D4 j$ F% ~. E7 K& m 和PCI总线相比,AGP总线的规范又复杂许多。为了让读者对AGP,总线有一个初浅的认识,这里围绕AGP总线中的传输机制做一些简单介绍。
' x! k) B0 t' O" Q S% N( Z8 J 首先需要说明,在使用AGP协议执行AGP事务时,图形控制器是主控器,而核心逻辑(其中含有主存控制器)则充当目标的角色,图形控制器启动事务以便将数据写入主存或从中读出;然而在AGP总线上使用标准的PCI协议执行PCI事务时,图形控制器或核心逻辑均可以启动事务,而其他设备则充当事务的目标。
' `! C4 r8 W8 {- C* Q" |( S
1.AGP总线命令与AGP事务请求
; U X& N2 n6 v 1)AGP总线命令的代码与功能
3 x0 Q) `/ @. Q( K# E, J
在AGP总线上,主控器(图形控制器)发给目标(核心逻辑)的事务请求通过四位命令代码(CCCC)来表示,见表9.10。
1 S, x! {* v6 y: {4 v# O6 i
' P$ L" d8 D4 C0 g& k" }" ^7 f5 W
3 r7 K9 }" {2 h. q0 i7 z0 j& S X( ~
- w' G# L9 q2 }1 y! S6 [/ H- h
$ F4 t S* ^9 J0 G & W K8 h5 b/ Y# {3 p5 X
读命令(低或高优先级读,或者低或高优先级长读)是通知目标从主存指定的起始地址开始读数据,并传送到主控器。所读数据的长度由另外三位长度代码(LLL)来决定:对于一般的读,为(LLL 1)×8个字节;而对于长读,则为(LLL 1)×32个字节。至于低优先级读和高优先级读是指将读命令分别放到低优先级请求子队列和高优先级请求子队列,并遵循各自队列的排序规则。数据通过读数据返回队列送出。
1 E e+ @7 R- w+ J$ Y
写命令与读命令相对应,将主控器中的数据写到主存从指定地址开始的存储单元中。对于写数据长度的规定和读命令相同,低或高优先级也是指示将写命令分别放到低优先级请求子队列或高优先级请求子队列,但数据通过写数据队列传送。
9 X4 Q( u# _/ \4 O% r' Z! {
可以看出,AGP的读/写操作都是以8个字节为单位进行的,所以起始地址总是4字地址(能被8整除的地址)。这一点和PCI总线不同,在PCI总线上对传输的数据个数没有要求,甚至通过控制字节允许可以进行奇数个字节的传送。当然,AGP对数据传送长度的要求也是从提高数据传输率出发的。
' q# c l& e& s! ` 刷新命令强迫AGP目标将所有当前低优先级写命令进行刷新,即把执行这些命令而已经写入到核心逻辑内部的写缓冲区中的数据真正写到主存中。该命令的地址和长度域无意义。
8 F' y" j5 A2 D; N- g
分隔命令用来在一次由主控器启动的长访问操作流中产生一个分隔边界。
1 a5 H/ R& h$ g 双地址周期命令用于主控器通过AD线将一个64位地址传送到核心逻辑。
+ h( @9 k y3 c
2)SBA端口命令的格式与含义
9 {- }0 w) k9 l( @: t 一个AGP事务请求应包括AGP命令和传送起始地址两部分。AGP事务请求可以通过AD线和C/BE#线发送,也可以通过SBA端口发送。而后者是AGP总线的特色之处,这里就此作一些介绍。
5 i, t2 q3 |" G% Z0 [6 b SBA端口是一个8位的端口,因此传送一个AGP事务请求需要分几次进行,每次传送一部分,即低位地址与长度、中地址位与命令以及高地址位。对于访问48位物理地址空间的请求,还应有第四部分,即扩展地址位。由于这些请求组成部分都要通过SBA端口发送出去,所以可以把每一部分看成一种SBA端口命令,即一个事务请求是由几个不同类型的SBA端口命令组成的。SBA端口命令的格式及功能说明见表9.11。
8 }7 X3 E7 x2 U3 x! y4 z# c( x6 l3 M% j
! I% Q, B' k6 z* Z
/ d5 M5 H! S0 a+ l* H! x4 u5 z" v9 U) X4 q5 T' D
: B0 s% Y, j$ R. ` 主控器发出SBA命令的顺序没有什么限制,但只有当第一类型命令发出时全部请求才被认为已排人队列,因此第一类型命令应最后一个发出。此外,第二、第三和第四类型SBA命令仅在自上一次请求后请求信息的那部分发生变化时才需要再次发出。这意味着核心逻辑能记住第二、第三和第四类型命令提供的信息,并假定直到接收到新的信息为止这些信息是可信的。一旦只收到第一类型命令而没有收到第二、第三和第四类型命令,目标就使用以前存储的信息建立一个新的全长AGP事务请求,并将其排入请求队列。这样做的依据是主存中的存取是一种线性方式,即下一次存取很可能就发生在当前存取地址的附近。显然,这样做可减少新的请求通过SBA端口发送次数,从而也减少了新的请求排人队列的等待时间。
; ~: @/ D5 y$ H
下面举一个发送AGP事务请求的例子。在该例中做了以下假设:
; ~$ u0 n4 I0 q! Y+ M2 w) u ①图形控制器要求从主存中读取256 KB的纹理图数据,起始地址从256 KB的边界开始。
# g5 ]5 Q( B6 k1 C R ②使用传输长度为256的长读命令,256 KB的纹理传送需要1024个事务。因此,为了
0 A, C! d" K9 r. p$ O7 [完成整个传送目标需要对1024个事务进行排序。
) y: U3 F6 {2 s) c
③机器的主存空间被局限在4 GB范围内,因此只需要32位寻址方式。
, u+ V/ H* a; g% R: r; z
图形控制器将要对SBA端口发出一系列AGP事务请求,具体说明如下:
) R0 O; B+ S# K ·第一个事务请求需要三个SBA端口命令,其中第一个是第三类型命令,用来指定(使用AD[35~24])包含对准起始地址的16 MB主存块(在4 GB的地址边界内)。
5 k( u' e6 Q0 S- V4 a ·主控器接着发出第二类型命令,确定在该16 MB主存块内包含对准起始地址的32 KB区域。该命令也包含了命令的类型,在本例中为长读。
3 L E9 o" w6 k; x: b
·最后,当主控器发出第一类型命令时,表示(使用AD[14~3])第一个256字节的起始地址(为4字边界地址)被发送出去,于是第一个请求被排入队列。在该例中,由于起始地址是256