我们已将矢量定义为
A: in std_logic_vector(7 downto 0);
为此向量分配文字时,例如
A <= {'1', '0', '0', '1'};
这次探索会占据7,6,5和6的向量位置吗? 4或3,2,1&amp;的位置0
这个想法是一个位向量,我们可以将它们扩展为一个8位整数,但只有当后者为真时它才能正常工作。
答案 0 :(得分:3)
此处的语法无效。如果要将各个位保留为列表,可以进行分配:
A(3 downto 0) <= (3 => '1', 2=> '0', 1=> '0', 0=> '1') ;
奖金标志延期:
A <= (2=> '0', 1=> '0', 0=> '1', others => '1') ;
答案 1 :(得分:1)
我不认为这是合法的 - 至少它不在Xilinx ISE中。
正确的方法是指定要分配的A部分:
A(3 downto 0) <= "1001";
答案 2 :(得分:1)
为什么使用单个位作为数字常量?有什么理由你没有做类似的事情:
A <= std_logic_vector(to_signed(-7,A'length));
如果你是A的签名类型,你可以摆脱std_logic_vector强制转换,如果你不想签名扩展,你可以使用无符号类型和转换函数。
答案 3 :(得分:0)
如果您需要签名扩展名,请使用相应的类型signed
。
然后,您可以使用-1
函数将正确的数字(如to_signed
)转换为适当宽度的矢量,例如:
to_signed (-1, a'length)
在显式位设置上执行此操作的优点是:
a
更改长度时,全部(仍然)Just Works