看了好几本cpu的书,按我的理解,IF阶段传给IF/ID模块包括取到的指令和该指令的pc(即取指地址),因为后面处理跳转指令要用到这个pc,确实书上的意思也是这俩是对应的。
但是基本上所有书又是在IF的pc模块就:
always @ (posedge clk) begin
if (ce == `ChipDisable) begin
pc <= 32'h00000000;
end else begin
pc <=pc + 4'h4;
end
end
这儿似乎pc值已经+4,那跟刚取到的指令地址差4字节,那传递过去的指令和地址就不对应了。
确实也有看到是说传递新pc值
https://www.javaroad.cn/questions/343534#
但这应该不对。
或者可以这么理解:
因为IF的pc是wire连着IF/ID的if_pc,所以在现阶段IF/ID模块始终拿到现在的pc值,和取到的指令是对应的,只有到下个时钟上升边沿pc才会+4,所以相当于错开了,所以传递过去的不是新pc。
不知道我这样理解对不对,哪个大牛指点一下
--
FROM 125.33.204.*