当我尝试编译我的代码时,在以下部分中出现错误:
overflow <= input_a(15) + input_b(15);
我已将input_a和input_b声明为15位向量,而我正在使用的库是:
library ieee;
use ieee.std_logic_1164.all;
所以错误是:
Error (10327): VHDL error at alu16.vhd(45): can't determine definition of operator ""+"" -- found 0 possible definitions
提前致谢
答案 0 :(得分:3)
如果input_a
和input_b
为std_logic_vector
,则input_a(15)
和input_b(15)
为std_logic
,但VHDL没有+
为std_logic
定义的运算符,因此错误。
如果要根据两个std_logic
值生成结果,则标准逻辑运算符为and
,or
,xor
和{{1}可用,这就足够了。
答案 1 :(得分:1)
如果您想执行算术运算,您应该声明signed
/ unsigned
信号,而不是bit_vector
/ std_logic_vector
。
这些最后的类型只能用于and
/ or
之类的逻辑运算......因为编译器不知道您是希望信号是有符号还是无符号。< / p>
使用有符号/无符号类型时,您必须使用IEEE numeric_std
包。
答案 2 :(得分:0)
尝试包含未签名的库...它对我有用! 我列出了图书馆,我可以做总和
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;
答案 3 :(得分:-1)
添加: 使用ieee.std_logic_unsigned.all; 所以你可以使用操作+ - ...与std_logic