你有什么意思:案件状态是当vale1 => vhdl中的州< = value2?

时间:2015-06-11 08:05:50

标签: vhdl

这行代码让我感到困惑。我不知道它是如何工作的,我知道=><=正在分配符号,但为什么要分配同一个东西?

1 个答案:

答案 0 :(得分:3)

大卫指出,=>不是作业符号。

它是映射符号或关联。它的使用在整个VHDL中是一致的 - 它总是用于将某些东西(通常是名称)与其他东西(通常是一个值)相关联。

这里,在case语句中,它用于将案例选择when vale1与该状态的正确操作相关联,该操作可以是任何有效的语句序列。在这种情况下,state <= value2;

您可能会发现编写更清晰

case state is
   when vale1 =>
      state <= value2;
   when ...
      ...
   when others =>
      state <= idle;
end case;

这使得逻辑结构比尝试在一行中做得太多更清晰。

您将在参数列表中看到的其他地方。给定一个具有多个参数的函数(其中一些是可选的),您可能已经看到错误蔓延到其他语言的程序中,其中值与错误​​的参数相关联...

setPixelColour (100, 50, 17, 0.5);   -- not obvious, prone to mistakes

您可以更清楚地了解正在发生的事情,并通过将每个参数与其名称相关联来避免错误:

setPixelColour ( x => 100, 
                 y => 50, 
                 alpha => 17, 
                 opacity => 0.5);   -- obvious what you're trying to do

端口映射也是如此,您可以将信号连接到组件的端口。

正如大卫所说,另一个用途是创建聚合,例如记录或数组。

如果您定义了Employee记录,则可以声明

Boss : Employee := (Name => "Richard Branson", Job => CEO, Salary => 999000);

或者您可以使用聚合创建数组:

type Month is (Jan, Feb, Mar, ... Dec);   -- we'll index the array with an enumeration
Days : array (Month range Jan to Dec) of Natural := (
   Feb => 28,
   Apr => 30,
   Jun => 30,
   Sep => 30,
   Nov => 30,
   others => 31);