在流水线处理器设计中,为什么要在半周期内执行寄存器文件的读/写操作?

问题描述

我正在David Money Harris和Sarah L. Harris所著的“数字设计和计算机体系结构(第二版)”一书中了解流水线式MIPS处理器设计。

在第7.5.3节“危害”中说(第415页):

可以在同一周期内读写寄存器文件。写操作发生在周期的前半部分,而读取发生在周期的后半部分,因此可以在同一周期中对寄存器进行写和读操作,而不会造成危险。

我的问题是:为什么不能同时读取和写入寄存器文件

实际上,我的问题与this stackexchange one非常相似,但是那里的答案并不能使我完全清楚。另外,由于缺乏声誉,我也不允许在这里发表评论,所以我开始提出这个问题。

我认为对于一个具有2个读端口和1个写端口的SRAM寄存器文件,如in wikipedia所示,同时读写同一地址似乎是完全合法的。尽管写操作将导致存储在交叉耦合反相器中的位不稳定一段时间,但随着流水线处理器的时钟周期足够长,这些位将变得稳定。因此,完全组合的读取操作可以获取正确的数据。那为什么不同时读写呢?

我的第二个问题是,如果我们必须使用本书建议的寄存器文件(在上半周期中读取并在后半周期中写入),那么如何将该寄存器文件实现为电路?

我幼稚的解决方案是重新定义寄存器文件write_enableread_enable信号。让write_enable = write_enable & clockread_enable = read_enable & ~clock。但是,这本书似乎建议您写一些不完善的文章,请参阅HDL示例7.6注册文件代码注释(第435页):

对于流水线处理器,在clk的下降沿写入第三个端口

我假设一个时钟周期在上半部分从1开始,然后在下半部分下降到0。因此,我觉得在下降沿进行写操作实际上会导致在时钟周期的后半部分而不是前半部分进行写操作。更重要的是,它并不能确保在周期的后半部分阅读。如何运作?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)