本書介紹了4種基本時序路徑分析、時鐘約束、輸入/輸出延時約束、時序例外約束和其他時序約束。
本書共8章,第1章以生活場景時序例子開篇,介紹FPGA及Vivado編譯工具,闡述時序分析和約束意義,描述FPGA時序約束整體框架; 第2章從建立/保持時間、啟動沿/鎖存沿等概念切入,分析4種基本時序路徑; 第3章聚焦時鐘分析與約束,涵蓋主時鐘、抖動、不確定性、延時、虛擬時鐘和衍生時鐘約束等內(nèi)容; 第4章講述輸入/輸出延時約束,依次分析輸入延時約束和輸出延時約束; 第5章闡述時序例外約束的意義,分析偽路徑約束、時鐘組約束、最大/最小延時約束、多周期路徑約束,說明其優(yōu)先級和邏輯設(shè)計方法; 第6章匯總其他時序約束,如Case Analysis、Disable Timing等; 第7章設(shè)計簡單時序工程,涵蓋前幾章的時序路徑并進行約束; 第8章總結(jié)時序約束技巧,分享作者學(xué)習(xí)歷程。
本書適合作為FPGA開發(fā)工程師和研究人員的參考書籍,尤其適合希望全面理解FPGA時序的開發(fā)者,也可以作為高等院校相關(guān)專業(yè)FPGA課程的教材。
本書的目標(biāo)是以簡單的語言、場景、繪圖把FPGA時序具象化,方便讀者理解、復(fù)現(xiàn)和拓展;使讀者理解時序、解決時序、而非推導(dǎo)或死記硬背公式。
FPGA因具備可編程、并行處理及低功耗等獨特優(yōu)勢,廣泛應(yīng)用于復(fù)雜數(shù)字邏輯、硬件加速、數(shù)字信號處理、邊緣計算、深度學(xué)習(xí)算法加速等領(lǐng)域。當(dāng)前時鐘頻率越來越快,數(shù)據(jù)帶寬越來越大,F(xiàn)PGA邏輯設(shè)計中時序問題凸顯,這使得FPGA時序分析和時序約束在高頻且邏輯功能復(fù)雜的設(shè)計中越來越重要。
在交通領(lǐng)域,車輛行駛速度快、流量大,則易導(dǎo)致交通事故與擁堵; 車輛行駛速度慢、流量小,則浪費交通資源且通行效率低。交通安全不應(yīng)僅靠限行限速,更需要合理調(diào)度公路資源、優(yōu)化交通規(guī)則,實現(xiàn)快速、安全通行。城市之間可以設(shè)計高速公路,城市之內(nèi)可以設(shè)計快速路,交叉路口設(shè)計智能紅綠燈,區(qū)域可以設(shè)計綠波路段,不斷提高交通資源的效率和利用率。
類比到FPGA邏輯設(shè)計中,高時鐘頻率和高帶寬如同提高車速和路寬,提升效率則容易引發(fā)數(shù)據(jù)阻塞、追尾和刮蹭。若要打造更快速、更穩(wěn)定的FPGA邏輯,不僅需要設(shè)計合理的邏輯功能,而且需要進行時序分析并設(shè)計時序約束。換言之,F(xiàn)PGA邏輯設(shè)計既要會修路,還要會當(dāng)交警,時序分析和約束就是當(dāng)交警。
然而,在學(xué)習(xí) FPGA 時序分析和約束的過程中,我發(fā)現(xiàn)存在一些問題;ヂ(lián)網(wǎng)上雖然有大量官方手冊、經(jīng)驗總結(jié)及論壇教程對其進行說明,但大多是針對某一時序問題展開分析和約束,不利于研究者了解完整的時序框架,完整且系統(tǒng)地對 FPGA 時序進行分析和約束的資料相對匱乏。同時對實際工程邏輯代碼、時序分析公式、時序路徑框圖及時序報告進行分析的案例較少,能夠?qū)r序報告中各類延時繪制成時序圖,以幫助研究者直觀理解時序的資料更是寥寥無幾。
我在學(xué)習(xí)過程中做了一些努力。首先,有意識地構(gòu)建了一個時序框架把時序問題規(guī)范到一起,摒棄從網(wǎng)上照搬一知半解的解決方案,因為很多時序問題可以采用不同的約束方案,只有理解全局后解決問題才變得游刃有余。其次,為不同時序問題設(shè)計工程邏輯代碼,依據(jù)時序分析公式、時序路徑框圖和時序報告對每一種時序問題進行分析和約束,理解問題最好的方法就是仿真和實踐。最后,為了直觀地呈現(xiàn)時序路徑的延時,我將時序報告中的延時數(shù)據(jù)繪制到時序路徑中,并繪制了時序圖,使時序問題變得清晰、明確。
最初學(xué)習(xí)FPGA時序分析和約束的筆記是手寫稿,隨著整理內(nèi)容的不斷增多,我對時序問題也有了更多的心得與體會。為了方便閱讀和規(guī)范化,我將其整理為電子稿,后來又編撰成冊,希望能與廣大讀者產(chǎn)生共鳴。本書內(nèi)容相對全面,幾乎涵蓋了Vivado 支持的所有時序約束指令,且每個時序分析案例都附有完整的邏輯代碼、時序原理公式、時序圖和路徑圖,清晰、直觀且不枯燥。此外,書中還包含一些場景實例,能夠幫助讀者更好地理解時序概念和相關(guān)問題。
本書介紹了4種基本時序路徑分析、時鐘約束、輸入/輸出延時約束、時序例外約束和其他時序約束。讀者既可以按照順序依次閱讀,也可依據(jù)研究需要針對具體約束進行查閱。需要強調(diào)的是,實踐出真知,對于初學(xué)者來說,親自對案例進行編譯和分析,自行繪制時序路徑和時序圖,會比單純閱讀更有助于深入理解。
最后,非常感謝清華大學(xué)出版社楊迪娜老師,為本書的立項、編輯和出版做了很多工作。感謝清華大學(xué)出版社對本書的認(rèn)可和支持。感謝天津大學(xué)董娜教授,在碩博6年的時間里對我精心指導(dǎo),幫助我拓寬科研思路并提升寫作能力。感謝劉星和常斐然同學(xué)對行文和繪圖提出寶貴意見。
非常感謝單位領(lǐng)導(dǎo)張大鋼、李紅軍、王進軍、劉劍鋒、朵慧智,在百忙之中抽出時間閱讀本書初稿,并提出了寶貴的建議和修改思路。還要感謝邢立佳、高廣杰、王高峰、杜金艷、李文健、梁志豪、秦法佳,他們是非常好的導(dǎo)師、朋友和工作伙伴,與他們共事十分愉快。
由于個人水平有限,書中難免存在缺陷或紕漏之處,懇請各位讀者諒解并批評指正。
常建芳2025年7月
常建芳,2022年于天津大學(xué)電氣自動化與信息工程學(xué)院獲得博士學(xué)位,長期從事深度學(xué)習(xí)、圖像處理、機器人SLAM方面的研究,目前主要從事FPGA邏輯代碼設(shè)計工作。共計發(fā)表6篇SCI論文,發(fā)表7項發(fā)明專利。
變量列表
第1章時序分析和約束
1.1什么是時序分析和約束
1.2什么是FPGA將時序分析和約束例子搬到FPGA中
1.3什么是Vivado2024.1邏輯設(shè)計/時序分析工具
1.4時鐘頻率和邏輯資源的影響
1.5FPGA的基本時序約束
第2章4種基本時序路徑
2.1時鐘與寄存器基本模型
2.2建立時間與保持時間
2.3啟動沿、鎖存沿與建立時間關(guān)系、保持時間關(guān)系
2.4基本時序路徑的相關(guān)概念
2.5寄存器到寄存器的時序路徑分析
2.6輸入引腳到寄存器的時序路徑分析
2.6.1系統(tǒng)同步接口輸入引腳到寄存器路徑分析
2.6.2源同步接口輸入引腳到寄存器路徑分析
2.7寄存器到輸出引腳的時序路徑分析
2.7.1系統(tǒng)同步接口寄存器到輸出引腳路徑分析
2.7.2源同步接口寄存器到輸出引腳路徑分析
2.8輸入引腳到輸出引腳的時序路徑分析
第3章時鐘約束
3.1主時鐘約束
3.1.1主時鐘約束語法
3.1.2主時鐘與主時鐘約束
3.1.3主時鐘時序分析報告
3.2時鐘抖動約束
3.2.1時鐘抖動約束語法
3.2.2時鐘抖動約束實例
3.3時鐘不確定性約束
3.3.1時鐘不確定性約束語法
3.3.2時鐘不確定性約束實例
3.3.3時鐘不確定性約束妙用
3.4時鐘延時約束
3.4.1時鐘延時約束語法
3.4.2時鐘延時約束實例
3.5虛擬時鐘約束
3.5.1系統(tǒng)同步接口輸入引腳到寄存器路徑的虛擬時鐘約束
3.5.2系統(tǒng)同步接口寄存器到輸出引腳路徑的虛擬時鐘約束
3.6衍生時鐘約束
3.6.1衍生時鐘約束語法
3.6.2衍生時鐘約束實例
3.7關(guān)于Max at Slow Process Corner和Min at Fast Process Corner
第4章輸入/輸出延時約束
4.1輸入延時約束
4.1.1輸入延時約束語法
4.1.2輸入延時約束實例
4.2輸出延時約束
4.2.1輸出延時約束語法
4.2.2輸出延時約束實例
第5章時序例外約束
5.1時序例外約束的意義
5.2偽路徑約束/時鐘組約束
5.2.1偽路徑約束語法
5.2.2偽路徑約束實例
5.2.3時鐘組約束語法
5.2.4時鐘組約束實例
5.3最大/最小延時約束
5.3.1最大/最小延時約束語法
5.3.2最大/最小延時約束實例
5.4多周期路徑約束
5.4.1多周期路徑約束語法
5.4.2同頻同相多周期路徑約束
5.4.3同頻異相多周期路徑約束
5.4.4慢時鐘域到快時鐘域多周期路徑約束
5.4.5快時鐘域到慢時鐘域多周期路徑約束
5.5時序例外約束優(yōu)先級
5.6時序例外約束對應(yīng)的邏輯設(shè)計
第6章其他時序約束
6.1時鐘約束
6.1.1Set Clock Sense約束
6.1.2Set External Delay約束
6.2時序斷言
6.2.1Set Data Check約束
6.2.2Set Bus Skew約束
6.3其他約束
6.3.1Set Case Analysis約束
6.3.2Set Disable Timing約束
6.3.3Group Path約束
6.3.4set_max_time_borrow約束
第7章時序案例
7.1跨時鐘域單脈沖傳遞
7.2跨時鐘域電平信號傳遞
7.3多周期路徑實例
第8章寫在最后
8.1FPGA時序約束技巧
8.2FPGA學(xué)習(xí)之路
8.3引用文件