- AMD FPGA設計優化寶典:面向Vivado/VHDL
- 高亞軍編著
- 2349字
- 2023-12-12 20:02:29
1.2 設計方法的演變
FPGA的設計方法是伴隨著芯片架構的演變而演變的。在FPGA誕生初期,由于其內部資源較為單一,因此僅僅扮演著膠合邏輯的角色,在整個系統中只能起到協同作用。此時的設計方法也比較簡單,如圖1-24所示。設計輸入使用RTL(Register Transfer Level,寄存器傳輸級)描述方式,功能仿真也稱為前仿或行為級仿真,以驗證設計功能是否正確;綜合后仿真(Post Synthesis Simulation)則用于驗證綜合后的電路功能是否正確;時序仿真又稱為后仿,仿真時反標了門級延遲和布線延遲信息,用于驗證布線后的電路功能是否正確。一般情況下,無論是綜合后仿真還是時序仿真,相比于行為級仿真都更為耗時,尤其是當設計規模比較大時,因此,通常當設計出現問題時才會執行綜合后仿真和時序仿真。
隨著FPGA內部資源越來越豐富,嵌入了BRAM,增大了存儲空間,嵌入了乘加器,增強了計算能力,嵌入了高速收發器,提升了數據傳輸帶寬,進行FPGA設計時要結合算法特征,分析哪些算法適合在FPGA上實現,以充分發揮FPGA的性能,從而形成如圖1-25所示的開發流程。這里,軟/硬件分割是設計的關鍵點。總體而言,數據流比較單一、運算密集但比較規整的算法(如FIR數字濾波器、FFT等)就非常適合在FPGA上實現。進一步劃分,則要采取“緩存-計算-緩存”的模式,以適配FPGA的架構。而分支較多、判斷條件復雜、數據路徑形成反饋回路的算法更適合在CPU上實現。同時,FPGA更適合處理定點數據類型(盡管目前FPGA也支持浮點數據類型)。圖1-25中FPGA部分的頂層功能驗證過程與圖1-24一致,可采用Xilinx開發工具ISE(Integrated Software Environment)完成。

圖1-24

圖1-25
針對FPGA子系統,要從3個角度考慮,即物理級設計規范、時序設計規范和硬件設計規范,如圖1-26所示。其中,物理級設計規范是為芯片選型服務的,根據資源評估、功耗預算和時鐘頻率確定芯片型號。時序設計規范是指在確定時鐘網絡拓撲結構(時鐘管腳位置、輸入時鐘頻率、輸出時鐘頻率、全局時鐘/區域時鐘)的基礎上,規劃I/O時序(尤其是源同步設計和系統同步設計)和跨時鐘域路徑時序,基于此描述時序約束。硬件設計規范則是指根據數據流合理規劃RTL代碼層次結構,在此基礎上進行各子模塊的開發,最終為時序收斂服務。

圖1-26
在硬件設計規范中,RTL代碼層次結構是重點,這對綜合、布局布線和時序收斂都會產生直接影響,應遵循的原則如下。
? 需要實例化的輸入/輸出單元(如IDDR、ODDR、ISERDES、OSERDES等)應盡可能靠近設計頂層,盡管IBUF、OBUF、IOBUF和OBUFT可由綜合工具自動推斷出來,但要確保IOBUF、OBUFT的使能信號和輸入/輸出信號在同一層次,以確保工具正確推斷。
? 將時鐘生成模塊(通常采用IP Clocking Wizard生成時鐘,不建議使用MMCM或PLL原語)放在頂層,方便其他模塊使用時鐘。
? 在層次邊界添加寄存器,確保關鍵模塊是寄存器輸出,這樣可將關鍵路徑隔離在單一層次或模塊之內,對于修復時序違例及設計調試大有裨益。
? 確保需要手工布局的模塊在同一層次之內。
圖1-27給出了基于上述原則而形成的層次結構,圖中,每個子模塊的陰影部分表示輸出寄存器。

圖1-27
隨著FPGA中嵌入ARM核構成SoC芯片,如Zynq-7000,SoC的設計方法應運而生,如圖1-28所示。在軟/硬件分割階段,根據算法特征和系統需求(是否運行操作系統)將系統分為兩大模塊:硬件模塊(在PL上實現)和軟件模塊(在PS上實現)。硬件開發依然采用傳統的FPGA開發模式。軟件開發則需要借助Xilinx開發工具SDK(Software Development Kit)。

