首页 文章

vhdl减去std_logic_vector

提问于
浏览
2

我试图减去2 std逻辑向量并得到错误

p2 <= p1(11 downto 0)- idata(11 downto 0);

错误(10327):sub.vhd(32)处的VHDL错误:无法确定运算符的定义“” - “” - 找到0个可能的定义

我已经尝试添加 use IEEE.std_logic_signed.alluse IEEE.std_logic_unsigned.all 或两者都已尝试 p2 <= std_logic_vector(unsigned(p1(11 downto 0)) - unsigned(idata(11 downto 0)));

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
--use IEEE.std_logic_signed.all;
--use IEEE.std_logic_unsigned.all;

entity sub is 

port (  
    clk         : in    std_logic;
    rst         : in    std_logic;
    --en            : in    std_logic;  
    idata    : in    std_logic_vector (11 downto 0);
    odata    : out  std_logic_vector (11 downto 0)  
);
end sub;

architecture beh of sub is
signal p1,p2 :std_logic_vector (11 downto 0);
begin
    process (clk, rst) 
        begin
            if (rst = '1') then
                odata  <= "000000000000";
            elsif (rising_edge (clk)) then  
                    p1 <= idata;
                    p2 <= p1(11 downto 0)- idata(11 downto 0);
                    --p2 <= std_logic_vector(unsigned(p1(11 downto 0)) - unsigned(idata(11 downto 0)));

            end if;             
    end process;
    odata<=p2;
end beh;

1 回答

  • 5

    std_logic_vector 类型只是 std_logic 的数组,并且它本身没有任何数值解释,因此在尝试应用数字操作(如减号( - )时出错) .

    不要使用Synopsys非标准 std_logic_signed/unsigned/arith 软件包 .

    VHDL-2002 :使用标准 ieee.numeric_std 包中的 unsigned 类型将 std_logic_vector 转换为 unsigned 表示,允许使用数字操作,如减号 . 代码如:

    use ieee.numeric_std.all;
    ...
    p2 <= std_logic_vector(unsigned(p1(11 downto 0)) - unsigned(idata(11 downto 0)));
    

    VHDL-2008 :使用标准 ieee.numeric_std_unsigned 包将 std_logic_vector 转换为 unsigned 表示,允许使用数字操作,如减号 . 代码如:

    use ieee.numeric_std_unsigned.all;
    ...
    p2 <= p1(11 downto 0) - idata(11 downto 0);
    

    顺便说一句 . 查看此search以了解类似问题 .

相关问题