VHDL中的Case语句

4
在VHDL编程中,您可以在case语句中使用变量吗?这个变量将会被其中一个case修改。
例如:
case task is

when 1 =>

when 2 => 

when number =>

这个可以吗?


1
可能值得发布更多的代码,这样我们就可以看到您打算如何使用变量!如果您计划编写用于综合的代码,则必须确保不使用变量来维护状态,而仅用于临时计算结果。 - Binary Nerd
@Binary Nerd:为什么你不能使用变量来存储状态?这里是标准做法。 - Martin Thompson
最终取决于OP想要实现什么,这是一个巨大的未知数... 如果他/她打算这样做,他/她肯定可以使用(希望已注册的)变量来维护状态。 - vladr
1个回答

3

模拟还是综合?

无论哪种方式,根据文档

选择必须是与表达式相同的离散类型的常量

使用if来测试number,可以选择以下任一方法:

if task=number then
  ...
else
  case task is
    when 1 => ...
    when 2 => ...
    when others => ...
  end case;
end if;

或者

case task is
  when 1 => ...
  when 2 => ...
  when others =>
    if task=number then
      ...
    else
      ...
    end if;
end case;

您的选择取决于您是否希望 if task=number 测试或 when ... => 测试的结果具有优先级? (例如,假设出于某种原因 number=1,你想要 when 1 => 还是 if task=number 最终提供您的结果?)
在微不足道的情况下,case 语句会合成为多路复用器;if 语句会合成为比较器和两个输入的多路复用器。其中一个输入馈入另一个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接