VHDL中的数组文字

时间:2013-03-01 11:46:35

标签: arrays vhdl

我们已将矢量定义为

A: in std_logic_vector(7 downto 0);

为此向量分配文字时,例如

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

这次探索会占据7,6,5和6的向量位置吗? 4或3,2,1&amp;的位置0

这个想法是一个位向量,我们可以将它们扩展为一个8位整数,但只有当后者为真时它才能正常工作。

4 个答案:

答案 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