跳转到内容

可编程逻辑/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

[编辑 | 编辑源代码]

SWITCH-CASE 结构类似于嵌套的 IF-ELSE 结构,但它们倾向于简化为更有效的硬件结构。

SWITCH
CASE
CASEX
CASEZ

代码块

[编辑 | 编辑源代码]

代码块通过使用关键字 beginend 来指定。代码块可以放在任何单个语句有效的语句处,但需要执行多个语句时除外。

代码块可以嵌套。

在代码块中声明的变量在词法上作用域到该块。

代码块的命名和退出

[编辑 | 编辑源代码]

上面描述的代码块可以命名,例如

 begin : somename
   <statement 1>
   ....
   <statement n>
 end

结合前面描述的循环结构,Verilog 对 C 中的 break 命令的更高级等效项是 disable,它接收要退出的块的名称作为参数

 while(1) begin : infiniteLoop
   <... statements ...>
   if (somecondition) disable infiniteLoop;
   <... statements ...>
 end

在测试台中,也可以选择使用 $finish 或 $stop 来中断执行。

华夏公益教科书