关于流水线每一级的操作。以tms320c62xx为例,流水线是: PG,PS,PW,PR, DP,DC, E1,E2,E3,E4,E5
1.关于取指的过程:(denoted from ti's doc)
PG: Program address generate
PS: Program address send
PW: Program access ready wait
PR: Program fetch packet receive
我不太明白的是,PS,PW,PR到底是怎么划分的。我感觉流程应该是这样的:下一条指令的地址在PG产生了,然后存到一个寄存器(prog_addr)里面去,这个寄存器是连接到程序存储器(prog_mem)的地址线(PAB)上的。然后在下一时钟沿程序存储器(prog_mem)就把指令放在了程序数组总线(PDB)上了。再下一个时钟周期的上升沿,处理器就从PDB上读到指令寄存器(INSN)里面。这样来看的话在三个时钟周期就取指完成了。所以我不太明白取指的四步与上面我所叙述的过程是怎么对应的,或者我说的过程有误。
2.关于译码译码过程:
DP: Instruction dispatch
DC: Instruction decode
关于译码(DC),我一直不太明白到底做了什么,很多书上就说是在译码,比如ti's doc:(In the DC phase, the the source registers, destination registers, and associated paths are decoded for the execution of the instructions in the functional units),那么从寄存器传输的角度来说到底是做什么呢?就是说经过这一级哪些寄存器改变了。
3.关于执行的过程:
在c6xx里面有的指令只执行1级,有的要2级,etc,算数运算类的指令还是挺好理解的,我的困惑主要还是在与存储器打交道的指令上,下面分析一下load类指令。先看ti's doc怎么说的:
E1 address generation is performed.
E2 the address is sent to memory.
E3 Data memory accesses are performed.
E4 data is brought to the CPU.
E5 data is written into a register.
问题还是这样的,从寄存器传输级的角度来说,每一级是在做什么。按理说,这应该和取指的过程类似,那么为什么这里却用了5级,虽然按我的推理这个过程至多三级就够了,两级也可以,要更多级的话就是在中间某些级什么也不做。 |