我正在Altera Quartus 13.1中编写一些代码,我无法在TimeQuest中检查我的实体的Fmax。我得到'没有报道的路径'。代码如下:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_unsigned.all;
library NTRU;
use NTRU.NTRU.all;
entity ModuloAdder is
port(
FirstHalf : in Int32 := 0;
SecondHalf : in Int32 := 0;
Start : in std_logic := '0';
clk : in std_logic;
Result : out Int32 := 0;
ReadyOut : out std_logic
);
end ModuloAdder;
architecture a1 of ModuloAdder is
begin
process(clk, Start, FirstHalf, SecondHalf)
variable sum: integer range 63 downto -63:=0;
begin
if clk'event and clk ='1' then
if Start = '1' then
sum := (FirstHalf + SecondHalf) mod 32;
if sum > 32 then
Result <= sum mod 32;
elsif sum < -3 then
Result <= sum+32;
else
Result <= sum;
end if;
ReadyOut <= '1';
else
ReadyOut <= '0';
Result <= 0;
end if;
end if;
end process;
end a1;
我的问题是为什么会出现这个问题。当我将变量sum更改为signal时,一切正常,但我希望在一个时钟周期内完成。这段代码在ModelSim中运行良好,并且效果很好。
答案 0 :(得分:1)
看起来您的设计中没有注册路径来注册路径,因此TimeQuest无法报告Fmax。要报告Fmax,您必须告诉它I / O信号和clk之间的关系(使用set_input_delay和set_output_delay)。或者,如果您首先注册输入(例如,通过添加FirstHalfReg <= FirstHalf
),您应该看到注册寄存器,路径,并且应该获得这些内部路径的Fmax。