|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
我最近在写verilog的mips。。。是用pipeline写的参考的一本 computer organization and design, hardware/software
我有两个问题:
1. stall 跟 forward不能放在一起写。
上面把stall 跟forward放在一起了。
但是我写完分析结果发现结果不对。
而且我觉得forward是stall的替代方案,不能放在同一个pipeline里面写吧。因为stall 是因为有往同一个register写或者读在三个pipeline之内,比如EX, MEM, WB产生hazard。
而 forward也是在上面三个pipeline之内检测,然后forward回EX stage的 alu 的输入。
如果hazard detection and forward unit 同时存在一个电路的话会有问题的。
2. 这样又有个问题,如果只有forward的话。如果我们运算完数据。 ADD SUB ,下一条语句是 sw: store to the memory. 这个时候就有问题了,因为sw上面的一条语句, Let's say it's a addition. 这个addtion的结果必须先存回到register里面,然后后面的SW才能从相应的regsiter读出数据,存到memory. 这个时候就需要stall 大概从ID, EX, MEM, WB,这几个stage. 但是我这个时候写的时候仿真结果就是完全不出来了。我在stall 是用的这个: if (opode == sw && rt != dst_wb) 这个语句就不对了,但是奇怪的是如果用上面问题1 也就是那本书上的stall的if 语句就对。那个if是这么写的: if(mem_read_ex && rt_ex == rs_id || rt_ex == rt_id).
不知道是为什么。。。。
我写的有点多并且有点乱,希望各位前辈慢慢看完。。。
小弟在这谢过了。~~~~ |
|