always块执行顺序
时间: 2023-08-08 20:10:30 浏览: 129
在 Verilog 中,`always` 块用于描述组合逻辑和时序逻辑。根据 `always` 块的敏感列表,它可以分为两种类型:组合逻辑 `always @(*)` 和时序逻辑 `always @(posedge clk)`。
对于组合逻辑 `always @(*)`,当敏感列表中的任何一个信号发生变化时,都会触发 `always` 块内部的代码执行。因此,组合逻辑 `always @(*)` 的执行顺序是从上到下,按照代码编写的顺序依次执行。
对于时序逻辑 `always @(posedge clk)`,它只有在时钟上升沿时才会触发内部代码的执行。因此,时序逻辑 `always @(posedge clk)` 的执行顺序是根据时钟信号的上升沿而定,而不是代码编写的顺序。在同一个时钟周期内,时序逻辑 `always @(posedge clk)` 的代码执行顺序同样是从上到下,按照代码编写的顺序依次执行。
相关问题
Verilog 的always 块里的执行顺序
在 Verilog 中,always 块的执行顺序是由敏感列表(sensitivity list)和代码中的顺序决定的。
敏感列表指定了当其所列出的信号发生变化时,always 块应该执行。如果敏感列表为空,则 always 块将永远不会被执行。在 always 块中,代码的执行顺序是从上到下,即按照它们在代码中出现的顺序执行。
需要注意的是,always 块中的代码应该是并发执行的,因为 always 块会在仿真时被重复执行。因此,always 块中不应该使用顺序结构(例如,if/else 语句)来控制代码的执行顺序,而应该使用并发结构(例如,case 语句)来实现。
verilog中多个always块执行有顺序之分吗
在 Verilog 中,如果有多个 always 块,并且它们使用同样的敏感信号(sensitivity list),那么它们的执行顺序是未定义的(undefined order),这意味着编译器可以按任意顺序执行这些 always 块。因此,应该避免在同一个模块中使用多个 always 块来驱动同一个敏感信号。如果必须使用多个 always 块,建议使用不同的敏感信号,以确保它们的执行顺序与编写者的预期一致。