我想执行以下操作,
我有一个std_logic_vector(1 downto 0)输入。我应该把它扩展到四位;
喜欢11 => 0011
或10 => 0010
我尝试了这个但它失败了。
(Data0 is declared as input at entity port list)
Signal Data0_4bit: std_logic_vector(3 downto 0) :=B"0000";
Data0_4bit(1 downto 0)<=Data0(1 downto 0);
提前致谢。
答案 0 :(得分:4)
VHDL不会允许这样做,因为你试图双重分配Data0_4bit
的底部两位(一旦在声明中,再次为你指定Data0)。
尝试使用连接运算符在单个操作中分配整个向量:
Signal Data0_4bit: std_logic_vector(3 downto 0) := B"00" & Data0(1 downto 0);
或者,您可以将分配分为两行:
Signal Data0_4bit: std_logic_vector(3 downto 0); -- note that Data0_4bit is only declared here, not assigned a value
Data0_4bit(3 downto 2) <= B"00"; -- assign top two bits to 0
Data0_4bit(1 downto 0) <= Data0(1 downto 0); -- assign bottom two bits to Data0
免责声明:我编写VHDL已有10年了,而且我没有办法测试该代码。
答案 1 :(得分:0)
更一般地说:
signal Data1: std_logic_vector(M downto 0);
signal Data0: std_logic_vector(N downto 0); -- N < M
data1(data0'range) <= data0;
data1(data1'high downto data0'length) <= (others => '0');
答案 2 :(得分:0)
您可以使用数字标准包中为有符号和无符号类型定义的resize函数:
use ieee.numeric_std.all;
(...)
Data0_4bit <= std_logic_vector( resize(unsigned(Data0), Data0_4bit'length)); --