Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
15 years ago

A very strange hold violation report

Hi, I met with a very strange problem when using TimeQuest Timing Analyzer trying to achieve the requirement.

The analyzer reported a hold violation, but the two nodes of the violated path is exactly the same one!!! But it reported that there is a path between them and the delay is less than the required delay!

the code:

assign HSYNC_D = SEL ? 1'B1 : HSYNC;

always @(posedge VCLK or negedge Rst_n)

begin

if(!Rst_n)

HSYNC <= 1'B0;

else

HSYNC <= HSYNC_D;

end

the reported message:

slack from to from clock to clock

-0.003ns HSYNC HSYNC VCLK VCLK

so please let me know how can it happen? I am crazy about it now!

I thought it only check paths between different nodes!

Please get me out of this mess! I am waiting here. Thank you.

16 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Hi, pletz. Thank you for showing me the way.

    I tried the assignment editor just now, but when I assign the output pin of the gating cell as a global clock, it shew in yellow(The Help tells that the node I am trying to specify is not found in the netlist), But I really found the pin in the node finder! ( The filter is set to pre-synthesis)

    And after compilation, the report shows that it is still not using the global routing resource(there is still enough global resource left).

    Is it that I should not search that pin in the pre-synthesis netlist? Then which type of netlist should I use to specify as a global clock? Please help me.

    Now I have to constrain the output of the gated clock as a new clock in my '.sdc' file. And this time it worked.

    --- Quote End ---

    Hi,

    I would use the post-synthesis netlist, because there you have all node which "survived" the synthesis. An other option is to preserve the node. You cando that with the attribute

    wire keep_wire /* synthesis keep */; for verilog

    signal keep_wire : std_logic;

    attribute keep: boolean;

    attribute keep of keep_wire: signal is true; for VHDL

    Kind regards

    GPK
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Hi,

    I would use the post-synthesis netlist, because there you have all node which "survived" the synthesis. An other option is to preserve the node. You cando that with the attribute

    wire keep_wire /* synthesis keep */; for verilog

    signal keep_wire : std_logic;

    attribute keep: boolean;

    attribute keep of keep_wire: signal is true; for VHDL

    Kind regards

    GPK

    --- Quote End ---

    Ah, Thank you so much! I really appreciate your help! :)

    I only remember that there is a way to keep the registers from being synthesis away. There is really a way to keep a wire during synthesis. Thank you! I will try!

    By the way, " /* synthesis keep */" is just suitable for quartus II only or can be used even in other software?
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Ah, Thank you so much! I really appreciate your help! :)

    I only remember that there is a way to keep the registers from being synthesis away. There is really a way to keep a wire during synthesis. Thank you! I will try!

    By the way, " /* synthesis keep */" is just suitable for quartus II only or can be used even in other software?

    --- Quote End ---

    Hi,

    the feature itself ( keeping the wire ) is available in all synthesis tools I know. The syntax is sometimes different. Looking for the keyword "keep" should be sufficient to find the right

    syntax.

    Kind regards

    GPK
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Hi,

    the feature itself ( keeping the wire ) is available in all synthesis tools I know. The syntax is sometimes different. Looking for the keyword "keep" should be sufficient to find the right

    syntax.

    Kind regards

    GPK

    --- Quote End ---

    OK, pletz. I will put that in mind.

    Finally, the design has no hold violations any more, thanks to you the warm-hearted.

    Thank you again. I really appreciate it.:)
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Alice, you might want to take a look at Quartus Help under Verilog synthesis attributes for other features like synthesis keep

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    --- Quote Start ---

    Alice, you might want to take a look at Quartus Help under Verilog synthesis attributes for other features like synthesis keep

    --- Quote End ---

    Hi, thepancake, thank you for reminding.:)

    I have read the Help a little before, maybe I did not pay much attention to this kind of attributes, I think I have to go back to the Help for more help, thanks again.