Vhdl I';我在使用sll时出错
问题是我想使用这个Vhdl I';我在使用sll时出错,vhdl,Vhdl,问题是我想使用这个sll命令,但是我得到了这个错误(在图片中)。我知道答案 bp := bp(0 to 6) & '0'; 声明,但我还是想用这个sll。有人能帮忙吗 错误行: 上一班的第五名 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.numeric_std; entity mul is port( a, b : in std_logic_ve
sll
命令,但是我得到了这个错误(在图片中)。我知道答案
bp := bp(0 to 6) & '0';
声明,但我还是想用这个sll。有人能帮忙吗
错误行:
上一班的第五名
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std;
entity mul is
port(
a, b : in std_logic_vector(0 to 3);
c : out std_logic_vector(0 to 7));
end mul;
architecture mul of mul is
begin
process(a, b)
variable bp, p : std_logic_vector(0 to 7);
begin
bp := "0000"&b;
p := "00000000";
for k in 0 to 3 loop
if a(k) = '1' then
p := p + bp;
end if;
bp := bp sll 1;
end loop;
c <= p;
end process;
end mul;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_unsigned.all;
使用ieee.numeric_标准;
实体mul是
港口(
a、 b:标准逻辑向量(0到3);
c:输出标准逻辑向量(0到7);
末端mul;
mul的架构mul是
开始
过程(a、b)
变量bp,p:std_逻辑_向量(0到7);
开始
bp:=“0000”和b;
p:=“00000000”;
对于0到3循环中的k
如果a(k)=‘1’,则
p:=p+bp;
如果结束;
bp:=bp sll 1;
端环;
c混合使用非标准VHDL(Synopsys)std_logic_unsigned
包和标准VHDLnumeric_std
包可能会导致不期望的结果,因此我的建议是仅使用标准VHDLnumeric_std
包,仅使用:
use ieee.numeric_std.all;
这样,您就可以执行以下操作:
if a(k) = '1' then
p := std_logic_vector(unsigned(p) + unsigned(bp));
end if;
bp := std_logic_vector(unsigned(bp) sll 1);
然后,来自numeric\u std
软件包的“sll”
函数被用作中缀运算符,这与写入相同:
bp := std_logic_vector("sll"(unsigned(bp), 1));
bp := std_logic_vector(shift_left(unsigned(bp), 1));
请注意,对于移位量1,其与写入相同:
bp := std_logic_vector("sll"(unsigned(bp), 1));
bp := std_logic_vector(shift_left(unsigned(bp), 1));
建议使用shift_left
函数的最后一条语句,因为VHDL中的sll
运算符在VHDL-2008之前可能并不总是按“预期”工作(请参阅更多信息
)因此,使用numeric\u std
软件包中的shift\u left
功能可确保不同VHDL版本之间的可读性和预期操作。请告诉我什么“pic”?您收到的错误在这里并不明显。如果您可以访问符合-2008标准的VHDL工具,将包含IEEE package numeric_std_unsigned的use子句替换为包含Synopsys package std_logic_arith和IEEE package numeric_std的use子句将允许您的代码进行分析、详细说明和模拟(而不评论其准确性)。Package numeric_std_unsigned允许您将std_logic_矢量对象视为未签名对象。对于符合-2008标准的工具链,可能重复或使用IEEE Package numeric_std_unsigned。@user1155120:为什么sll
或shl
在numeric_std_unsigned
中未定义(std_逻辑_向量,整数)
?仅定义了shl(std_逻辑_向量,std_逻辑_向量)
。在-2008年,std_逻辑_向量是std_逻辑_向量的子类型,std_逻辑_1164为[std_逻辑_向量,整数返回std_逻辑_向量]声明sll和srl。