- 主题:问个cpu pc值的问题
PC是一个寄存器,用来确定IF要发起取指的地址(前面代码always块里的PC应该是这个PC寄存器);
在IF/ID(流水线级)之间存在中间寄存器,这些中间寄存器可能用来传递PC值,但是它不是PC寄存器。
不同的寄存器,按照各自的规则来赋值
【 在 liriver 的大作中提到: 】
: 看了好几本cpu的书,按我的理解,IF阶段传给IF/ID模块包括取到的指令和该指令的pc(即取指地址),因为后面处理跳转指令要用到这个pc,确实书上的意思也是这俩是对应的。
: 但是基本上所有书又是在IF的pc模块就:
: always @ (posedge clk) begin
: ...................
--
FROM 111.201.49.*
--->PC------->IF/ID
| |
|--Add 4--|
寄存器写入发生在“->”位置
【 在 liriver 的大作中提到: 】
: 没看明白,IF/ID是寄存器,存放从IF阶段传过来的pc值(因为这个后面要用),问题是从IF传过来的是+4之前还是之后的,它里边传值逻辑是怎样的。当然我能看到的结论肯定是+4之前的值,但是在IF阶段+4的动作是怎么不影响往后传的pc值的
--
修改:tianbing1212 FROM 111.201.49.*
FROM 111.201.49.*
IF/ID<=PC
PC<=PC+4
两个操作并行执行
【 在 liriver 的大作中提到: 】
: 还是没看明白,我的理解对不对:
: 因为pc是寄存器,有两个锁存器,在当前时钟周期,后面的锁存器向IF/ID输出当前pc,而前面的锁存器+4(记为pc4),下个时钟时钟上升沿前面的锁存器的pc4传递到后面锁存器从而向IF/ID输出pc4,而前面的锁存器再+4(pc8)...循环往复
--
FROM 111.201.49.*