我在unsigned
执行逻辑操作时遇到问题:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
with sel select
s_1<=a+b when "000",
a+((not b)+1) when "001",
s_2 when "010",
s_3 when "011",
s_4 when "100",
(others=>'0') when others;
这里有一个错误:
前缀运算符“not”
没有可行的条目
s_1,a,b,s_2,s_3,s_4
都是unsigned(31 downto 0)
类型。
我发现了一个将std_logic_vector
转换为无符号的代码,以便在std_logic_vector
上启用逻辑操作,如果无法在无符号上执行,但此代码使用的是numeric_std.all
,我认为它与std_logic_arith
冲突,并使数据类型为unsigned unknown。
现在我不知道如何对无符号执行逻辑运算,我不知道如何将std_logic_vector
转换为unsigned
。有人能帮助我吗?
答案 0 :(得分:1)
您使用的是非标准库use ieee.std_logic_arith.all;
,它显然没有实现“not”运算符。
use ieee.numeric_std.all;
取代它可以解决问题。
答案 1 :(得分:0)
一个可怕的workround将是xor
b
带有所有的向量...