一、概念
Launch_edge: 觸發(fā)沿,觸發(fā)時(shí)鐘的上升沿延遲
Latch_edge:鎖存沿帽驯,鎖存時(shí)鐘的上升沿延遲,和觸發(fā)沿相隔一個(gè)周期
二者只是兩個(gè)標(biāo)記书闸,之差等于一個(gè)時(shí)鐘周期尼变。?
二、原理
核心目的:某一個(gè)寄存器的數(shù)據(jù)傳輸不能受影響浆劲。這個(gè)數(shù)據(jù)要早來(lái)晚走嫌术。
建立時(shí)間指的是數(shù)據(jù)不能來(lái)得太晚
保持時(shí)間指的是數(shù)據(jù)不能走的太早
數(shù)據(jù)建立要足夠快,在時(shí)鐘到來(lái)之前就準(zhǔn)備好牌借。
又要足夠慢度气,在上一個(gè)數(shù)據(jù)還沒(méi)建立好之前這個(gè)數(shù)據(jù)不能到。
假設(shè)我們又兩個(gè)寄存器D1膨报,D2蚯嫌,上升沿1,上升沿2
上升沿1之前 : D1 = D2 = 0
上升沿1 : D1 = 1 D2 = 0
上升沿2 : D1 = 0 D2 = 1
這是我們想要傳送的結(jié)果——經(jīng)過(guò)兩個(gè)上升沿丙躏,把數(shù)據(jù)傳給D2择示,最終D2應(yīng)該是1.
(我們要干的主要事情是,改變第一個(gè)寄存器的值晒旅,并且把值傳遞給第二個(gè)寄存器栅盲。)
如果setup時(shí)間太長(zhǎng),第一個(gè)上升沿D2可以接受數(shù)據(jù)了废恋,但數(shù)據(jù)還沒(méi)到谈秫,結(jié)果D2只能是0扒寄。
如果hold時(shí)間太短,D2已經(jīng)在上升沿采樣到1了拟烫,結(jié)果被D1的0給取代了该编,結(jié)果D2也是0.
這兩種情況都是數(shù)據(jù)傳輸失敗。
雖然理解原理的時(shí)候硕淑,我們解釋了兩個(gè)寄存器之間的數(shù)據(jù)傳輸咕别,但實(shí)際上setup和hold都是針對(duì)同一個(gè)寄存器而言的褐墅。
數(shù)據(jù)傳送主要有4條路徑
?Input pin/port -> Sequential element
?Sequential element -> Sequential element
?Sequential element -> Output pin/port
?Input pin/port -> Output pin/port
三米辐、示例
Data Arriving Time
path1 : T_DAT = launch_edge + T_inputdelay +?T_data
path2 : T_DAT = launch_edge + T_clk + T_co +?T_data
path3 : T_DAT = launch_edge + T_clk + T_co + T_data +?T_outputdelay
Clock Arriving Time?
T_CAT = latch_edge(T_cycle) + T_clk
Data Require Time
setup required time :T_SRT = T_CAT - T_setup - T_clku
hold required time :T_HRT =? T_CAT - T_hold - T_clku
Slack
setup T_sSlacks = T_SRT - T_DAT?
hold T_hSlack = T_DAT - T_HRT?
幾點(diǎn)說(shuō)明:
1.T_clk(T_clks + T_clkn)
2.T_cycle = latch edge - launch edge 艘希。所以CAT指的是一個(gè)時(shí)鐘周期 + 時(shí)鐘的兩個(gè)延時(shí)
3.只有T_data是可以改變的,通過(guò)改變組合邏輯來(lái)實(shí)現(xiàn)
4.時(shí)鐘到達(dá)時(shí)間是對(duì)于所有傳輸路徑都是固定的拇囊,因?yàn)闀r(shí)鐘是統(tǒng)一的
5.在數(shù)據(jù)到達(dá)時(shí)間和時(shí)鐘到達(dá)時(shí)間其中都有T_clk這個(gè)變量迂曲,如果不考慮skew(兩個(gè)寄存器之間的時(shí)時(shí)鐘偏差),這兩個(gè)量應(yīng)該是相同的寥袭,它不表示某一時(shí)刻的時(shí)鐘數(shù)值路捧,而是表示從一個(gè)共同的起點(diǎn)(launch/latch edge)開(kāi)始計(jì)算的時(shí)鐘延遲。