全加器3位std_logic_vector

时间:2016-10-25 18:48:46

标签: vhdl operation

我正在学习vhdl,当我模拟一个3位全加器时,我得到一个错误 用std_logic_vector实现(因为能够使用'+'操作) 只是我们老师给我们的一个例子, 请原谅我这是一个简单的问题...... 这是代码:

Library ieee;
use ieee.std_logic_1164.all;
entity adder_3_bit is
    port(
    a,b : in std_logic_vector(2 downto 0);
    cin : in std_logic;
    cout : out std_logic;
    sum : out std_logic_vector(2 downto 0)
    );
end adder_3_bit;
architecture behav of adder_3_bit is 
    signal temp : std_logic_vector(3 downto 0);
    begin
    temp <= ('0' & a) + ('0' & b) + ("000" & cin);
    sum <= temp(2 downto 0);
    cout <= temp(3);
    end behav;

当temp尝试在2位数组的末尾添加0时,我收到错误, 它说:

Line 15: found '0' definitions of operator "+", cannot determine exact overloaded matching definition for "+"ERROR:HDLCompiler:854

这里的每个人都是工作代码:

Library IEEE;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity adder_3_bit is
    port (
    a,b : in std_logic_vector(2 downto 0);
    cin : in std_logic;
    cout : out std_logic;
    sum : out std_logic_vector(2 downto 0)
    );
end adder_3_bit;
architecture behav of adder_3_bit is 
    signal temp : std_logic_vector(3 downto 0);
    begin
     temp <= std_logic_vector(('0' & unsigned (a)) + ('0' & unsigned(b)) + ("000" & cin));
    sum <= temp(2 downto 0);
    cout <= temp(3);
end behav;

1 个答案:

答案 0 :(得分:0)

如果没有任何其他库,则无法添加std_logic_vector类型的信号。没有+运算符定义,需要两个std_logic_vector个参数。执行此操作的正确方法是包含numeric_std包并将您的参数转换为unsigned以用于添加。

use ieee.numeric_std.all;

temp <= std_logic_vector(unsigned('0' & a) + unsigned('0' & b) + unsigned("000" & cin));

实际上,大多数人都没有为这样一个简单的操作创建一个完整的实体,所以由于你的信号已经是正确的数据类型(数字使用无符号,比特集合使用std_logic_vector),所以投射更少;这就是为什么这看起来有点尴尬。

你也可以通过概要包(std_logic_unsigned)来做到这一点,它看起来会更清晰(没有强制转换),但是这个包不是VHDL标准的一部分,并且已经弃用它。