VHDL - 向量和位之间的AND操作

时间:2013-03-05 16:25:41

标签: vhdl

我从VHDL开始,我在尝试为端口添加启用时遇到问题。我有一个8位的输出向量,如果“Enable”位输入为'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; 但它不起作用......

我可以使用“if”,但我更喜欢用这种方式来理解如何做到这一点。

2 个答案:

答案 0 :(得分:3)

使用另一个相同大小的向量,用(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);

答案 1 :(得分:3)

执行此操作的一种简洁方法是使用条件信号分配:

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

...作为奖励,当启用较低时,您可以指定任何您想要的值(即使是不同的信号矢量)。