近年來,隨著微電子學的迅速發展以及SoC(System on Chip,片上系統)技術在設計領域引起的深刻變革,EDA(Electronic Design Automatic,電子設計自動化)工具在系統設計中的地位愈發重要。特別是20世紀90年代后,電子系統已經由電路板級發展為ASIC(Application Specific Integrated Circuit,專用集成電路)、FPGA(Field Programmable Gate Array,現場可編程門陣列)以及嵌入式系統等多種模式,其中FPGA設計正是當前數字系統設計領域中的重要方式之一。
本文以Altera公司的FPGA為目標器件,通過一個8-bit RISC CPU的設計實例,系統地介紹了FPGA的完整設計流程以及開發過程中用到的多種EDA工具,包括Modelsim、Synplify、Quartus II,并重點說明如何使用這些EDA工具進行協同設計。
1 FPGA的設計流程
一般來說,完整的FPGA設計流程包括電路設計與輸入、功能仿真、綜合優化、綜合后仿真、實現與布局布線、時序仿真、板級仿真與驗證、調試與加載配置等主要步驟,如圖1所示。
電路設計與輸入是指通過某些規范的描述方式,將工程師的電路構思輸入給EDA工具,常用的設計方法有HDL(Hardware Description Language,硬件描述語言)設計輸入法與原理圖設計輸入法。目前進行大型工程設計時,最常用的設計方法是HDL設計輸入法,它利于自頂向下設計以及模塊的劃分與復用,可移植性和通用性好,設計不因芯片的工藝與結構的不同而變化,更利于向ASIC移植。
電路設計完成后,要用專用的仿真工具對設計進行功能仿真(Functional Simulation),驗證電路功能是否符合設計要求。功能仿真又稱前仿真(Pre-Simulation)。通過仿真能及時發現設計中的錯誤,加快設計進度,提高設計的可靠性。
綜合(Synthesis)優化是指將HDL語言、原理圖等設計輸入翻譯成由基本門、RAM、觸發器等基本邏輯單元組成的邏輯網表,并根據目標與要求(約束條件)優化所生成的邏輯網表,輸出標準格式的網表文件,供FPGA廠商的布局布線器進行實現。
綜合后仿真(Post Synthesis Simulation)的作用是檢查綜合出的結果與原設計是否一致。作綜合后仿真時,要把綜合生成的標準延時格式SDF(Standard Delay Format)文件反標注到綜合仿真模型中去,可估計門延時帶來的影響。綜合后仿真雖然比功能仿真精確一些,但是只能估計門延時,不能估計線延時,仿真結果與布線后的實際情況還有一定差距,并不是十分準確。目前主流綜合工具日益成熟,對于一般性設計,如果設計者確信自己表述明確,沒有綜合歧義發生,則可以省略綜合后仿真步驟。
綜合結果的本質是一些由基本門、觸發器、RAM等基本邏輯單元組成的邏輯網表,它與芯片實際的配置情況還有較大差距,此時應該使用FPGA廠商提供的軟件工具,將綜合輸出的邏輯網表適配到具體FPGA器件上,這個過程叫做實現(Implementation)。在實現過程中最主要的過程是布局布線(P&R),所謂布局(Place)是指將邏輯網表中的硬件原語或底層單元合理地適配到FPGA內部的固有硬件結構上,布局的優劣對設計的最終實現結果(包括速度和面積兩個方面)影響很大;所謂布線(Route)是指根據布局的拓撲結構,利用FPGA內部的各種連線資源,合理正確地連接各個元件的過程。一般情況下,用戶可以通過設置參數指定布局布線的優化準則。總體來說,優化目標主要有兩個方面——面積和速度。一般根據設計的主要矛盾,選擇面積或速度或平衡兩者等優化目標,但是當兩者沖突時,一般滿足時序約束要求更重要一些,此時選擇速度或時序優化目標效果更佳。
將布局布線的時延信息反標注到設計網表中,所進行的仿真就叫時序仿真(Timing Simulation)或布局布線后仿真,簡稱后仿真(Post-Simulation)。布局布線后生成的SDF文件包含的時延信息最全,不僅包含門延時,還包含實際布線延時,所以布局布線后仿真最準確,能較好地反映出芯片的實際工作情況。一般來說,布局布線后仿真步驟必須進行,通過布局布線后仿真能檢查設計時序與FPGA的實際運行情況是否一致,確保設計的可靠性與穩定性。
在有些高速設計情況下,還需要使用第三方的板級驗證工具進行仿真與驗證,這些工具通過對設計的IBIS、HSPICE等模型的仿真,能較好地分析高速設計的信號完整性、電磁干擾等電路特性等。FPGA設計開發流程的最后步驟就是在線調試或將生成的配置文件寫入芯片中進行測試。
2 EDA工具介紹
圖1不僅顯示了FPGA的設計流程,還給出了8-bit RISC CPU設計實例中用到的EDA工具與FPGA設計流程中每一步的對應關系。
2.1 仿真工具Modelsim
目前仿真工具種類繁多,但在業界最流行、影響力最大的仿真工具還是Mentor Graphics公司的Modelsim,其主要特點是仿真速度快、仿真精度高,且圖形化界面友好,具有結構、信號、波形、進程、數據流等窗口。Modelsim不僅支持VHDL和Verilog HDL的仿真,還支持VHDL和Verilog HDL混合編程的聯合仿真。PC版Modelsim的仿真速度也很快,甚至和工作站版不相上下。
2.2 綜合工具Synplify
Synplicity公司的Synplify作為新興的綜合工具在綜合策略和優化手段上有較大幅度的提高,特別是其先進的時序驅動和行為級提取綜合技術B.E.S.T(Behavior Extraction Synthesis Technology)算法引擎,使其綜合結果面積小、速度快,在業界口碑很好,如果結合Synplicity公司的Amplify物理約束功能,對很多設計能大幅度地減少資源,優化面積達到30%以上。
2.3 集成開發環境Quartus II
Quartus II是Altera公司的第四代可編程邏輯器件集成開發環境,提供從設計輸入到器件編程的全部功能。Quartus II可以產生并識別EDIF網表文件、VHDL網表文件和Verilog HDL網表文件,為其它EDA工具提供了方便的接口。
3 8-bit RISC CPU設計實例
CPU是一個復雜的數字邏輯電路,但其基本部件的邏輯并不復雜,可將其分為8個模塊,各模塊的名稱及功能列于表1中,它們之間的連接關系如圖2所示。
為了對所設計的CPU進行仿真測試,還需要建立一些必要的外圍虛擬器件模型,包括裝載測試數據的RAM、存儲測試程序的ROM和用于選通RAM或ROM的地址譯碼器ADDRDEC。在仿真測試中,用這些虛擬器件來代替真實的器件對所設計的CPU進行驗證,檢查各條指令的執行是否正確、與外圍電路的數據交換是否正常,這與用真實器件進行調試的情況非常接近。這些虛擬器件模型都可以用Verilog HDL描述,由于不需要被綜合成具體的電路,所以只要保證這些虛擬器件模型的功能和接口信號正確即可。它們之間的連接關系如圖3所示。
在測試臺程序(Testbench)中利用模塊調用的方法把CPU及其外圍測試模塊按圖3連接起來。在Testbench中運行3個不同的匯編程序,對CPU進行完整的邏輯測試與驗證。在Modelsim中,首先對所有的設計輸入文件進行編譯,編譯通過后,對Testbench模塊進行仿真。下面截取了一段功能仿真的結果:
run -all
# ROM Loaded Successfully
# RAM Loaded Successfully
# Running CPUtest1
# TIME PC INSTR ADDR DATA
# 1200.0ns 0000 JMP 003c zz
# 2000.0ns 003c JMP 0006 zz
# 2800.0ns 0006 LDA 1800 00
# 3600.0ns 0008 SKZ 0000 zz
# A HALT Instruction was Processed
# Break at cpu_test.v line 29
功能仿真通過后,要根據目標器件(Altera FLEX10K EPF10K10 TC144-4)對設計進行綜合。為了便于及時發現綜合中出現的問題,綜合工作應分階段進行,首先對構成CPU的各個子模塊進行綜合以檢查其可綜合性,然后再對整體的CPU模塊進行綜合優化。綜合工具選擇Synplify。
布局布線工具選擇Quartus II,對Synplify綜合器輸出的edf文件進行全編譯。全編譯是指從分析、綜合、適配(布局布線)、編程到時序分析的全過程。實際上,設計在Synplify中已經綜合好了,但分析與綜合對于Quartus II來說是必須的,主要是用來生成數據庫文件。由于Quartus II中還內嵌了綜合工具,所以也可以使用Quartus II來完成從綜合到布局布線的全過程(即全編譯)。全編譯完成后,Quartus II會自動生成布局布線后的網表文件和標準延時格式SDF文件。
要完成時序仿真,首先要將功能仿真時Modelsim工程中的RTL級設計文件替換為Quartus II布局布線后生成的網表文件,并編譯通過。在Modelsim中,加入事先編譯好的Altera仿真庫文件和延時反標SDF文件,對Testbench模塊進行仿真。截取的一段時序仿真結果如下:
run -all
# ROM Loaded Successfully
# RAM Loaded Successfully
# Running CPUtest1
# TIME PC INSTR ADDR DATA
# 1239.0ns 0000 JMP 003c zz
# 2039.0ns 003c JMP 0006 zz
# 2839.0ns 0006 LDA 1800 00
# 3639.0ns 0008 SKZ 0000 zz
# A HALT Instruction was Processed
# Break at cpu_test.v line 29
與功能仿真的結果相比,時序仿真的結果雖然有39ns的延遲,但系統的邏輯功能卻未發生變化,這說明綜合和布局布線帶來的延遲并未導致系統功能的改變。
本設計選用的下載芯片為Altera公司FLEX 10K系列的EPF10K10TC144-4,它具有144個I/O引腳,其中可分配的有96個,內部具有576個邏輯宏單元。下載工具選擇Quartus II,首先選擇器件、分配管腳,然后執行全編譯。全編譯后會生成一些數據文件,其中擴展名為hex的是十六進制輸出文件,它包含了布局布線后的器件、邏輯單元和管腳分配等編程信息。通過下載線將計算機的COM口與實驗板的COM口連接起來,使用燒錄工具將hex文件下載到EPF10K10TC144-4中。
4 結論
在實際的FPGA開發中,選用Modelsim + Synplify + Quartus II的EDA工具組合能很好地規劃設計流程,充分利用各EDA工具的優點,提高開發效率。
本文作者創新點在于將FPGA開發過程中的多種EDA工具有機地結合在一起,并通過一個CPU的設計實例證明了利用多種EDA工具進行FPGA協同設計的可實現性。
責任編輯:gt
評論
查看更多