移动和添加std_logic_vector(有36但必须有18个元素)

时间:2014-11-07 23:19:04

标签: vhdl fpga intel-fpga quartus

当我尝试这个时,我面临来自quartus的一些奇怪的错误。

这里是代码(所有无符号和其他奇怪的函数都是我试图说服Quartus编译它。)

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

...
variable data : std_logic_vector(17 downto 0) := "000000000000000011";

...

-- 00000000111111000 original
-- 00000000000011111 shifted
-- 00000000000011000 result (AND)

data := std_logic_vector(unsigned(data) & shift_right(unsigned(data), 4));


-- 00000000011111000 original
-- 00000000111110000 shifted
-- 00000000111111000 result (OR)

data := std_logic_vector(unsigned(data) or shift_left(unsigned(data), 1));

我遗漏了很多代码,但破损的部分保持不变。

我正在

  

错误(10344):snake_driver.vhd上的VHDL表达式错误(66):表达式有36个元素,但必须有18个元素

如何正确做到?

1 个答案:

答案 0 :(得分:6)

&运算符与VHDL中的and运算符不同。您正在寻找and运算符来执行按位和操作。 &是向量上的连接运算符,在两个18位向量之间使用它将产生一个36位向量(同样地,向量宽度不匹配),如错误消息所示。