VHDL如何将带有std_logic信号的std_logic_vector一起添加?

Jon*_*han 4 vhdl

我有

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,并doutbstd_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)

Mar*_*son 8

std_logic_vector如果你要对它们进行算术运算,请不要使用.使用ieee.numeric_std,并使用signedunsigned类型.然后你可以添加'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常见问题解答.