如果我想要并行发生语句,并且在完成所有其他语句时发生另一个语句,例如:
task read;
begin
if (de_if==NOP) begin
dp_op <= 3'b000;
dp_phase = EXEC;
end
else begin
if (de_if==EXEC_THEN) begin
dp_const <= de_src3[0];
dp_src <= de_src3;
dp_op <= {NOP,de_ctrl3};
dp_dest <= de_dest1;
end
else if (get_value(de_ctrl1,de_src1)==dp_mem[de_src2]) begin
dp_const <= de_src3[0];
dp_src <= de_src3;
dp_op <= {NOP,de_ctrl3};
dp_dest <= de_dest1;
end
else begin
dp_const <= de_src4[0];
dp_src <= de_src4;
dp_op <= {NOP,de_ctrl4};
dp_dest <= de_dest2;
end
#1 dp_phase=READ;
end
end
endtask
在此代码中,我希望语句dp_phase = READ
仅在完成所有其他分配后执行,我该怎么做?
你可以看到我所做的是在作业前等待1个钟,但我不知道这是不是这样做了......
答案 0 :(得分:1)
你需要一台状态机。这是以某种顺序使事情发生的规范方式。请记住,使用硬件描述语言并不像常规编程语言...您只是描述您希望硬件具有的行为类型。
要制作状态机,您需要一个状态寄存器,一个或多个触发器,用于跟踪您在所需事件序列中的位置。触发器应该在时钟上升沿更新,但逻辑的其余部分可以纯粹是组合。