VHDL中if else和case语句之间的主要区别是什么。虽然两者看起来相似但有时会相互替换。但合成后会出现逻辑电路。 我们什么时候去寻找if else或case声明?
答案 0 :(得分:2)
假设if语句和case语句描述了相同的行为,那么在综合工具完成转换和优化之后,得到的电路可能是相同的。
正如Paebbels在评论中所写,相关综合指南中的每个工具都有详细描述,并且可能存在工具相关的情况,其结果可能不同,但作为一般工作假设,则综合工具将获得等同于if语句和case语句的相同电路。
关键点通常是制作正确且可维护的VHDL代码,并且此处可读性计数,因此选择if语句或case语句,具体取决于使代码最直接的原因,以及不要试图通过VHDL结构来控制结果电路,除非有特殊原因需要这样做。
请注意,在if语句中,早期条件优先于稍后,但在case语句中,所有when
具有相同的优先级。
答案 1 :(得分:0)
请记住,VHDL是并行编程语言和声明式编程see here的一种形式,而不是像c / c ++和其他顺序语言那样的过程式编程。
这实际上意味着,您正在告诉或尝试使用您的代码向编译器描述行为应该是什么,而不是具体告诉它要做什么或过程编程的行为是什么样的。这可能是促使您提出问题的原因。
现在请记住,if或case的排序会影响合成。现在使用FPGA,逻辑的所有组合部分都是循环表的形式,内部设计为级联阵列多路复用器组合在一起形成输入数N通常为4 See here for more details的LUT,以及编译器决定如何配置这些LUT数组。
排序会影响编译器在解析输出之前计算的级联多路复用器的数量。
请注意,虽然从理论上讲,if和switch都可以获得相同的行为。 Case正在查看单个变量并为每个可能的结果确定案例,而If语句可以同时应用于多个变量。
那么灵活性?我会说去If。然而,强大的功能带来了巨大的责任,如果它很容易使用来自任何地方的几个信号,如果做得不好可能会导致设计不良,即太多变量的耦合和任何变化都会因为太多的依赖性问题而失败。 Case适用于状态机,但对于我认为的过程语言也是如此。
此外,如果您使用太多不同的信号作为If的条件,它可能会影响时间。这可能意味着你的时钟频率有限,如果你正在高速工作并且列表继续。时钟偏差,需要约束信号等。