用于“签名的VHDL”;子程序“U签名”没有可行的条目;
我正在为FPGA上的声音合成器设计一个延迟单元,但是当试图在Modelsim中编译以进行模拟时,我得到了以下错误: “对于要签名的子程序,没有可行的条目”。 图书馆IEEE; 使用IEEE.STD_LOGIC_1164.ALL; 使用IEEE.NUMERIC_STD.ALL用于“签名的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
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使用函数重载,因此仅具有名称的函数是不够的,还必须具有调用该函数的参数类型的组合,但如果缺少声明,则无法确定这是否真的是问题所在。