用于“签名的VHDL”;子程序“U签名”没有可行的条目;

用于“签名的VHDL”;子程序“U签名”没有可行的条目;,vhdl,Vhdl,我正在为FPGA上的声音合成器设计一个延迟单元,但是当试图在Modelsim中编译以进行模拟时,我得到了以下错误: “对于要签名的子程序,没有可行的条目”。 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.NUMERIC_STD.ALL ENTITY Delay IS -- Delay time in ms PORT( Sample : in STD_LOGIC_VECTOR(11 DOWNTO 0); Delay : in I

我正在为FPGA上的声音合成器设计一个延迟单元,但是当试图在Modelsim中编译以进行模拟时,我得到了以下错误: “对于要签名的子程序,没有可行的条目”。 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.NUMERIC_STD.ALL

ENTITY Delay IS
    -- Delay time in ms
PORT(
    Sample  : in STD_LOGIC_VECTOR(11 DOWNTO 0);
    Delay   : in INTEGER RANGE 0 to 2000;               -- Echo Delay in ms, <2s
    Gain    : in INTEGER Range 0 to 7;              -- Gain of the Echo, 0/8 to 7/8
    clk     : in STD_LOGIC;
    Reset   : in STD_LOGIC;

    Output  : Out STD_LOGIC_VECTOR(11 DOWNTO 0)
);
END Delay;

ARCHITECTURE Delay_Arch OF Delay IS 
    BEGIN
DelayOffset <= Delay*40;                                              -- Number of steps back in the buffer for x ms delay
Process(clk)
BEGIN
IF (Reset = '1') THEN                                                 -- Standard Reset
    CircBuffer <= (OTHERS=>(OTHERS=>'0'));
    Counter <= 0;
ELSIF RISING_EDGE(clk) THEN
    CircBuffer(Counter) <= Sample;                                    -- Save Data in to circBuffer

    IF (DelayOffset > Counter) THEN                                   -- Wrap around for counter
        OutBuff(11 DOWNTO 0) <= CircBuffer(79999-(DelayOffset-Counter));
    ELSE
        OutBuff(11 DOWNTO 0) <= CircBuffer(Counter-DelayOffset);                      -- Load sound from previous Sample (Delay)
    END IF;
    OutBuffInt <= (To_integer(Signed(OutBuff)) * Gain);                   -- Multiply with gain
    Outvect <= To_signed(OutBuffInt, Outvect'length);  <----- ERROR
    Output <= Outvect(14 DOWNTO 3);
    IF (Counter = 79999) THEN 
        Counter <= 0;
    ELSE
    Counter <= Counter + 1;
    END IF;
END IF;
END PROCESS;
END ARCHITECTURE;   
实体延迟为
--延迟时间(毫秒)
港口(
样本:标准逻辑向量(11到0);

延迟:在0到2000的整数范围内;--Echo Delay,单位为ms,正如Morten Zimer指出的,这里有多个问题。但要回答您的问题,“子程序没有可行的条目”错误表示函数调用的参数和/或目标的类型与任何可用声明都不匹配。在您的情况下,只有一个名为
to_signed
visible的函数,在ieee.numeric_std中定义如下:

function TO_SIGNED (ARG: INTEGER; SIZE: NATURAL) return SIGNED;

您没有包括您的信号声明,但我猜您的
Outvect
信号声明为
std\u logic\u vector
,并且没有
签名
,因此出现了错误。

架构中缺少信号声明,并且您有一个名为
Delay
的标识符,该标识符与实体名称相同,因此您可以可能会从ModelSim获得其他警告。但无论如何,VHDL使用函数重载,因此仅具有名称的函数是不够的,还必须具有调用该函数的参数类型的组合,但如果缺少声明,则无法确定这是否真的是问题所在。