首页 > 解决方案 > 子程序 shift_left 没有可行的入口,在附近键入错误

问题描述

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

  1. 错误:“左移”附近的类型错误;预期类型“std_logic_vector”

但 temp 是 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;

标签: vhdl

解决方案


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

所以你必须铸造你的价值观:

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

高温高压


推荐阅读