假设我在verilog模块中有两个始终阻塞。这两个块同时工作吗?
always @(posedge clk) begin
//some code
end
always @(Input1 or Input2) begin
//some logic
end
我知道它们内部的数据是按顺序执行的。如何执行两个块???这个问题令人不安。我需要对它有一个很好的了解。
答案 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周期中进行评估。 intermediate
和output1
的结果将出现在下一个时间步。
在语言参考手册(LRM)中可以阅读更多内容 SystemVerilog IEEE 1800-2012第4节。调度语义。
当编程FPGA是可编程逻辑电路而不是CPU时,它将配置并行硬件模块。
*我没有这方面的经验,他们似乎是并行计算的流行语言。如果这是错误的或有更好的例子,请编辑问题。
答案 1 :(得分:0)
更容易将它们视为两个始终在运行的线程。