这是一个非常简单的问题,但我还没有能够完成这项工作,也没有任何搜索谷歌或这里发现任何真正有用的东西.
我要做的就是添加两个8位向量并将结果存储在9位向量中.
signal operand1, operand2 : STD_LOGIC_VECTOR(7 downto 0);
signal sum : STD_LOGIC_VECTOR(8 downto 0);
sum <= operand1 + operand2;
Run Code Online (Sandbox Code Playgroud)
但是我收到了警告:
Width mismatch. <sum> has a width of 9 bits but assigned expression is 8-bit wide.
Run Code Online (Sandbox Code Playgroud)
难道VHDL不应该有某种内置例程来知道额外的溢出需要额外的位吗?
我有这些包:
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
Run Code Online (Sandbox Code Playgroud)
也许STD_LOGIC_VECTOR总是签名?如果是这样,那么我需要将它们明确定义为无符号?
ric*_*ick 13
如果您的目标是对信号进行算术运算,那么养成用更适合的工作类型来声明它们的习惯:unsigned或者integer在您的情况下是不错的选择.
请注意,为防止溢出,必须将前导'0'连接到每个操作数,而不是将其连接到结果:
sum <= ('0' & operand1) + ('0' & operand2);
Run Code Online (Sandbox Code Playgroud)