【问题标题】:Timing requirement not met during design compilation设计编译期间未满足时序要求
【发布时间】:2018-03-27 07:39:24
【问题描述】:

我已经创建了一个设计并且想要编译该设计以便为 CPLD 创建一个二进制文件。但是,当我尝试编译设计时,它会输出一条警告,指出未满足时序要求。它似乎在抱怨以下 VHDL 组件,其中外部时钟被划分为设计中其他 VHDL 组件使用的较低时钟频率:

entity clk_divider is
    generic (COUNTER_MAX : integer := 256000);
    port(
            clk_in  : in std_logic;
            reset   : in std_logic;
            clk_out : out std_logic
        );
end clk_divider;    

architecture Behavioral of clk_divider is

    signal signal_level : std_logic := '0';
    signal counter : integer range 0 to COUNTER_MAX := 0;

begin
    clk_divider : process (clk_in, reset)
        begin

        if (reset = '1') then
            signal_level <= '0';
            counter <= 0;
        elsif rising_edge(clk_in) then
            if (counter = COUNTER_MAX) then
                signal_level <= not(signal_level);
                counter <= 0;
            else
                counter <= counter + 1;
            end if;
        end if;
    end process;

    clk_out <= signal_level;
end Behavioral;

设计编译期间显示的严重警告消息如下所示:

Critical Warning (332012): Synopsys Design Constraints File file not found: 'monitor.sdc'. 
A Synopsys Design Constraints File is required by the TimeQuest Timing Analyzer to get proper timing constraints. 
Without it, the Compiler will not properly optimize the design.
Info (332142): No user constrained base clocks found in the design. Calling "derive_clocks -period 1.0"
Info (332105): Deriving Clocks
    Info (332105): create_clock -period 1.000 -name clk clk
    Info (332105): create_clock -period 1.000 -name clk_divider:clk_module|signal_level clk_divider:clk_module|signal_level
Info: Found TIMEQUEST_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS = ON
Info: Can't run Report Timing Closure Recommendations. The current device family is not supported.
Critical Warning (332148): Timing requirements not met
Info (332146): Worst-case setup slack is -7.891
    Info (332119):     Slack       End Point TNS Clock 
    Info (332119): ========= =================== =====================
    Info (332119):    -7.891            -123.541 clk 
    Info (332119):    -1.602              -5.110 clk_divider:clk_module|signal_level 
Info (332146): Worst-case hold slack is -0.816
    Info (332119):     Slack       End Point TNS Clock 
    Info (332119): ========= =================== =====================
    Info (332119):    -0.816              -0.816 clk 
    Info (332119):     1.732               0.000 clk_divider:clk_module|signal_level 
Info (332146): Worst-case recovery slack is -4.190
    Info (332119):     Slack       End Point TNS Clock 
    Info (332119): ========= =================== =====================
    Info (332119):    -4.190             -20.950 clk_divider:clk_module|signal_level 
    Info (332119):    -3.654             -76.734 clk 
Info (332146): Worst-case removal slack is 4.320
    Info (332119):     Slack       End Point TNS Clock 
    Info (332119): ========= =================== =====================
    Info (332119):     4.320               0.000 clk 
    Info (332119):     4.856               0.000 clk_divider:clk_module|signal_level 
Info (332146): Worst-case minimum pulse width slack is -2.289
    Info (332119):     Slack       End Point TNS Clock 
    Info (332119): ========= =================== =====================
    Info (332119):    -2.289              -2.289 clk 
    Info (332119):     0.247               0.000 clk_divider:clk_module|signal_level 
Info (332001): The selected device family is not supported by the report_metastability command.
Info (332102): Design is not fully constrained for setup requirements
Info (332102): Design is not fully constrained for hold requirements

此警告消息的原因是什么?我该如何解决?另外,松弛数字对我的设计有何影响?

【问题讨论】:

    标签: fpga clock timing intel-fpga quartus


    【解决方案1】:

    由于找不到 monitor.sdc,Quartus 尝试在 1GHz(周期=1ns)下合成您的电路,只要日志显示以下限制。

    create_clock -period 1.000 -name clk clk
    create_clock -period 1.000 -name clk_divider:clk_module|signal_level clk_divider:clk_module|signal_level
    

    第一行是clk 端口(它必须在顶级模块/实体中),第二行是signal_level 信号。您可以适当地修改周期并将约束放入 monitor.sdc。然后你应该将该文件添加到项目中。

    松弛值告诉您目标与实际之间的差异。如果路径满足时序要求,则它具有正时差。如果不满足,则松弛为负。

    您的目标时钟周期为 1ns,但关键(最差)路径的延迟为 -7.891ns。实际可达到的周期可以计算如下。

    actual period = target period - setup slack = 1.000 - (-7.891) = 8.891ns
    

    根据上面的结果,clk 可以达到 8.9ns 的时间。我也会尝试更小的值,但如果您的实际输入时钟 (clk) 不快于 100MHz,则没有必要。

    signal_level 的周期取决于COUNTER_MAX 的最小值。实际上,电路的其余部分似乎已经比clk_divider 模块更快,因为signal_level 的松弛(-1.602)更好。您可以使用clk设置相同的周期。

    【讨论】:

    • 感谢您的回复。是的,似乎 .sdc 丢失了。我已将这两行添加到我的 .sdc 文件中并修改了 -period 参数。对于clk,我已设置为 488.281 (2.048 MHz) 和 signal_level,我已设置为 1000000000 (1 Hz),因为我希望将 clk_divider 作为 1 Hz 时钟。但是,我收到一条警告:Warning (332049): Ignored create_clock at synopsys-design-constraints.sdc(2): Time value "1000000000" is not valid Info (332050): create_clock -period 1000000000 -name clk_divider:clk_module|signal_level clk_divider:clk_module|signal_level 我做错了什么?谢谢
    • @Mrchacha 您可以尝试更短的周期(例如 10000)。此外,我建议您为第一个时钟约束留出一些余量。例如,20% (~400ns)。
    • 我去掉了内部时钟信号并修改为输出一个脉冲。所以它现在工作正常。为什么建议为时钟约束留一些余量?
    • @Mrchacha 因为硬件上的时钟信号不理想。也许它会快一点,或者占空比偏离 50% 等等。20% 的余量可能听起来很奇怪,但为了安全起见,它仍然是业内常见的方法。
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2015-02-08
    • 2022-07-05
    相关资源
    最近更新 更多