TIMING_02 浅谈时序约束与时序分析
? ? ? ? ?由于該系列文章閱讀有順序性,所以請跳轉至該系列文章第一篇從頭開始閱讀,并按照文章末尾指示按順序閱讀,否則會云里霧里,傳送門在此:??https://blog.csdn.net/qq_33486907/article/details/89380368???《TIMING_01 時序約束與時序分析引導篇》
?
目錄
?
1 時序約束與時序分析
1.1 保證數字電路的正確性
1.2 對時序理解容易出現的誤解
1.3 FPGA與FPGA構成的系統
1.4 時序約束和時序分析的關系
1 時序約束與時序分析
? ? ? ? ?時序分析與時序約束一直以來都是數字電路設計中的重點和難點,即便一個數字電路功能設計的再好,如果實現時存在時序違規,其結果也是失敗的。時序違規的背后其實是版圖原理與實際電路工藝之間的矛盾,即現有電路工藝無法滿足版圖原理的時序性能;
? ? ? ? 如何解決這個問題呢? 方法很明顯:(1)優化版圖設計,在不改變電路功能的前提下,優化版圖時序性能; (2)改善電路工藝,以滿足電路設計的時序性能;
? ? ? ?優化版圖設計肯定比改善電路工藝的難度低,每一代電路工藝的進步,都需要大量的投入,尤其是在制成工藝進入7nm的時代,研發新的工藝不論是投入還是技術難度都越來越大。
1.1 保證數字電路的正確性
要保證數字電路設計的正確性其實要從兩個方面去考慮:(1)功能設計的正確性;(2)時序的正確性; 前者是功能要求后者則是性能要求,設計時往往考驗設計者的經驗和能力,設計功能時沒有加入對性能的考慮,容易導致設計失敗;所以要保證數字電路的正確性不僅僅是要保證功能的正確性,同時也要保證時序的正確性;
1.2 對時序理解容易出現的誤解
? ? ? ? 數字電路絕大多數都是以時序邏輯電路存在的,純組合邏輯電路是很少的使用的,這里舉一個例子說明;
? ? ? ? 使用硬件描述語言代碼編寫一個UART(異步串口)的電路代碼,設計流程走完以后就可以上板進行調試了,如果發現通信有問題,腦海中浮現的第一個想法“是不是時序設計的不正確?”。
? ? ? ? 其實這個“時序對不對?”這個說法是有問題的,對于設計的電路來講,UART能不能完成通信嚴格來講是屬于功能要求,正確的說法是設計是否滿足了UART的協議(比如波特率、起始位、停止位、數據采集、數據接收邏輯處理是否正確);
? ? ? ?“時序對不對?”這句話的正確理解應該是,對于用硬件描述語言設計的這個時序電路是否能在所要求性能的硬件環境下正常運行,而這個問題如果是使用正確的設計流程中,在時序約束和時序分析階段就應該知道答案,而不是等到上板調試后再來提出這個問題;
? ? ? ? ?講到這里,可能又會提出一個疑問,例如一個使用了SPI總線芯片,芯片手冊的時序圖上也給出了很多關于SPI總線的時序參數,如果這個設計的不對,能不能稱之為“時序對不對?” ,其實這個問題要分對象去看,對象不同說法不同。硬件描述語言描述的電路與SPI總線芯片進行通訊:(1)對于SPI總線芯片,時序圖上標注的時序參數,實際上是SPI總線芯片對時序性能的要求;(2)而對于硬件描述語言描述的電路,這些時序參數實際上只是邏輯功能的要求罷了,為了去滿足SPI總線芯片對時序性能的要求,硬件描述語言描述的電路會考慮如何去滿足下游芯片的時鐘周期、建立保持時間、數據采樣和數據發送的恰當時機,這些時序參數要求與SPI總線協議一起都是對硬件描述語言描述的電路的功能要求;
? ? ? ? 當然還有一種情況就是外圍芯片與硬件描述語言設計的電路是在同一時鐘域時,外圍芯片的時序要求也自然成為了硬件描述語言的時序要求,可以把這樣的一個系統看作是一個整體去看待,很明顯以上舉的兩個例子都不是屬于這種情況。
? ? ? ? ?以上觀點僅代表個人觀點,特此在這里提出可能誤解的地方。
1.3 FPGA與FPGA構成的系統
? ? ? ? 前面的做了很長的內容鋪墊,其實就為了能引出FPGA,FPGA與FPGA構成的系統仍然是數字電路的范疇,文章后續也是以FPGA與FPGA構成系統的時序約束與時序分析為主要內容,別的范疇在本文內容里也不在做過多的討論;
? ? ? ? ?自XILINX推出VIVADO和7系列FPGA以來,時序約束的文件從ISE的.UCF變成了業界標準的.XDC,約束的方法也進行轉變,對于FPGA開發者來說這是一件好事,因為Altera和XILINX兩大平臺的約束統一也就不在那么難了,可以說學會一個平臺的約束,那么另一個平臺你也就會了。(ISE的約束方式雖然方法不太一樣,但原理是一致的,時序分析的內容也值得參考),本篇文章的內容將結合示例,將時序分析原理、時序約束、時序分析、約束流程等進行一次較為全面的講解。
1.4 時序約束和時序分析的關系
? ? ? ? “好的時序性能是設計出來的,而不是約束出來的”;這句話是需要深刻體會一下的,為什么會這么說呢?
? ? ? ? 下面先來了解一下,時序約束到底在整個研發流程中都干了什么?
? ? ? ? 如圖所示是vivado的界面,功能排布上是按照標準的設計流程排版的,這里簡述一下FPGA的開發流程,設計輸入 → 功能仿真(Simulation)→ RTL分析(RTL Analysis)→ 綜合(Synthesis) → 實現(Implementation) ,具體如下圖所示:
? ? ? ? 當然這幅圖中的約束文件還包含了物理約束,這里只討論時序約束;
? ? ? ? 時序約束通常在設計綜合和設計實現里起作用。 在設計綜合階段,將優化過的RTL電路映射到FPGA的資源上,如何使用FPGA資源去映射才能更好的滿足時序約束的條件,綜合工具會盡力完成,同時在綜合完畢以后會給出相應的時序報告; 在設計實現階段,就是將綜合階段所映射的資源,在FPGA內部采用合適的布局和布線方式,來滿足時序約束的條件;
? ? ? ? 這里可以總結出時序約束的第一個目的:告訴EDA工具需要的時序性能,EDA工具會竭盡所能滿足;? 可以肯定的是時序約束會影響電路的映射和布局布線,但是工具所能改善畢竟有限的,如果設計很糟糕,工具竭盡所能也沒有滿足要求的時序性能,那么這時就應該去優化設計,而不是約束,約束則不是解決時序違例的根本辦法。
? ? ? ? 可能會提出另外一個問題,既然時序約束不能從源頭解決時序違例問題,改善的作用很有限,那么為什么還要進行時序約束呢? ?這就是時序約束的第二個目的:EDA工具會根據要求的時序性能,分析設計中的每一條時序路徑是否滿足要求,并告知不滿足時序的路徑,為優化設計提供依據,其實這個過程就是時序分析。? 如果不進行時序約束,EDA工具將按照默認設置進行分析,能不能滿足實際使用時的時序性能就不得而知了; 所以時序約束是時序分析的前提,沒有約束就沒有分析;
? ? ? ? ?簡單總結時序約束的作用:
? ? ? ? (1)使EDA工具優化綜合策略與布局布線,以滿足時序約束條件; (2)為時序分析提供參考依據;
? ? ? ? 第2條的作用往往比第1條的作用要大的多,在設計時序很緊張時,或許EDA工具的盡力,可以勉強使設計能正常工作,但是這樣的設計魯棒性很差(Robus),同時也不便于維護升級,后期即使一個很小的改動也會導致時序異常。但是好的設計就不會有這樣的問題,好的設計可以通過以下幾個方面獲得保證:(1)設計者的經驗;(2)良好的設計風格;(3)以時序分析工具分析結果為參考依據,通過優化設計解決所有關鍵路徑的時序違例問題;所以“好的時序性能是設計出來的,而不是約束出來的”;
不要急著跑,干貨在后面,下一篇文章傳送門在此:
https://blog.csdn.net/qq_33486907/article/details/89393007
《TIMING_03 時序分析原理》
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的TIMING_02 浅谈时序约束与时序分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 揭秘:网上抽奖系统如何防止刷奖
- 下一篇: TIMING_03 时序分析原理