設計一個計數程序,使用時鐘clk,在這個clk的上升沿計數。
硬件上該時鐘由50MHz晶振提供,因此設計時鐘就要約束爲50MHz,20ns時鐘週期。
編譯工程後打開quartus II TimeQuest:
點擊Netlist -> Create Timing Netlist:
點擊OK,點擊菜單欄Constraints -> Create Clock:
設置period爲20ns,設置Targets爲clk,點擊Run完成約束設置。
依次點擊task欄裏的Update Timing Netlist 和 Write SDC File
點擊OK,工程目錄中的ti_me.out.sdc文件裏便出現了所添加的約束:
重新編譯工程,重新進入TimeQuest,點擊Report All Core Timings:
在report窗口出現Report Timing (Core),可以看到Setup路徑和Hold路徑:
點擊Report Timing,選擇Setup:
Setup詳細路徑分析:
Data Arrival Time = Launch Edge + Tc2t + Tco + Tc2r = 0 + 2.541 + 0.199 + (2.655-0.199)
Data Required Time = Latch Edge + Tc2r – Tsu = 20 + 2.476 – (-0.015)
Setup time slack = Data Required Time – Data Arrival Time = 22.491 – 5.196 = 17.295ns
點擊Report Timing,選擇Hold:
Hold詳細路徑分析:
Data Arrival Time = Launch Edge + Tc2t + Tco + Tc2r = 0 + 2.453 + 0.199 + (0.580-0.199)
Data Required Time = Latch Edge + Tc2r + Th = 0 + 2.518 + 0.157
Setup time slack = Data Arrival Time – Data Required Time= 3.033– 2.675= 0.358ns
Tco表示數據在被鎖存後在寄存器內所經過的延時;
Tc2t表示時鐘源到源寄存器reg1所經過的時鐘網絡延時;
Tc2r表示時鐘源到目的寄存器reg2所經過的時鐘網絡延時;
Tr2r表示數據從源寄存器的輸出端到目的寄存器的輸入端所經過的延時;