可编程逻辑/Verilog 控制结构
外观
< 可编程逻辑
Verilog 具有许多高级控制结构,可用于执行一定抽象级别上的复杂任务。这些控制结构对于熟悉 C 或 Java 等高级计算机软件语言编程的人来说应该很熟悉。
需要注意的是,并非所有 Verilog 结构都与这些高级控制结构兼容。线和连续赋值通常与这些结构不兼容,尝试将它们组合在一起可能会导致编译错误或综合错误。
IF 结构测试特定条件,如果该条件为真,则执行以下代码语句。IF 块之后可以有一个可选的 ELSE 块,如果条件不为真,则会执行该块。
IF-ELSE 结构可以通过嵌套扩展以考虑超过两种可能性。下面的伪代码示例演示了这一点
if (<condition 1>) <statement 1> else if(<condition 2>) <statement 2> else if(<condition 3>) <statement 3> ... else <statement n>
值得注意的是,将生成额外的资源来处理 IF-ELSE 链中未考虑的条件。这意味着,通常,考虑所有可能性比忽略一些可能性更有效。
只要条件为真,WHILE 循环就会重复执行。在每次循环执行之前都会测试条件。
SWITCH-CASE 结构类似于嵌套的 IF-ELSE 结构,但它们倾向于简化为更有效的硬件结构。
- SWITCH
- CASE
- CASEX
- CASEZ
代码块通过使用关键字 begin 和 end 来指定。代码块可以放在任何单个语句有效的语句处,但需要执行多个语句时除外。
代码块可以嵌套。
在代码块中声明的变量在词法上作用域到该块。
上面描述的代码块可以命名,例如
begin : somename <statement 1> .... <statement n> end
结合前面描述的循环结构,Verilog 对 C 中的 break 命令的更高级等效项是 disable,它接收要退出的块的名称作为参数
while(1) begin : infiniteLoop <... statements ...> if (somecondition) disable infiniteLoop; <... statements ...> end
在测试台中,也可以选择使用 $finish 或 $stop 来中断执行。