官术网_书友最值得收藏!

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代碼均已做參數化處理,可以方便快捷地實現設計復用。

主站蜘蛛池模板: 固阳县| 婺源县| 响水县| 阳山县| 丽江市| 陵水| 宝山区| 浙江省| 宜都市| 太谷县| 宁陕县| 沙田区| 榕江县| 北安市| 家居| 德格县| 东平县| 康乐县| 西乌珠穆沁旗| 屏东市| 阜阳市| 红河县| 临江市| 东源县| 松溪县| 米林县| 抚远县| 汉川市| 娄底市| 洛川县| 微博| 灯塔市| 木兰县| 南康市| 广东省| 安龙县| 万宁市| 广宁县| 阳谷县| 天等县| 辽中县|