【问题标题】:Case statement within a case statement案例陈述中的案例陈述
【发布时间】:2013-10-10 19:54:55
【问题描述】:

是否可以合成使用:

  • case 语句中的 case 语句
  • case 语句中的 if 语句
  • if 语句中的 case 语句

我可以编译它没有任何错误,但我仍然不确定它是否会弄乱硬件结构并使其变得复杂。

我这样做的原因:

我有几个状态(状态机),为了让它们遍历所有状态,我使用 case 语句。但是我还需要在其中一些状态中设置一些条件(cases 和ifs),其中一些非常大。

【问题讨论】:

  • 我建议您要小心,否则您将很难尝试合成它。逻辑的长进位链在高时钟速率下会遇到问题。
  • 嵌套 if/case、case/if 或 case/case 是可以的,我假设综合工具处理这就像另一种描述条件代码的方式,就像嵌套 if/if 一样。但是,请记住,该工具必须对您的硬件进行描述,因此请想象您编写的硬件。
  • 不知道我是否应该碰这个话题,但谢谢你是必须的。谢谢!干杯

标签: vhdl fpga intel-fpga


【解决方案1】:

IEEE Std 1076-2008 (LRM) 的附录 J 参考了 IEEE Std 1076.6-2004,IEEE VHDL 寄存器传输级 (RTL) 综合标准,其中支持 case 语句和 case 语句替代方案(实际选择和关联的语句序列)可以指定顺序语句,包括 case 语句。

所以答案是肯定的,通常情况下,您应该期望 case 语句替代方案中的 case 语句能够被合成。特定供应商是否完全支持 1076.6 是一个单独的问题。

【讨论】:

    【解决方案2】:

    合成器没有理由不处理嵌套的ifs 和cases。事实上,我过去已经做过很多次了。

    我想合成器的算法在逻辑实现方面将if 视为case 语句的两个分支版本,因此决策函数的类型不是问题。嵌套它们只会导致它为每个决策创建一组逻辑,在嵌套决策的情况下是级联的。

    如果您发现它不起作用,请提交错误报告!

    当然,如果您有非常严格的时序约束和许多嵌套条件,您可能会发现合成器产生的逻辑虽然正确,但速度不足以满足您的时钟周期目标。在这种情况下,除了重构您的逻辑以减少决策的深度之外,别无他法。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2010-10-30
      • 2016-05-13
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 2012-09-08
      • 2015-01-24
      相关资源
      最近更新 更多