ssh可以做wap网站么,wordpress 支付,抖音代运营需要抖音什么条件,wordpress 移动域名这篇文章将讨论 verilog 中两个最常用的结构----if语句和case语句。在之前的文章中学习了如何使用过程块#xff08;例如always块#xff09;来编写按顺序执行的verilog 代码。此外还可以在过程块中使用许多语句----统称为顺序语句#xff0c;如case 语句和 if 语句。这篇文…这篇文章将讨论 verilog 中两个最常用的结构----if语句和case语句。在之前的文章中学习了如何使用过程块例如always块来编写按顺序执行的verilog 代码。此外还可以在过程块中使用许多语句----统称为顺序语句如case 语句和 if 语句。这篇文章将讨论如何在 verilog 中使用这两个语句然后针对这两种语句构造一个简短的示例以展示如何在实践中使用它们。1、Verilog If 语句if 语句是一种条件语句它使用布尔条件来确定要执行哪些 verilog 代码。每当条件判定为真时就执行与该条件对应的代码分支反之亦然。此语句类似于其他编程语言如C语言中所使用的条件语句if。下面的 verilog 代码片段展示了 if 语句的基本语法。if (expression1) begin//要执行的代码
endelse if (expression2) begin//要执行的代码
endelse begin//要执行的代码
end如果不需要可以从语句中排除 else 和 else-if 分支。当然设计者也可以根据需要包含尽可能多的 else-if 分支以正确实现底层电路。在上面的代码片段中这些表达式由expression1 和 expression2 给出。这些表达式按顺序计算如果表达式的计算结果为真则执行与表达式关联的代码反之亦然。if 语句中只有一个分支会被执行----通常是第一个计算结果为真的表达式。唯一的例外是当所有表达式都不为真时在这种情况下将执行 else 分支中的代码。与每个分支关联的代码可以包括任何有效的 verilog 代码包括下一级的 if 语句----这种方法称为嵌套式 if 语句。在 verilog 中使用此类代码时应该注意限制嵌套语句的数量因为它会导致难以满足时序要求。If 语句示例接下来将以用异步复位的D触发器实现的多路选择器作为示例讲解如何使用if语句。下面的电路图是该示例的电路。下面的代码片段展示了如何使用一个 always 块和一个 if 语句来实现预期功能。always (posedge clock, posedge reset) beginif (reset) beginQ 1b0;endelse beginif (addr) beginQ b;endelse beginQ a;endend
end此示例使用的第一个 if 语句在复位时将触发器的输出设置为 0。当复位未使能且always 块被时钟的上升沿触发时----使用第一个 if 语句的 else 分支来处理这种情况。第二个 if 语句用来实现多路选择器电路的功能---这是 verilog 中嵌套式 if 语句的示例。当addr信号为0时输入a的值将赋给触发器的输出嵌套 if 语句的第一个分支将用来捕获此情况。然后嵌套 if 语句的 else 分支被用来捕获 addr 信号为 1 的情况。当然也可以在这里使用 else-if 类型的语句但是 else 语句更简洁。这两种情况下的行为是相同的因为在真实电路中信号只能是 0或 1。2、Verilog Case语句verilog中的case 语句根据设计中给定信号的值选择要执行的代码块。在 verilog 中编写 case 语句时先要指定了一个要进行判断的输入信号然后将此信号的值与 case 语句的每个分支中指定的值进行比较。一旦找到该值的匹配项就执行该值关联的代码分支。Verilog case 语句和C语言等编程语言中的 switch 语句功能类似。下面的代码片段展示了 verilog 中 case 语句的一般语法。case (variable)value1 : begin//当variable value1时执行这条语句endvalue2 : begin//当variable value2时执行这条语句enddefault : begin//其他条件是执行这条语句end
endcase可以不使用语句的default分支----但不推荐。如果不使用语句的default分支就应该把variable 的所有有效值都列举出来。与 if 语句一样与每个分支关联的代码可以包含任何有效的 verilog 代码。这包括下一级的顺序语句例如 if 或 case 语句。同样设计者也应该尽量限制嵌套语句的数量不然设计的时序要求会是个问题。Case语句示例为了更好地演示在 verilog 中使用 case 语句的方式请考虑这样的一个基本示例----简单的4选1多路选择器电路。case 语句经常被用来在 verilog 中实现大型的多路选择器因为它产生的代码比基于连续赋值的实现方式更具可读性。下面的电路图展示了本例中所使用的电路。下面的代码片段展示了如何使用 case 语句来实现这个电路。always (*) begincase (addr)2b00 : beginq a;end2b01 : beginq b;end2b10 : beginq c;enddefault : beginq d;endendcase
end此示例展示了使用 verilog 中的 case 语句实现多路选择器是多么简单的一件事。事实上case 语句是在 verilog 中实现多路选择器的最直观方法。在这个例子中要注意的是使用了阻塞赋值这样做的原因是要实现组合逻辑电路非阻塞赋值则通常会导致在设计中生成触发器。要注意的另一件事是这个例子中可以删除 default 关键字----但应该显式地列出输出 d 值所需的所有潜在的 addr 值。您有任何问题都可以在评论区和我交流本文由 孤独的单刀 原创首发于CSDN平台博客主页wuzhikai.blog.csdn.net您的支持是我持续创作的最大动力如果本文对您有帮助还请多多点赞、评论和收藏⭐