使用FPGA測(cè)試的一些有效方法(05-100)
綜合過(guò)程解決時(shí)序問(wèn)題
本文引用地址:http://www.ex-cimer.com/article/91577.htm我們使用Synplicity公司的Synplify工具進(jìn)行綜合,這是業(yè)界通常使用的綜合工具之一。選擇該工具最主要的原因在于它與Xilinx的FPGA配合的很好。我們做過(guò)實(shí)驗(yàn),通過(guò)該工具綜合產(chǎn)生結(jié)果報(bào)表,再通過(guò)ISE產(chǎn)生真實(shí)布局布線后的報(bào)表。對(duì)這兩個(gè)報(bào)表的時(shí)序估計(jì)部分進(jìn)行對(duì)比,我們發(fā)現(xiàn)兩者之間驚人的相似,最差路徑之間的差別不超過(guò)1ns。
綜合的時(shí)候需要設(shè)置約束,最重要的是時(shí)鐘約束。這個(gè)約束限制了系統(tǒng)工作的頻率。為了降低系統(tǒng)對(duì)于時(shí)鐘抖動(dòng)的敏感性,我們采取的第一個(gè)方法是在設(shè)置時(shí)鐘約束的時(shí)候?qū)⒋思s束值設(shè)的略高于實(shí)際的時(shí)鐘頻率。這樣做有一個(gè)前提,那就是在綜合后不得有負(fù)的時(shí)鐘余度(time slack)出現(xiàn)。當(dāng)沒(méi)有負(fù)的時(shí)鐘余度出現(xiàn)的時(shí)候,提高時(shí)鐘約束可以有效避免因時(shí)鐘抖動(dòng)而引入的時(shí)序問(wèn)題,但是如果因?yàn)樘岣吡思s束中時(shí)鐘頻率,而導(dǎo)致負(fù)的時(shí)鐘余度的出現(xiàn),那么有可能導(dǎo)致在布局布線過(guò)程中產(chǎn)生時(shí)序沖突而無(wú)法正常布局布線。在這種情形下,就不宜提高約束中的時(shí)鐘頻率。
在綜合中采取的第二個(gè)方法是使用綜合工具提供的pipeline和retiming功能。這些功能可以調(diào)整寄存器的位置,使之在不改變邏輯的前提下,將寄存器的位置調(diào)整的更加合理,如圖2所示。這個(gè)功能主要用于組合邏輯過(guò)長(zhǎng)且不合理的情況下。當(dāng)然,如果某些乘法器位數(shù)過(guò)寬而結(jié)果沒(méi)有寄存的時(shí)候也會(huì)導(dǎo)致組合邏輯時(shí)序緊張。當(dāng)發(fā)生這種情況而retiming功能又無(wú)法糾正時(shí),就需要設(shè)計(jì)者在做設(shè)計(jì)的時(shí)候?qū)Τ朔ㄆ鞯妮敵鼋Y(jié)果做一拍寄存,同時(shí)其余的控制邏輯也要做相應(yīng)的調(diào)整。
圖 1 DSP48示意圖
布局布線階段解決時(shí)序問(wèn)題
當(dāng)綜合工作完成,進(jìn)入布局布線的階段后,仍然有兩種方法可以改善邏輯時(shí)序問(wèn)題。
第一種是手動(dòng)增加并調(diào)整BUFG(Global Clock Buffer)。BUFG是Xilinx的全局時(shí)鐘資源,所有時(shí)鐘樹(shù)的起點(diǎn)都是BUFG,位于FPGA的北極和南極。當(dāng)布線后仍有負(fù)的slack時(shí),有可能是某些當(dāng)作時(shí)鐘使用的信號(hào)沒(méi)有被放上時(shí)鐘樹(shù),此時(shí)就要手動(dòng)將這些信號(hào)放上BUFG。若遇到門控時(shí)鐘,還應(yīng)該使用BUFGMUX資源。另外,在Virtex-4中,北部的BUFG主要負(fù)責(zé)北部的時(shí)鐘,南部的BUFG負(fù)責(zé)南部的時(shí)鐘。在我們的項(xiàng)目中,共有十余個(gè)時(shí)鐘,因此,BUFG位置的選擇也很關(guān)鍵。有些時(shí)候,工具不能解決一切問(wèn)題,只有手動(dòng)調(diào)整BUFG的位置,或?qū)UFG的位置信息寫(xiě)入用戶約束文件才可以取得較滿意的效果。
評(píng)論