这是什么意思 whe have: case state is when vale1 => state <= value2 in vhdl?

What does it mean whe you have: case state is when vale1 => state <= value2 in vhdl?

这行代码让我很困惑。我不明白它是如何工作的,我知道 =><= 正在分配符号,但为什么对同一事物进行 2 次分配?

正如大卫指出的那样,=> 不是赋值符号。

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

在这里,在 case 语句中,它用于将 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

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

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

如果您定义了一个员工记录,那么您可以声明

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);