如何使模块按顺序运行?

时间:2014-12-02 17:23:01

标签: verilog

在我设计的顶层模块中,我调用了另外两个模块,但它们并行运行。我想先让它们一个接一个地运行,所以一旦完成,另一个就会开始。

我该怎么做?

由于

3 个答案:

答案 0 :(得分:0)

使用推送信号在第一个实例中运行并等待推送信号变为高电平以指示第二个实例化的开始

答案 1 :(得分:0)

也许您可以使用启用信号来控制您的模块。

例如,如果模块A完成后需要激活模块B,

之后,您可以使模块A输出信号作为模块B的使能信号

模块A完成.A的输出信号可以通过复位信号初始化。

答案 2 :(得分:0)

使第一个模块输出DONE信号,该信号在忙碌时保持低电平,并在完成时驱动1。第二个模块应该等到DONE为1之后再执行任何操作。例如,

module A (
    output reg done
);
    initial begin
        done = 0;

        // Do all procesing

        done = 1;
    end
endmodule

module B (
    input done
);
    initial begin
        @(done == 1);  // Wait till done goes high

        // Start processing
    end
endmodule

顺便说一句,这个简单的例子假设模块中的所有代码都在初始块内。如果有多个始终/初始块或组合逻辑,那么确定何时驱动DONE为高可能会变得更加棘手