【问题标题】:Sequential instatiation of Verilog ModulesVerilog 模块的顺序实例化
【发布时间】:2018-11-04 19:54:50
【问题描述】:

我正在尝试在具有多个模块的硬件(ZedBoard)上实现算法。有一个顶级模块,我将在顶级模块中实例化所有这些多个模块。

大约有 9 到 10 个模块,其中 3 个必须同时运行,其余的必须顺序运行。

(我知道顶层模块中的所有模块都同时运行。这对于必须同时运行的 3 个模块来说是可以的,但是其他必须按顺序运行的模块呢???)还有(我来了要知道我们不能在 always 或 initial 块中实例化模块,这实际上没有意义)

  1. 有没有办法实例化模块,以便它们按顺序运行(就像一个接一个)????
  2. 另外,有没有办法实例化模块,以便它们有条件地运行????
  3. 这可以用系统生成器实现吗????

仅供参考:我使用的是 Verilog HDL,代码应该是可综合的

【问题讨论】:

  • 我认为您应该使用您的术语(这可能是因为您将 HDL 视为一种标准计算机语言。)在 HDL 中,所有实例化代码同时运行。顺序和/或并行操作取决于您如何连接模块,或者更准确地说。您如何组织/连接数据路径。你可以有例如一个并行处理多个数据路径的模块。或者一个模块对一个数据流顺序执行多个操作。

标签: verilog system-generator


【解决方案1】:

Verilog 描述硬件行为。所有硬件元素本质上都是平行的。因此,verilog 中的所有元素都以并行方式模拟以模拟硬件行为。

模型中的数据可以顺序或并行流动,具体取决于您的连接。如果您将数据应用到输入或元素,该元素将处理数据并更新其输出。作为连接到第一个元素的输出的输入的元素将处理它们的输入并更新输出,依此类推。你可以把它想象成一个管道网。

为了在不同元素之间同步数据流,需要使用时钟来驱动触发器和锁存器。

基本上上面定义了您的verilog模型。

换句话说,verilog 不是常规的编程语言,

1) 安装模块只有一种方法:将它们连接到其他模块和内部电线。

2) 没有办法有条件地运行或不运行模块。您可以拥有可以停止或重新路由数据流的硬件元素,例如多路复用器、锁存器等。幸运的是,行为 verilog 可以用 'if' 或 'case' 语句来描述那些。

3) 任何生成器都无法实现不可能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多