1、U流水线L2 cache读命中(目标地址00000054H~00000057H) 在处理器启动一个总线周期以后,处理器在T1状态输出地址信号A31~A3和确定周期类型的信号M/IO#、D/C#、W/R#和CACHE#。与此同时,地址选通信号ADS#有效,指出当前在总线上出现的地址和总线周期类型定义信号是有效的。Pentium数据总线的宽度为64位,连接在数据线上的存储器分为8个存储体,因此,代替地址线低三位的则是字节使能信号BE7#~BE0#。由于U流水线需要访问一个从00000054H~00000057H的双字,因此有效的地址信号指示了一个四个字的起始地址00000050H,其中包含所要访问的双字。由字节使能信号BE7#~BE4#进一步选定高地址的四个字节。M/IO#为"1"表示当前为存储器周期,D/C#为"1"指出是数据周期,W/R#为"0"表示为总线读。前面已经讲到,流水线要读一个操作数,如果在L1 Cache中没有副本,就需要访问L2 Cache或主存储器,除了读取目标数据以外,还要将目标数据所在页中的一行数据读出,进行L1 Cache数据行的替换。系统默认所有的行填充操作都采用猝发传送。所以,处理器还要驱动2个信号,一是驱动CACHE#信号有效说明希望执行一个猝发周期,二是驱动PCD(page cache disable)为低电平,通知外部存储器在要访问页面中的地址是Cache 使能的。外部存储器采样到有效的CACHE#和读(W/R#)信号以后,便知道处理器有一个Cache行填充请求。每进行一次Cache行的替换要读取32字节,Pentium处理器每个猝发周期可以读取8字节数据,也就是说Cache行替换需要4个猝发周期才能完成。 L2 Cache接收到地址以后,开始对L2 Cache目录的查找,在本例中目标地址存在于L2中,L2 Cache命中。由于目标地址是能够高速缓存的,L2 Cache在T2状态输出KEN#(Cache enable)信号,回答处理器(L2 Cache控制器)表示可以进行行填充操作。处理器采样到有效的KEN#信号,才开始以猝发传送执行Cache行替换。如果采样KEN#为"1"状态,仅仅执行由目标地址提供最少的所需要数据的单个传送周期。在L2 Cache输出有效的KEN#信号同时,驱动BRDY#信号有效,并把第一组"四字"送到数据总线上。 在T2状态的前沿处理器开始采样BRDY#和KEN#信号,当采样到BRDY#有效,又采样到KEN#有效,处理器知道有效的数据已经存在于数据总线上,就对第一组数据进行采样,并在以后的每一个T2状态采样BRDY#,进行对后续三组四字的读取,直到完成对四组数据的采样。对L2 Cache的猝发读,每个时钟周期进行一次,不需要插入等待。 双字00000054H~00000057H所在Cache行的地址是00000040H~0000005FH,Cache行填充操作是这样进行的,第一个猝发周期读取目标双字所在的"四字",即00000050H~00000057H,其它3组"四字"是由地址线A4、A3控制完成,读取00000050H~00000057H内容时A4为1,A3为0。读完00000050H~00000057H单元以后,A4不变,A3由0变1,然后,A4变为0,A3再先后等于0和1,分别读取剩余的3组四字。它们的顺序是:50~57H、58~5FH、40~47H、48~4FH。注意,A3、A4的取值如同触发器,除了第一次读A4、A3指向目标地址以外,每读一次,A3的状态"翻转"一次,每读两次,A4的状态"翻转"一次。完成Cache行填充操作后,处理器结束本次猝发读传送,将地址、CACHE#、读信号置为无效状态。 |