VHDL中If-else和Case语句之间的区别


11

我想了解如何在RTL中综合VHDL代码中的不同构造。

  • 谁能告诉我VHDL中流程的If-Else构造和 Case语句构造之间的区别,即如何通过综合工具将代码推断到RTL电路中?
  • 一定要考虑多个嵌套if-else的情况,并在一个进程内将case语句与if-else构造混合在一起
  • 还有什么时候使用哪种构造?

PS:我已经看到一个相关的问题“ vhdl中正在处理多个if语句”,但是无论如何都无法回答我的问题。


我无法评论物理门的配置方式,但是在大多数发出x86汇编程序的编译器中,if-else通常作为带有条件跳转的单个检查存在(例如jg,jl,jz,jnz等),而switch以数字顺序组织案例并执行迭代dec/ jz指令,这效率更高。也许在这里应用了类似的优化。
多项式

@Polynomial与典型的线性编程相比,If-else和case的行为在硬件语言中有很大不同。由于HDL语句“立即”执行,因此操作码优化不是很相关。
W5VO 2013年

Answers:


10

谁能告诉我VHDL中流程的If-Else构造和Case语句构造之间的区别,即如何通过综合工具将代码推断到RTL电路中?

if-elsif-else构造推断优先级路由网络:

原理图

模拟该电路 –使用CircuitLab创建的原理图

这对应于

if bool_expr_1 then
    sig <= val_expr_1;
elsif bool_expr_2 then
    sig <= val_expr_2;
elsif bool_expr_3 then
    sig <= val_expr_3;
else
    sig <= val_expr_4;
end if;

case另一方面,该构造可以推断出一个很大的混合体:

在此处输入图片说明

这对应于

case case_expr is
  when c0 =>
    sig <= val_expr_0;
  when c1 =>
    sig <= val_expr_1;
  when c2 =>
    sig <= val_expr_2;
      ...
  when others =>
    sig <= val_expr_N;
end case;

显然,这些是非常简化的设计,仅具有一个值表达式,从而产生一个输出。

一定要考虑多个嵌套if-else的情况,并在一个进程内将case语句与if-else构造混合在一起。

通过上面的内容,您可以看到它们如何嵌套/混合。

还有什么时候使用哪种构造?

由于if-else推断出优先级,因此当可能出现多个输入条件时应使用该优先级。使用case中,一个另一方面,当输入是相互排斥的是适当的。


我知道案例陈述仅适用于单个输入条件,而if-else则适用于多个输入条件。但是这两种结构本质上都会生成多路复用器(在没有clk的情况下)。逻辑综合是否有可能优化单个输入if-else而不是单个mux,而不是单个mux?另外,什么是优先级路由网络...这不是简单的多路复用器链,而不是1个大多路复用器吗?
nurabha

另外,当我们有一个对时钟敏感的过程时,if-else可以生成顺序元素,例如寄存器,锁存器等。case语句还可以生成顺序逻辑吗?
nurabha

是的,优先级路由网络恰恰就是-多路复用器。if-else但是,构造的性质是该链出现的地方。第一个条件必须失败才能测试第二个条件。case构造不是这样的,这就是为什么if-else不能将一个语句作为单个大复用器进行合成的原因。
Angelo Stavrow 2013年

1
是的,一条case语句也可以生成顺序逻辑。我找到了“真实世界VHDL”,这是格拉斯哥大学的一系列演讲幻灯片,可能对您有所帮助。
Angelo Stavrow 2013年

这是一个很好的参考。
nurabha

4

此旧博客文章中,作者编写并合成了两个功能等效的VHDL代码版本。一个使用if-else,另一个使用案例。结果:

我合成了这段代码并获得了准确的结果,即使两个程序的RTL原理图也完全相同。

他的结论是:

这表明'case'和'if ... elsif ... else'语句都同样有效。但是,如果您想编写清晰的代码,则最好使用'case'。当输出取决于大量条件。但是,如果条件数量很少(2或3),则可以使用'if..elseif..else'。

关于每种可能的语言,在Stack Overflow上也有许多关于此主题的文章。结论通常是相同的,即在性能方面没有区别。有时,如果存在大量情况,则编译器可能足够聪明,可以创建一个查找表,从而产生更好的性能。

VHDL合成器可能能够执行类似的操作。但是您仍然需要大量的案例,在这种情况下(双关语意味深长),您可能仍想使用一个case语句,因为它在存在大量选项的情况下提供了更好的可读性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.