实现ori指令后,还得解决流水中数据相关的事,MIPS中只需要解决RAW(在写操作后读),利用数据前推解决
相隔两条指令, 通过标志位判断直接把回写的内容作为读入译码的数据。
仿真出错原因:(很重要)
- 在顶层模块中,忘记一个口出来的数据两个流入是不需要再重新命名线的,真的用一个线的名字就好。错误特征:变量是高阻态Z的形态。
- 多驱动数据,在两个always块内给一个变量赋值,所以最后是xxxxx显示。起因:一直在分析 数据赋值情况,并且被有流水线转成的圈给绕晕,于是求助马哥,马哥一语道出关键:”看出错的周期,是在第二条指令的译码阶段没有读到数据,所以要去查看第一条指令有没有正确把数据读入寄存器。然后发现我多得赋值了,,,,属于是刚学的时候肯定不会犯的错误,但是时间一久就忘记了
后话:感觉自己常常只有下意识,缺少自己的思考