我有
douta : in std_logic_vector (3 downto 0);
doutb : in std_logic_vector (3 downto 0);
c0 : in std_logic;
f1 : in std_logic;
f0 : in std_logic;
res : out std_logic_vector (3 downto 0);
Run Code Online (Sandbox Code Playgroud)
我正在尝试构建一个简单的ALU,这个ALU提供的功能之一是什么时候
f1 and f0 both = 1
res = douta plus b plus c0
Run Code Online (Sandbox Code Playgroud)
所以我写了
f1 = '1' and f0 = '1' then res <= douta + doutb + c0;
Run Code Online (Sandbox Code Playgroud)
但显然它不是要去工作,因为的数据类型douta,并doutb在std_logic_vector那里为co仅仅是std_logic
编译时我遇到了这个错误
' Error 603 line 34 : Incompatible types for arithmetic operator: LHS=std_logic_vector!18, RHS=std_logic
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?
编辑: 也试过了
f1 = '1' and f0 = '1' then res <= douta + doutb + ("000" & c0);
Run Code Online (Sandbox Code Playgroud)
但这仍然没有运气,这次是编译器说的
LHS=std_logic_vector!7, RHS=array_1_of_std_logic_3_d_0
Run Code Online (Sandbox Code Playgroud)
std_logic_vector如果你要对它们进行算术运算,请不要使用.使用ieee.numeric_std,并使用signed或unsigned类型.然后你可以添加'0'或'1'.
使用的解决方法是使用std_logic_arith.all非标准库的软糖,当您更改工具链时可以使您陷入可移植性问题.
我在这里写了一个更详细的页面:http://parallelpoints.com/node/3
这里有关于comp.lang.vhdl的讨论:http ://groups.google.com/group/comp.lang.vhdl/browse_thread/thread/549e1bbffd35914d/83cc0f19350fc392?hl=en&q=group:comp.lang . vhdl + numeric_std#83cc0f19350fc392以及comp.lang.vhdl常见问题解答.