本書以數字集成電路設計的實驗為主, 以基礎知識為輔, 適合不同大專院校的師生使用。教材為“電子信息材料與器件國家級實驗教學示范中心”系列教材之一, 隸屬于微電子相關專業的知識體系, 既可以和其他教材配套使用, 也可以獨立成篇。該教材主要包括“基礎知識”、“軟件介紹”、“基礎實驗”和“綜合實驗”四個部分, 其中第一部分為“基礎知識”, 重點介紹了數字集成電路所采用的TOPDOWN的設計流程, 并分別從FPGA和ASIC兩個方面對數字集成電路的設計方法進行了講解, 為整個教材提供基本的基礎知識支撐; 教程的第二部分為“軟件介紹”, 著重對本實驗中所用到的幾款EDA軟件的使用方法和流程進行介紹, 為進一步的實驗提供指導; 第三部分為“基礎性實驗”, 分別就基本門電路、觸發器、組合電路和時序電路安排若干的實驗內容, 為進一步的綜合性實驗打下基礎; 第四部分為“綜合性實驗”
目錄
第1章數字集成電路的設計流程1
第2章EDA軟件使用指南6
2.1仿真軟件——ModelSim6
2.1.1基于ModelSim的仿真流程6
2.1.2仿真設計7
2.2FPGA開發軟件——ISE12
2.2.1啟動ISE軟件12
2.2.2創建項目工程13
2.2.3添加設計的約束文件15
2.2.4邏輯綜合17
2.2.5FPGA設計實現19
2.2.6編程下載FPGA20
2.3調試利器——ChipScope Pro28
2.3.1ChipScope Pro工作原理28
2.3.2ChipScope Pro開發實例28
2.4邏輯綜合軟件——Design Compiler38
2.4.1啟動DesignCompiler綜合器39
2.4.2邏輯單元庫加載40
2.4.3用戶設計源文件的加載與分析41
2.4.4頂層設計文件設置44
2.4.5時序約束45
2.4.6綜合及優化46
2.4.7綜合結果導出48
2.5后端設計軟件——Astro50
2.5.1數據準備(data preparation)51
2.5.2設計建立(design setup)52
2.5.3布局規劃(floorplan)57
2.5.4時序設置(timing setup)63
2.5.5布局(placement)67
2.5.6時鐘樹綜合(clock tree synthesis)72
2.5.7布線75
2.5.8可制造性設計(design for manufacturing)82
2.5.9數據導出(data export)88
第3章基礎性實驗94
3.1基本邏輯門電路實驗94
3.1.1實驗目的94
3.1.2實驗原理94
3.1.3實驗工具94
3.1.4實驗步驟95
3.1.5VHDL參考源代碼95
3.2分頻器實驗96
3.2.1實驗目的96
3.2.2實驗原理96
3.2.3實驗工具97
3.2.4實驗步驟97
3.2.5VHDL參考源代碼97
3.3狀態機控制流水燈實驗99
3.3.1實驗目的99
3.3.2實驗原理99
3.3.3實驗工具99
3.3.4實驗步驟99
3.3.5VHDL參考源代碼100
3.4按鍵防抖電路實驗103
3.4.1實驗目的103
3.4.2實驗原理104
3.4.3實驗工具105
3.4.4實驗步驟105
3.4.5VHDL參考源代碼106
3.5數碼管掃描顯示電路實驗107
3.5.1實驗目的107
3.5.2實驗原理108
3.5.3實驗工具109
3.5.4實驗步驟109
3.5.5VHDL參考源代碼109
第4章綜合性實驗113
4.1樂曲演奏電路實驗113
4.1.1實驗目的113
4.1.2實驗原理113
4.1.3實驗工具116
4.1.4實驗步驟117
4.1.5VHDL參考源代碼122
4.2數字時鐘電路實驗126
4.2.1實驗目的126
4.2.2實驗原理126
4.2.3實驗工具127
4.2.4實驗步驟127
4.2.5VHDL參考源代碼128
4.3交通信號燈實驗145
4.3.1實驗目的145
4.3.2實驗原理145
4.3.3實驗工具146
4.3.4實驗步驟146
4.3.5VHDL參考源代碼146
4.4基于I2C接口的存儲器讀寫訪問綜合實驗153
4.4.1實驗目的153
4.4.2實驗原理153
4.4.3實驗工具158
4.4.4實驗步驟158
4.4.5VHDL參考源代碼158
4.5VGA綜合實驗188
4.5.1實驗目的188
4.5.2實驗原理188
4.5.3實驗工具192
4.5.4實驗步驟192
4.5.5VHDL參考源代碼192
4.6MIPS綜合實驗196
4.6.1實驗目的196
4.6.2實驗原理196
4.6.3實驗工具212
4.6.4實驗步驟212
4.6.5VHDL參考代碼212
主要參考文獻231
第1章數字集成電路的設計流程
集成電路(integrated circuit,IC)是微電子技術發展的一個標志性成果,集成電路的發展經歷了小規模(SSI)、中規模(MSI)、大規模(LSI)、超大規模(VLSI)階段,一直發展到目前的SoC,已經可以在單一芯片中集成中央處理器(CPU)、數字信息處理器(DSP)、接口、鎖相環(PLL)、模擬數字轉換器(ADC)等越來越多的模塊。同時,集成電路設計與加工的特征尺寸也達到十幾納米的水平。集成電路的高性能、高復雜性要求,給設計帶來了挑戰,同時也極大地促進了EDA的迅猛發展,尤其對于數字集成電路,其規模甚至達到單片幾億個晶體管,如果不依賴于EDA技術,其工作量是難以想象的。
電子設計自動化技術針對傳統的自底向上(bottom-up)的設計方法提出了自頂向下(top-dowm)的設計方法。自頂向下的設計過程是從系統硬件的高層次抽象描述向底層物理描述的一系列轉換過程。自頂向下的設計對底層單元的選取更加靈活,有利于更好地發揮設計人員的創造性,從而形成具有自主知識產權的芯片產品。自頂向下的設計流程如圖1-1所示。
圖1-1自頂向下設計流程
自頂向下的設計由功能級、行為級描述開始;寄存器傳輸(RTL)級描述為第一個中間結果;再將RTL級描述由邏輯綜合得到網表(net-list)或電路圖;利用EDA工具將網表自動轉換成目標文件下載到現場可編程門陣列(field programmable gate array,FPGA)/復雜可編程邏輯器件(complex programmable logic device,CPLD)或通過自動布局布線設計成專用集成電路(application specification integrated circuit,ASIC),從而得到電路與系統的物理實現。
在設計過程中,FPGA開發設計流程與ASIC設計流程有很大的差異。
FPGA的設計流程是利用EDA開發軟件對FPGA芯片進行開發的過程。FPGA的設計流程主要包括電路設計輸入、功能仿真、綜合、綜合后仿真、布局布線、布線后仿真以及芯片編程與調試等步驟。FPGA開發的主要流程如圖1-2所示。
圖1-2FPGA開發的主要流程
以下對各步驟進行簡要介紹:
(1)電路設計輸入。常用的電路設計輸入方法有硬件描述語言(HDL)和原理圖輸入等。原理圖輸入是一種最直接的描述方式,在可編程芯片發展的早期應用比較廣泛,它將所需的器件從元件庫中調出來,畫出原理圖。這種方法雖然直觀并易于仿真,但效率很低,且不易維護,不利于模塊構造和重用,可移植性差,當芯片升級后,所有的原理圖都需要做一定的改動。目前,在實際開發中應用最廣泛的就是HDL輸入法,它利用文本描述設計,其主流語言是Verilog HDL和VHDL。這兩種語言都是美國電氣與電子工程師協會(IEEE)的標準HDL,其共同的突出特點有:語言與芯片工藝無關,利于自頂向下設計,便于模塊的劃分,可移植性好,具有很強的邏輯描述和仿真功能,而且輸入效率很高。
(2)功能仿真。功能仿真,也稱為前仿真,是在編譯之前對用戶所設計的電路進行邏輯功能驗證,此時的仿真沒有延遲信息,僅對初步的功能進行檢測。仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量,仿真結果將會生成報告文件并輸出信號波形,從中便可以觀察各個節點信號的變化。如果發現錯誤,則返回修改邏輯設計。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟件。
(3)綜合。所謂綜合就是將較高級抽象層次的描述轉化成較低層次的描述。綜合優化根據目標與要求優化所生成的邏輯連接,使層次設計平面化,供FPGA布局布線軟件進行實現。即將設計輸入編譯成由與門、或門、非門、RAM、觸發器等基本邏輯單元組成的邏輯連接網表。常用的綜合工具有Synopsys(原Synplicity公司)公司的Synplify/Synplify Pro軟件以及各個FPGA廠家自己推出的綜合開發工具。
(4)綜合后仿真。綜合后仿真檢查綜合結果是否和原設計一致。在仿真時,把綜合生成的標準延時文件反標注到綜合仿真模型中,可估計網表中門延時帶來的影響。但由于沒有布線信息,這一步驟不能估計線延時,所以與布線后的實際情況還有一定的差距,并不十分準確。
(5)布局布線。布局布線即實現,是將綜合生成的邏輯網表配置到具體的FPGA芯片上,布局布線是其中最重要的過程。布局將邏輯網表中的底層單元合理地配置到FPGA芯片內部的固有硬件結構上。布線則根據布局的拓撲結構,利用芯片內部的各種連線資源,合理正確地連接各個元件。布線結束后,軟件工具會自動生成報告,提供有關設計中各部分資源的使用情況。基于對自身芯片知識產權的考慮,布局布線工具一般由各FPGA芯片生產商自主提供。
(6)布線后仿真。布線后仿真也稱為后仿真,是指將布局布線的延時信息反標注到設計網表中,對設計的電路進行驗證。后仿真包含的時序信息最完整,能較好地反映芯片的實際工作情況。
(7)芯片編程與調試。設計的最后一步就是芯片編程與調試。芯片編程是指產生使用的數據文件(位流文件,bitstream),然后將編程數據下載到FPGA芯片中。邏輯分析儀是FPGA設計的主要調試工具,但需要引出大量的測試引腳,且價格昂貴。目前,主流的FPGA芯片生產商都提供了內嵌的在線邏輯分析儀(如Xilinx ISE中的ChipScope、Altera QuartusII中的Signal TapII以及Signal Prob)來解決上述矛盾,它們只需要占用芯片少量的邏輯資源,具有很高的實用價值。
ASIC的設計可以粗略地分為設計輸入、邏輯綜合、仿真、布局(placement)、布線(rounting)、版圖后仿真、檢查驗證等步驟。利用商業化工具以及預先設計好的標準單元庫、宏單元庫已經使ASIC 設計成為速度最快、成本最低而且錯誤最少的一種IC 設計方法,因而ASIC 設計方法已迅速在工業界的各個領域得到推廣。ASIC的設計流程如圖1-3所示。
圖1-3ASIC設計流程
當HDL的行為級仿真通過之后,就可以進行ASIC邏輯綜合了。所謂ASIC邏輯綜合是指在工藝庫的基礎上通過映射和優化過程,把設計的RTL級描述轉換成與工藝密切相關的門級網表。在綜合過程中,設計者可以根據自己的需要加入時序約束或驅動負載約束等,使綜合結果合乎設計的要求。在ASIC邏輯綜合上,Cadence公司的AMBIT Build Gates 和Synopsys公司的Design Compiler都是經過無數驗證,切實可用的工具。綜合結束后為了及早地發現錯誤、排除錯誤,可以進行門級估算時序仿真,如果結果有錯誤就可以馬上回到代碼設計糾正錯誤,直到仿真結果符合要求。
接下來流程轉入版圖設計,在EDA工具環境下,可以將綜合生成的網表讀入并與工藝物理信息庫及時序庫配合,進行整個芯片的布局布線。布局布線走通后,可得到一個初步的版圖。為了驗證實際布線后寄生效應對設計的影響是否會導致時序出錯,必須進行版圖后仿真,仿真的方法與綜合后仿真相同。另外,版圖必須在隨后的DRC、LVS中進行驗證,以確保版圖不違背設計規則、無電氣錯誤。此外,在版圖設計完成后,還可以進行更為準確的晶體管級的功能仿真,以此確保芯片設計的正確性。當然以上流程往往不是跑一遍就能夠完全達到功能、時序等條件的要求,一般都需要經過多次的迭代和優化才能最終達到時序等條件的“收斂”。本章僅僅是對FPGA和ASIC設計的流程做了大致的介紹,后面的實驗教程有更為詳細的介紹和講解。
習題
(1)top-down設計方法主要包括哪幾個階段?分別是什么內容?
(2)FPGA開發的主要流程有哪些?
(3)ASIC設計流程包括哪些?
(4)FPGA開發的主要流程與ASIC設計流程有哪些區別?
(5)FPGA的主要廠商有哪些?各自使用的EDA軟件是什么?
第2章EDA軟件使用指南
“工欲善其事,必先利其器”,EDA軟件的熟練使用是學習數字集成電路設計的基礎。本章詳細介紹ModelSim仿真軟件、FPGA開發軟件ISE、調試利器Chipscope Pro、邏輯綜合軟件(design compiler)和后端設計軟件(Astro)的使用。
2-1仿真軟件——ModelSim
ModelSim是Mentor公司推出的優秀的HDL仿真軟件,它功能強大,提供友好的仿真環境,支持VHDL和Verilog混合仿真,具有速度快、精度高和便于操作的特點。它還具有代碼分析能力,可以看出不同代碼段消耗的資源情況。
2-1-1基于ModelSim的仿真流程
使用ModelSim進行仿真的流程如圖2-1所示。
圖2-1ModelSim仿真流程