Altera_Forum
Honored Contributor
14 years agoHow to handle this hold time violated?
I have a design, part of the design is :
PLL_6us_3us_300ns pll1(.areset(~ireset),.inclk0(clk),.c0(clk_6us),.c1(clk_3us),.c2(clk_300ns),.locked(lock)); always @(negedge clk) begin if ((counterScan>14 && counterScan<31) || (counterSystemReset>300 && counterSystemReset<321) ) CK_Scan<=clk_300ns; else CK_Scan<=1'b0; end I have a PLL module, the "clk" period is 40ns, and pll will generate clock signals whose period are 6us, 3us, and 300ns respectively. Then I will create a gated clock signal "CK_Scan", when the "counterScan" or "counterSystemReset" in a specific range, the CK_Scan will be 300ns clock signal. In order to avoid a glitch, I made the "CK_Scan" as a register output, and use the quick clock "clk" to drive this it, but I use the negedge to trigger it. After I did the STA in TimeQuest, there is a hold violated as attachment. I can't understand this since it assign "clk_300ns" and "clk" as launch and latch clock respectively. instead I think both launch and latch clock should be "clk". In my .sdc file, the commands I have as following: create_clock -name sys_clk -period 40.0 [get_ports clk] derive_pll_clocks derive_clock_uncertainty Is that my judgment right? If it is, why TimeQuest mistake it? If I am wrong, anbody can help me understand this and how can I handle this violated? Thanks very much!