Intel® Quartus® Prime Software
Intel® Quartus® Prime Design Software, Design Entry, Synthesis, Simulation, Verification, Timing Analysis, System Design (Platform Designer, formerly Qsys)
17244 Discussions

One Recovery Timing Violation Issue Need You Help

MinzhiWang
Novice
927 Views

Hello,

 

I'm using LVDS receiver (LVDS_RX) to process ADC serial output data stream. LVDS_RX provides one output parallel clock, rx_coreclock, which is used for asyncronous FIFO's write clock. The FIFO's read side uses system clock.

 

When above logic is implemented, the system clock domain's reset signal is used on rx_coreclock domain. After full compilation, I get Setup and Recovery timing violation report.

Setup Timing Violation Report:

12.png

Recovery Timing Violation Report:

11.png

After I found that the reset was used in two different clock domain,  I synchronized this reset signal from system clock domain to rx_coreclock domain. I thought this should resolve above two violations. However, only Setup timing violation was resolved.

Resolved Setup Timing:

13.png

The Recovery Timing violation still there.

Report Timing from TimeQuest for the Recovery:

15.png

As above image, the Recovery timing violation's From Node coming from system clock domain's reset signal. And "To Node" comes from re_coreclock domain's reset re-synchronized module's two inner nodes. Below is the re-synchronized module codes:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;


entity reset_async_2_sync is   
    port (
      clkin :      in std_logic;
      async_rst :  in std_logic;  
      sync_rst :   out std_logic 
     );  
end reset_async_2_sync;
        
architecture rtl of reset_async_2_sync is 
signal Sync_rst1,Sync_rst2: std_logic;
begin

process(clkin,async_rst)
begin
   if async_rst='0' then--Async reset is ��0�� assert
      Sync_rst1 <= '0';
      Sync_rst2 <= '0';
   elsif clkin'event and clkin='1' then
      Sync_rst1 <= '1';
      Sync_rst2 <= Sync_rst1;
   end if;   
end process;

sync_rst <= Sync_rst2;

end ;

 

So my question is how to resolve this recovery timing violation. Can i use set_false_path command to deal with it?

 

Thanks

 

Best Regard

 

 

 

 

Labels (1)
0 Kudos
6 Replies
RichardTanSY_Altera
862 Views

Is this a Clock Domain Crossing? As you mentioned there are two different clock domain.


You may check out this on how to properly constrain CDC.

https://learning.intel.com/developer/learn/courses/211/clock-domain-crossing-considerations


Regards,

Richard Tan


0 Kudos
MinzhiWang
Novice
847 Views

Hi Tan,

 

It should be of false paths.

 

BTW, I can't open the course from your above link.

 

I tried to apply false path constrain in my project. According to above recovery timing violation report from TimeQuest, both lauch and latch clock are different clock. They are:

Launch Clock:

system_clock_gen_|system_pll_|iopll_0|clk

Latch Clock:

SEP_QuadBLKs_Top_|u_AD9633D_SDataProc|LVDS_RX_8Ch6B_inst|lvds_0|core|arch_inst|internal_pll.pll_inst|altera_lvds_core20_iopll|outclk[2]

So I thought to add following clock group constain to my project:

set_clock_groups -asynchronous -group {system_clock_gen_|system_pll_|iopll_0|clk} -group {SEP_QuadBLKs_Top_|u_AD9633D_SDataProc|LVDS_RX_8Ch6B_inst|lvds_0|core|arch_inst|internal_pll.pll_inst|altera_lvds_core20_iopll|outclk[2]}

However, after compilation, QPP23.4 gave me following warning info:

Ignored filter at my.sdc(21): SEP_QuadBLKs_Top_|u_AD9633D_SDataProc|LVDS_RX_8Ch6B_inst|lvds_0|core|arch_inst|internal_pll.pll_inst|altera_lvds_core20_iopll|outclk[2] could not be matched with a clock

Assignment set_clock_groups is accepted but has some problems at my.sdc(21): Argument -group with value SEP_QuadBLKs_Top_|u_AD9633D_SDataProc|LVDS_RX_8Ch6B_inst|lvds_0|core|arch_inst|internal_pll.pll_inst|altera_lvds_core20_iopll|outclk[2] could not match any element of the following types: ( clk )

Above warining infos tell me that Quaruts ignored above clock group constrain. Even above info gives the reason why it ignores the constrain. But I still don't know why? Quartus can't identify the LVDS PLL output clock as clock?

 

0 Kudos
RichardTanSY_Altera
847 Views

Try search for "Clock Domain Crossing Considerations"

https://learning.intel.com/developer/learn


Or you can look at youtube video instead:

https://www.youtube.com/watch?v=BNiXxmQlCCs


Regards,

Richard Tan


0 Kudos
RichardTanSY_Altera
767 Views

May I know do you need further help regarding this case?


Regards,

Richard Tan


0 Kudos
MinzhiWang
Novice
752 Views
0 Kudos
RichardTanSY_Altera
752 Views

I'm pleased to know that your question has been addressed. 


Now, I will transitioning this thread to community support. If you have any further questions or concerns, please don't hesitate to reach out. Please login to ‘https://supporttickets.intel.com’, view details of the desire request, and post a feed/response within the next 15 days to allow me to continue to support you. After 15 days, this thread will be transitioned to community support.

The community users will be able to help you on your follow-up questions.


Thank you and have a great day!


Best Regards,

Richard Tan



0 Kudos
Reply