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