Verilog 块语句

2025年3月17日 | 阅读 3 分钟

块语句是将两个或多个语句组合在一起,在语法上类似于单个语句。 Verilog 中有两种类型的块

  • 顺序块
  • 并行块

如果需要执行多个语句,可以使用这些块。 顺序 块中的所有语句将按照给定的顺序依次执行。

如果块中出现时间控制语句,则下一个语句将在该延迟后执行。 顺序块应由关键字 begin 和 end 划定界限。

并行 块中的所有语句同时或并发执行。 这意味着即使前一个语句包含时间控制语句,下一个语句的执行也不会延迟。 并行块应由关键字 fork 和 join 划定界限。

顺序块

使用 beginend 关键字包装语句,并按照给定的顺序依次执行。 延迟值相对于前一个语句的执行时间处理。

块内的所有语句执行完毕后,控制权可以传递到其他地方。

Verilog Block Statements

语法

顺序块语句遵循以下语法

特性

顺序块具有以下特征,例如

  • 语句将按顺序一个接一个地执行。
  • 每个语句的延迟值都相对于前一个语句的执行的模拟时间来处理。
  • 最后一个语句执行后,控制可以从块中传出。

示例

在上面的示例中,begin 和 end 块中的第一个语句将在 10 个时间单位执行,而第二个语句将在 30 个时间单位执行,因为它是相对的。 这是在前一个语句执行后 20 个时间单位。

并行块

并行 块可以并发执行语句,并且可以使用延迟控制来提供赋值的时间顺序。 通过将语句包装在 forkjoin 关键字中来并行启动语句。

语法

并行块具有以下简化语法

特性

并行块具有以下特征

  • 语句将并发执行。
  • 每个语句的延迟值被认为是相对于进入块的模拟时间。
  • 延迟控制可用于为赋值提供时间顺序。
  • 最后一个按时间顺序排列的语句执行时,控制可以从块中传出。

示例


Verilog Block Statements

在上面的示例中,fork 和 join 块将在执行 10 个时间单位的语句后启动。

此块中的语句将并行执行,第一个语句将是数据被赋值为 8'h00 的语句,因为它的延迟是在 fork-join 启动后的 10 个时间单位。

再过 10 个时间单位后,第一个语句将被启动,并且数据将获得值 8'h11。


Verilog Block Statements

在上面的示例中有一个 begin-end 块,begin-end 块中的所有语句将按顺序执行。 尽管如此,该块本身将与其它语句一起并行启动。 数据将在 20 个时间单位获得 8'h11,在 30 个时间单位获得 8'h00,在 60 个时间单位获得 8'haa。

块的命名

顺序块和并行块都可以通过在 beginfork 关键字之后添加 name_of_block 来命名。 通过这样做,可以在 disable 语句中引用该块。


下一话题Verilog 赋值