lab3的一些问题
问题:
- 设置
Block Memory Generator的时候,如果勾选Port A Options中的Primitives Output Register会导致存储器输出延迟2个周期。根据我之前看的计组的书,一般情况下应该是1个周期。 - 在
jump和branch指令中,产生跳转信号相比PC会延迟1~2个周期(取决于指令存储器的延迟),因此会多取出1~2个指令,但在实验指导书我没有看到关于阻止多取出的指令执行的内容。 - 由于指令存储器的延迟,会导致产生跳转信号时
PC的值已经不是branch指令的地址了,因此跳转地址的偏移量会计算错误。
关于上述问题,我用了一些解决方法:
- 取消勾选
Primitives Output Register,这样存储器延迟为1个周期。 - 在
mips.v文件中添加插入空指令的逻辑。在检测到跳转信号后,下一个周期会劫持原指令并替换为32'h0000_0024,内容是and 0, 0, 0,是一条没有意义的指令。 - 因为现在存储器延迟为1个周期,因此我使用
PC而非PCplus4,这样可以计算出正确的跳转地址。
但我并不知道我提到的那些问题是我的理解偏差还是真的笔误,也不知道我的解决方法合适不合适,希望能得到关于这些问题的澄清与指导。
Primitives Output Register是在同步时钟控制下,才能输出。单周期cpu模型中,输出是不受时钟控制的
该邮件从移动设备发送
--------------原始邮件-------------- 发件人:"Silent Wang @.>; 发送时间:2024年5月23日(星期四) 晚上6:48 收件人:"lvyufeng/step_into_mips" @.>; 抄送:"Subscribed @.***>; 主题:[lvyufeng/step_into_mips] lab3的一些问题 (Issue #3)
问题:
设置Block Memory Generator的时候,如果勾选Port A Options中的Primitives Output Register会导致存储器输出延迟2个周期。根据我之前看的计组的书,一般情况下应该是1个周期。
在jump和branch指令中,产生跳转信号相比PC会延迟1~2个周期(取决于指令存储器的延迟),因此会多取出1~2个指令,但在实验指导书我没有看到关于阻止多取出的指令执行的内容。
由于指令存储器的延迟,会导致产生跳转信号时PC的值已经不是branch指令的地址了,因此跳转地址的偏移量会计算错误。
关于上述问题,我用了一些解决方法:
取消勾选Primitives Output Register,这样存储器延迟为1个周期。
在mips.v文件中添加插入空指令的逻辑。在检测到跳转信号后,下一个周期会劫持原指令并替换为32'h0000_0024,内容是and 0, 0, 0,是一条没有意义的指令。
因为现在存储器延迟为1个周期,因此我使用PC而非PCplus4,这样可以计算出正确的跳转地址。
但我并不知道我提到的那些问题是我的理解偏差还是真的笔误,也不知道我的解决方法合适不合适,希望能得到关于这些问题的澄清与指导。
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>