圖1-28
芯片架構和設計方法的演變也催生了Xilinx新一代開發工具Vivado的問世,隨之問世的還有高層次綜合工具Vivado HLS(現更名為Vitis HLS),Vivado反過來又影響了設計方法。如圖1-29所示,Vivado提出了以IP為核心的設計理念,進一步強調了設計的可復用性。在設計輸入階段,設計源文件可以是傳統的RTL代碼,可以是C/C++或OpenCL模型(采用Vitis HLS開發),也可以是Simulink下的AIE模型、HDL模型(原System Generator)或HLS模型(這3個模型隸屬于同一個開發工具Vitis Model Composer,該開發工具嵌入在Simulink中)。其中,以高級語言(C/C++或OpenCL)描述的模型和以Vitis Model Composer搭建的模型均為高抽象度模型,需要借助相應的工具將其轉化為HDL(Hardware Description Language)代碼。而Vitis HLS或Vitis Model Composer最終都將其封裝為IP,同時,傳統的RTL代碼描述的模型也可以通過IP封裝器(IP Packager)封裝為IP,這些IP均可直接嵌入Vivado IP Catalog當作常規IP使用,也可以直接在IP集成器(IP Integrator,IPI)中以模塊方式使用。這樣,在IPI中進行設計開發就像搭積木一樣。基于IPI開發設計形成的文件為.bd文件,為了實現IPI模型的可復用,Vivado又引入了BDC(Block Design Container)功能,即可以在一個IPI模型中實例化另一個IPI模型。在設計調試方面,可以借助VLA(Vivado Logic Analyzer,Vivado邏輯分析儀)。VLA取代了ISE時代的ChipScope。使用VLA需要在設計中添加ILA(Integrated Logic Analyzer)或VIO(Virtual Input/Output)。有3種方式可以完成這一操作:①在RTL代碼中實例化ILA和VIO(VIO僅支持代碼實例化);②在綜合后的網表中插入ILA;③在布線后的網表中采用ECO(Engineering Change Order,工程變更命令)方式修改ILA。

圖1-29
對比圖1-29和圖1-24不難發現,Vivado要求在綜合之后就要對設計進行時序分析,確保建立時間收斂或接近收斂,這實際上是一個重大變化。這意味著若綜合后依然存在建立時間違例,那么布線后時序收斂的可能性也不會大。
在軟件開發方面,Xilinx于2019年推出了統一的軟件開發平臺Vitis,取代了原有的SDAccel,同時,其功能進一步增強。SoC、MPSoC、AIE均可在Vitis下進行開發。
無論工具如何推陳出新,功能如何變化,到目前為止,FPGA設計始終遵循的一個思路就是提高設計的可復用性。簡而言之,對于一些常用模塊,通過參數化處理,使其可以適配不同項目的需求,提高設計的可復用性。這樣的好處是避免了重復開發,從而縮短開發周期,同時因為這些模塊已經經過實際項目的驗證,所以在功能和質量方面都有所保障。這其實就是用戶自己開發的IP。我們把“可復用性”的理念進一步擴大,如圖1-30所示。設計輸入階段,從RTL代碼到C/C++代碼,再到Model Composer模型,都可以做成參數化形式。相應的功能仿真階段用到的HDL測試平臺、C/C++測試平臺和Model Composer測試平臺也可以做成參數化形式。

圖1-30
本書提供的很多VHDL代碼均已做參數化處理,可以方便快捷地實現設計復用。
- 大學計算機基礎(第二版)
- 構建移動網站與APP:HTML 5移動開發入門與實戰(跨平臺移動開發叢書)
- JavaScript+jQuery開發實戰
- Web開發的貴族:ASP.NET 3.5+SQL Server 2008
- 基于差分進化的優化方法及應用
- Java Web程序設計任務教程
- Mastering JavaScript High Performance
- jQuery炫酷應用實例集錦
- 移動增值應用開發技術導論
- 工業機器人離線編程
- Learning Nessus for Penetration Testing
- RESTful Web Clients:基于超媒體的可復用客戶端
- Simulation for Data Science with R
- Data Science Algorithms in a Week
- Mastering Unreal Engine 4.X