VHDL 中的案例陈述与 If else

Case statement vs If else in VHDL

VHDL 中 if else 和 case 语句的主要区别是什么。虽然两者看起来很相似并且有时会替换每个other.but合成后出现的逻辑电路我们什么时候应该 去寻找 if else 或 case 语句?

假设 if 语句和 case 语句描述相同的行为,那么在综合工具完成翻译和优化后,生成的电路很可能是相同的。

正如 Paebbels 在评论中所写,相关综合指南中描述了每个工具的详细信息,可能存在结果可能不同的工具相关情况,但作为一般工作假设,综合工具将获得等效的 if 语句和 case 语句的相同电路。

关键点通常是编写正确且可维护的 VHDL 代码,这里的可读性很重要,因此根据使代码最直接的方式选择 if 语句或 case 语句,并且不要试图通过 VHDL 结构来控制生成的电路,除非有特定的原因需要这样做。

请注意,在 if 语句中,前面的条件优先于后面的条件,但在 case 语句中,所有 when 具有相同的优先级。

请记住,VHDL 是并行编程语言,是声明式编程的一种形式 see here,与 c/c++ 和其他顺序语言等过程式编程相对。

从本质上讲,这意味着您是在告诉或试图用您的代码向编译器描述行为应该是什么,而不是具体告诉它做什么或过程编程的行为是什么样的。这可能是促使您提出问题的原因。

但是请记住,if 或 case 的顺序会影响合成。现在的 FPGA,逻辑的所有组合部分都采用循环表的形式,循环表在内部设计为级联数组多路复用器组合在一起形成输入编号 N 通常为 4 See here for more details 的 LUT,编译器决定如何配置这些 LUT 数组。

排序会影响编译器在解析输出之前计算的级联多路复用器的数量。

请注意,虽然在理论上,if 和 switch 可以获得相同的行为。 Case 正在查看单个变量并为每个可能的结果决定案例,而 If 语句可以同时应用于多个变量。

这么灵活?我会说如果。然而,能力越大,责任越大,如果容易的话,它会使用来自各个地方的多个信号,如果做得不好,可能会导致糟糕的设计,即太多变量的耦合,任何变化都会因太多的依赖问题而失败。 Case 适用于状态机,但我想这也适用于过程语言。

此外,如果您使用太多不同的信号作为 If 的条件,它会影响时序。如果您正在高速工作并且列表还在继续,这可能意味着您的时钟频率受到限制。时钟偏差,需要约束信号等