0

我们定义了一个向量

A: in std_logic_vector(7 downto 0);

将文字分配给此向量时,例如

A <= {'1', '0', '0', '1'};

这个表达式会填充 7、6、5 和 4 的向量位置还是 3、2、1 和 0 的位置

这个想法是一个位向量,我们可以将其符号扩展到一个 8 位整数,但它目前仅在后者为真时才有效。

4

4 回答 4

3

此处语法无效。如果要将各个位保留为列表,则可以进行分配:

A(3 downto 0) <= (3 => '1', 2=> '0', 1=> '0', 0=> '1') ;

奖金符号扩展:

A <= (2=> '0', 1=> '0', 0=> '1', others => '1') ;
于 2013-03-01T16:14:21.713 回答
1

我不认为这是合法的——至少在赛灵思 ISE 中是不合法的。

正确的做法是指定要分配的 A 部分:

A(3 downto 0) <= "1001";
于 2013-03-01T12:00:09.787 回答
1

为什么使用单个位作为数字常量?有什么原因你不做类似的事情:

A <= std_logic_vector(to_signed(-7,A'length));

如果您从 A 开始是有符号类型,则可以摆脱 std_logic_vector 强制转换,如果您不想要符号扩展,则可以使用无符号类型和转换函数。

于 2013-03-01T19:48:11.360 回答
0

如果您想要符号扩展,请使用适当的类型signed

然后,您可以-1使用该函数将适当的数字(如 )转换为适当宽度的向量to_signed,例如:

to_signed (-1, a'length)

这样做优于显式位设置的优点是:

  • 更简单的代码
  • 每个人都可以阅读并理解您在做什么(无需评论!)
  • a改变长度时,这一切(仍然)Just Works
于 2013-03-05T10:16:17.467 回答