今天在跑 PR flow 后 debug timing 時(shí)工腋,發(fā)現(xiàn)前端給的 constraint 中存在一點(diǎn)問(wèn)題姨丈,若干地方的時(shí)序本可以設(shè)置 multicycle 的 path,給漏設(shè)了擅腰,直接影響工具對(duì) design timing 的優(yōu)化力度蟋恬。因此,小編打算寫(xiě)一篇文章來(lái)介紹下 multicycle path 的概念和用法趁冈,同時(shí)也帶領(lǐng)大家復(fù)習(xí)下 setup 和 hold 的時(shí)序檢查機(jī)制歼争。
通常情況下拜马,兩個(gè)同步的 reg 進(jìn)行 timing check 時(shí),組合邏輯的 delay 必須在一個(gè)時(shí)鐘周期內(nèi)到達(dá)沐绒,才能滿(mǎn)足 setup 的時(shí)序俩莽。但在某些情況下,從一個(gè)寄存器輸出到另外一個(gè)寄存器的 data 端需要不止一個(gè) cycle 的時(shí)間乔遮,而且又不影響邏輯的功能扮超。此時(shí),我們可以將這樣的 path 約束為 multicycle path蹋肮。圖 1 所示為一個(gè) 3cycle 的 multicycle path 的電路結(jié)構(gòu)圖和波形圖出刷。
因此,我們可以用下面的命令來(lái)定義約束:
create_clock -name CLKM -period 10 [get_ports CLKM]
set_multicycle_path 3 -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
setup 檢查:
默認(rèn)情況下坯辩,當(dāng) UFF0/CK 作為 launch clock 時(shí)(T=0ns 時(shí))馁龟,在 T=10ns 時(shí) UFF1/CK 采集到前一級(jí)過(guò)來(lái)的數(shù)據(jù)。
圖 1 multicycle path 下的 setup 時(shí)序檢查
但是當(dāng)我們通過(guò)以上的命令設(shè)置了 3 個(gè) cycle 的 multicycle path 的約束之后漆魔,launch clk 的沿推到了 T=30ns坷檩。因此,兩個(gè)寄存器之間那段組合邏輯的 delay 要求就放松到了近三個(gè)時(shí)間 cycle改抡。這種情況下 setup 是比較容易滿(mǎn)足的矢炼。對(duì)應(yīng)的 setup 檢查時(shí)序報(bào)告如下圖 2 所示。
圖 2 setup 檢查時(shí)序報(bào)告
hold 檢查:
默認(rèn)情況下雀摘,hold 檢查的沿應(yīng)該是在 T=20ns 時(shí)刻(較 setup capture edge 早一個(gè) cycle)裸删。這種檢查機(jī)制好不好呢?顯然不好阵赠。為什么呢涯塔?(可以自己畫(huà)波形,其實(shí)波形已經(jīng)在圖 3 中了)清蚀。從圖中看到這樣的 hold 檢查方式匕荸,會(huì)導(dǎo)致 hold 可能過(guò)度悲觀,很難滿(mǎn)足 hold time 的要求枷邪。
圖 3 multicycle path 下的 hold 時(shí)序檢查
因此榛搔,我們需要像單 cycle check 的情況一樣,即 hold 檢查的沿應(yīng)該和 launch clk 的 edge 一致(T=0 時(shí)刻)东揣。這樣我們的 hold time check 比較容易滿(mǎn)足践惑,也比較科學(xué)。那么如何實(shí)現(xiàn)這種想法呢嘶卧?我們引進(jìn)了如下約束命令:
set_multicycle_path 2 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
這里面的數(shù)字 “2” 是指將默認(rèn)的 hold check edge 往前推 2 個(gè)時(shí)鐘周期尔觉,即從原來(lái)的 T=20ns 時(shí)刻往前移到 T=0ns 時(shí)刻。對(duì)應(yīng)的 hold 時(shí)序檢查報(bào)告如下圖 4所示芥吟。
圖 4 hold 檢查時(shí)序報(bào)告
因此侦铜,在我們給設(shè)計(jì)寫(xiě)約束文件時(shí)(定義 multicycle path 時(shí))专甩,需要同時(shí)定義如下命令:
set_multicycle_path N -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
set_multicycle_path N-1 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]
如果只定義了 - setup 3 而沒(méi)有定義 - hold 時(shí),工具 hold check 時(shí)钉稍, 默認(rèn)的 clock edge 為 capture edge(setup timing check 時(shí))前一個(gè) cycle 的那個(gè) edge涤躲。
到此小編已經(jīng)介紹完了 set_multicycle_path 的概念,用法以及 setup hold time 的檢查機(jī)制贡未。本文用的例子是兩個(gè)寄存器是被同一個(gè) CLK 所驅(qū)動(dòng)的种樱。那如果兩個(gè)寄存器是被不同的 clk 所驅(qū)動(dòng)的,情況又是如何呢羞秤?這里我就不多啰嗦了缸托,大家自己思考左敌,必須學(xué)會(huì)舉一反三瘾蛋。圖 5 中的 setup check 和 hold check 對(duì)不對(duì)呢?
圖 5 思考題波形圖
原文鏈接:https://blog.csdn.net/weixin_37584728/article/details/117746704