对两个或多个总是在verilog模块中阻塞工作感到困惑?

时间:2014-06-17 16:15:05

标签: verilog

假设我在verilog模块中有两个始终阻塞。这两个块同时工作吗?

always @(posedge clk) begin
  //some code
 end

always @(Input1 or Input2) begin
  //some logic
end

我知道它们内部的数据是按顺序执行的。如何执行两个块???这个问题令人不安。我需要对它有一个很好的了解。

2 个答案:

答案 0 :(得分:2)

Verilog是一种HDL(硬件描述语言),硬件可以设计有许多并行电路,因此模拟器必须能够模拟设计的并行性。

Verilog语言不能像Scala和GO *等其他并发语言一样使用。

Verilog在时间步长上生成所有并发结果,可以设置为1皮秒。 Delta 周期(在时间步之间)用于计算组合部分并解决反馈。

当clk存在上升沿时,只需要评估

always @(posedge clk)块 当右手参数或if / case语句的输入发生变化时,必须评估always @*或手动感觉列表(不再推荐)。

例如

// Block 1
always @* begin //Sensitivity list would be 'Input1, Input2'
  intermediate = Input1 + Input2;
end

// Block 2
always @* begin //Sensitivity list would be 'intermediate'
  output1 = intermediate >> 1; // divide by 2
end

当Input1或Input2更改时,Block 1将被安排在下一个delta周期进行评估,这将导致Block 2被安排在之后的delta周期中进行评估。 intermediateoutput1的结果将出现在下一个时间步。

在语言参考手册(LRM)中可以阅读更多内容 SystemVerilog IEEE 1800-2012第4节。调度语义

当编程FPGA是可编程逻辑电路而不是CPU时,它将配置并行硬件模块。

*我没有这方面的经验,他们似乎是并行计算的流行语言。如果这是错误的或有更好的例子,请编辑问题。

答案 1 :(得分:0)

更容易将它们视为两个始终在运行的线程。