这是什么意思 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);
这行代码让我很困惑。我不明白它是如何工作的,我知道 =>
和 <=
正在分配符号,但为什么对同一事物进行 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);