这行代码让我感到困惑。我不知道它是如何工作的,我知道=>
和<=
正在分配符号,但为什么要分配同一个东西?
答案 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);