有时,有不止一种方法可以做某件事。好的,大部分时间是,你可以在很多方面用VHDL做事情。根据另一个信号的值,查看您想要为信号分配不同值的情况。
选择的信号分配
最具体的方式做到这一点是因为选择的信号分配。根据b
的几个可能值,您将值分配给a
。这里的代码没有冗余。
with a select b <=
"1000" when "00",
"0100" when "01",
"0010" when "10",
"0001" when "11";
条件信号分配
一个条件信号分配的构建体是一个小更普遍。对于每个选项,您必须提供一个条件。这意味着你可以写任何布尔表达式作为条件,这给你比平等检查更多的自由。虽然这个构造会给你更多的自由,但也有更多的冗余。我们必须在每一行上写相等检查(a =
)。如果你使用一个名字很长的信号,这会让你的代码变得笨重。此外,在选定的信号分配中使用的分隔符是逗号。在条件信号确认中,您需要else
关键字。更多相同功能的代码。
b <= "1000" when a = "00" else
"1000" when a = "01" else
"1000" when a = "10" else
"1000" when a = "11";
与Case语句
最通常使用的构建体组合型过程是一个过程。在这个过程中,你可以编写一个case语句或if语句级联。这里有更多的冗余。你是一个进程的框架代码(开始,结束)和敏感列表。这不是一个很大的努力,但是当我起草这个时,我已经把b
放在灵敏度列表中,而不是a
。容易犯小错误。您还需要指定other
个案中发生的情况。
process(a)
begin
case a is
when "00" => b <= "1000";
when "01" => b <= "0100";
when "10" => b <= "0010";
when "11" => b <= "0001";
when others => assert "unreachable" severity failure;
end case;
end process;
尽管这最后的代码片段是最大的,也许是最容易出错的,但它也可能是最常见的。它使用两个熟悉的和经常使用的构造:过程和案例陈述。
与所选择的条件和信号分配的问题是,有在它们的语法没有系统。含义是几乎与相同,但是语法不同,足以让你失望。我知道许多工程师永久拥有VHDL的Doulos黄金参考指南的副本躺在他们的办公桌上。这对Doulos来说很好,因为他们的名字一直都被提及。
使它成为CW ...你正在诱惑我关闭。 – Shoban 2009-06-22 06:23:03
我不知道该怎么做。如果可以的话,请这样做。 – 2009-06-22 06:24:06