1

我从 VHDL 开始,尝试向端口添加启用时遇到问题。我有一个 8 位的输出向量,如果“启用”位输入为“1”,我想输入一个值。否则,在向量中放置一个“0”。

我会做:

out(0) <= '0' AND Enable;
out(1) <= '0' AND Enable;
out(2) <= '1' AND Enable;
out(3) <= '0' AND Enable;
out(4) <= '1' AND Enable;
...
out(7) <= '0' AND Enable;

有一种简单的方法可以做到这一点吗?我在想:out <= "01010100" AND Enable; 但它不起作用......

我可以使用“如果”,但我更喜欢用这种方式来理解如何去做。

4

2 回答 2

4

它与另一个相同大小的向量,初始化为(others => Enable)

一个更完整的例子:

subtype Data_Word is std_logic_vector(7 downto 0);

signal Out, Value, Mask : Data_Word;
...
Mask <= (others => Enable);
Out <= Value and Mask;

或者也许只是

Out <= Value and (Out'Range => Enable);
于 2013-03-05T16:45:24.917 回答
4

一个整洁的方法是使用条件信号分配:

Out <= Value when Enable = '1' else (others=>'0');

...作为奖励,当 Enable 为低时,您可以分配您想要的任何值(甚至是不同的信号向量)。

于 2013-03-05T17:45:16.200 回答