我从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”,但我更喜欢用这种方式来理解如何做到这一点。
答案 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');
...作为奖励,当启用较低时,您可以指定任何您想要的值(即使是不同的信号矢量)。