pipeline之stage(二)

前端之家收集整理的这篇文章主要介绍了pipeline之stage(二)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在真正的RISC IC的制成中,不会只有这五个stage。它可能存在多条pipeline,每条pipeline @H_502_0@ 有多个stage。如: @H_502_0@ integer ALU:有5个stage; @H_502_0@ FP/integer multiplication(浮点/integer乘):大概有11个stage @H_502_0@ @H_502_0@ @H_502_0@ 由于每条指令的the number of stages不同,就可也能够造成较多的问题: @H_502_0@ 1、有些指令是unpipeline,会造成structural hazard。 @H_502_0@ 2、可能会造成同时有多条指令对register进行写操作。 @H_502_0@ 3、可能会发生WAW hazard,就是后运行的指令反而先写。 @H_502_0@ 4、会导致exception的发生顺序变化更大 @H_502_0@ 5、会产生更严重的data hazard @H_502_0@ @H_502_0@ 第一种情况的解决方案就是增加hardware(function unit) @H_502_0@ 第二种情况的解决方案就是在ID OR MEM OR WB这三个stage中的任意一个stage中做检查,如果发现 @H_502_0@ 前一条指令的写操作可能会跟当前的指令的写操作同时发生,那么就让当前的指令等一下。 @H_502_0@ 第三种情况的解决方案就是在ID stage中做检查。 @H_502_0@ 第四种情况的解决方案就是不管它,只要保证所有的execption都被正确的处理就行; @H_502_0@ 方案二:在chip中做一个buffer,用来存贮指令的结果值,这样当exception的顺序不对时,就可以 @H_502_0@ back到之前的指令,保证exception的处理顺序。 @H_502_0@ 方案三:用软件来实现。 @H_502_0@ 第五种情况的解决方案就是用forwarding来解决(没有办法完全消除掉)。 @H_502_0@ @H_502_0@ 一个MIPS R4000真实芯片stage的划分:共分为8个。 @H_502_0@ IF、IS、RF、EX、DF、DS、TC、WB @H_502_0@ @H_502_0@ IF:前半个instruction fetch,完成PC加4,和cache的初始化 @H_502_0@ IS:是后半个instruction fetch:完成从instruction cache中取指令 @H_502_0@ RF:就是进行instruction decode,将value从register中取出,并且做hazard checking @H_502_0@ EX: @H_502_0@ A、做运算,如:加减乘除 @H_502_0@ B、算memory的address @H_502_0@ C、如果是branch,就去算target address,并检查跳转条件。 @H_502_0@ @H_502_0@ MEM被分成了三个:DF、DS、TC @H_502_0@ DF:做data fetch的前半部分 @H_502_0@ DS:做data fetch的后半部分 @H_502_0@ TC:tag check,就是确认data cache 有没有hit。 @H_502_0@

WB:写回。

@H_502_0@

@H_502_0@

(完) [此为原创,转载请标明出处,谢谢!]

猜你在找的设计模式相关文章