我目前正在使用流水线为RISC处理器开发循环精确模型。我使用我讲师的一些代码示例编写了管道衬里方法的代码,但它不起作用。我对以下功能感到困惑:
void rf (int RS1, int RS2, int RD, dramcmdT cmd1, dramcmdT cmd2, dramcmdT cmd3, int din, int *dout1, int *dout2)
{
static int array[32];
if (cmd1 == RD)
*dout1 = array[RS1];
if (cmd2 == RD)
*dout2 = array[RS2];
if (cmd3 == WR)
array[RD] = din;
}
RS1,RS2,RD是我发送的一些整数值,cmd1和cmd2始终是RD,cmd3始终是WR。所以基本上所有if语句都应该执行,但它们不会。我总是在dout1和dout2中得到零。我问我的讲师是否* dout1 = array [RS1]是一个正确的符号,他说这是正确的,但我不明白它是做什么的,为什么我在dout1和dout2中得到零?是否有人熟悉这种符号?
答案 0 :(得分:1)
如何在array
中设置值?唯一可以写的值是array[RD]
。根据您的描述,RD
是一个常量。所以,你只能初始化数组的一个元素。
或者,RD
不是常量,在这种情况下,cmd1 == RD
和cmd2 == RD
是什么?
将RD
重复使用作为命令和数组索引是非常不寻常和令人困惑的。
哦,BTW,*dout1 = array[RS1]
是正确的表示法。那不是问题。