没有可行的子程序 shift_left 条目,附近键入错误

No feasible entry to subprogram shift_left, type error near

我正在尝试在我的项目中使用函数 shift_left(),但出现 2 个我无法解释的错误:

  1. 错误:'shift left' 附近出现类型错误;预期类型 'std_logic_vector'

但温度是 std_logic_vector!

  1. 错误:找不到子程序 'shift_left' 的可行条目

代码中使用的信号定义为:

signal shifted_pixel, temp : std_logic_vector(15 downto 0);
signal i_data : std_logic_vector(7 downto 0);

下面的代码片段是在一个进程中编写的

temp <= "00000000" & i_data;
shifted_pixel <= shift_left(temp, 5);

完整代码如下:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.numeric_std.ALL;


entity project is
    port (
        i_clk     : in std_logic;
        i_rst     : in std_logic;
        i_start   : in std_logic;
        i_data    : in std_logic_vector(7 downto 0);
    );
end project;

architecture rtl of project is
    signal shifted_pixel, temp : std_logic_vector(15 downto 0);
    begin
        process(i_data)
        begin
            temp <= "00000000" & i_data;
            shifted_pixel <= shift_left(temp, 5);
        end process;
end rtl;

numeric_std 包中的 shift_left 函数将无符号作为第一个参数,它 returns 一个无符号值。

所以你必须投射你的价值观:

shifted_pixel <= std_logic_vector(shift_left(unsigned(temp), 5));

HTH