我们定义了一个向量
A: in std_logic_vector(7 downto 0);
将文字分配给此向量时,例如
A <= {'1', '0', '0', '1'};
这个表达式会填充 7、6、5 和 4 的向量位置还是 3、2、1 和 0 的位置
这个想法是一个位向量,我们可以将其符号扩展到一个 8 位整数,但它目前仅在后者为真时才有效。
此处语法无效。如果要将各个位保留为列表,则可以进行分配:
A(3 downto 0) <= (3 => '1', 2=> '0', 1=> '0', 0=> '1') ;
奖金符号扩展:
A <= (2=> '0', 1=> '0', 0=> '1', others => '1') ;
我不认为这是合法的——至少在赛灵思 ISE 中是不合法的。
正确的做法是指定要分配的 A 部分:
A(3 downto 0) <= "1001";
为什么使用单个位作为数字常量?有什么原因你不做类似的事情:
A <= std_logic_vector(to_signed(-7,A'length));
如果您从 A 开始是有符号类型,则可以摆脱 std_logic_vector 强制转换,如果您不想要符号扩展,则可以使用无符号类型和转换函数。
如果您想要符号扩展,请使用适当的类型signed
。
然后,您可以-1
使用该函数将适当的数字(如 )转换为适当宽度的向量to_signed
,例如:
to_signed (-1, a'length)
这样做优于显式位设置的优点是:
a
改变长度时,这一切(仍然)Just Works