《數(shù)字邏輯與EDA設(shè)計》課件-第5章_第1頁
《數(shù)字邏輯與EDA設(shè)計》課件-第5章_第2頁
《數(shù)字邏輯與EDA設(shè)計》課件-第5章_第3頁
《數(shù)字邏輯與EDA設(shè)計》課件-第5章_第4頁
《數(shù)字邏輯與EDA設(shè)計》課件-第5章_第5頁
已閱讀5頁,還剩270頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第5章基于EDA的數(shù)字邏輯電路設(shè)計基礎(chǔ)

5.1EDA技術(shù)簡介5.2EDA設(shè)計流程及工具5.3FPGA簡介5.4IP核基礎(chǔ)5.5EDA開發(fā)綜合實例1:Modelsim的使用5.6EDA開發(fā)綜合實例2:LiberoIDE完整設(shè)計流程5.7EDA開發(fā)綜合實例3:SmartDesign的使用5.8本章小結(jié)過去40年,數(shù)字邏輯電路經(jīng)歷了巨大改進(jìn)和提高,現(xiàn)實的需求促使數(shù)字邏輯電路的結(jié)構(gòu)和功能變得越來越復(fù)雜,傳統(tǒng)的基于中小規(guī)模集成電路(如74系列)及基于原理圖的設(shè)計方法已經(jīng)無法適應(yīng)數(shù)字邏輯電路在功能、體積以及成本等方面的需要,同時也促使設(shè)計方法發(fā)生了巨大變化。因此,從20世紀(jì)70年代末期開始,在各大電子設(shè)計自動化(ElectronicDesignAutomation,EDA)公司、大學(xué)以及研究機(jī)構(gòu)的共同努力下,出現(xiàn)了多種類型的硬件描述語言(HardwareDescriptionLanguage,HDL),用來描述數(shù)字邏輯電路的結(jié)構(gòu)和功能。設(shè)計者采用HDL從更高的抽象層次對數(shù)字邏輯電路進(jìn)行建模,使用EDA軟件獲得實際電路結(jié)構(gòu)并對其功能和時序進(jìn)行仿真和驗證,已經(jīng)成為現(xiàn)代數(shù)字邏輯電路設(shè)計的最佳方式?,F(xiàn)場可編程門陣列(FieldProgrammableGateArray,F(xiàn)PGA)是一種半導(dǎo)體器件,可以在制造完成后進(jìn)行編程。FPGA的硬件功能不是預(yù)先確定好的,而是支持對產(chǎn)品特性和功能進(jìn)行編程,以適應(yīng)新標(biāo)準(zhǔn),即使產(chǎn)品已經(jīng)在現(xiàn)場使用了,也可以針對某些應(yīng)用重新配置硬件,故稱為“現(xiàn)場可編程”??梢允褂肍PGA來實現(xiàn)專用集成電路(ApplicationSpecificIntegratedCircuit,ASIC)或?qū)S脴?biāo)準(zhǔn)產(chǎn)品(ApplicationSpecificStandardProduct,ASSP)完成的任何邏輯功能,而且在產(chǎn)品發(fā)售后也能夠?qū)δ苓M(jìn)行更新,在很多應(yīng)用中都具有一定優(yōu)勢。5.1EDA技術(shù)簡介

5.1.1EDA技術(shù)及其發(fā)展

最早的電子設(shè)計自動化EDA軟件僅僅是一些繪圖軟件,包括繪制電路原理圖、印刷電路板圖、集成電路芯片板圖的軟件,并能進(jìn)行一些簡單的數(shù)值計算等,隨后又出現(xiàn)了自動布局布線工具,這類軟件被稱為第一代EDA軟件。后來又出現(xiàn)了第二代EDA軟件,可以通過硬件描述語言輸入生成設(shè)計,它包括邏輯綜合、仿真等。近年來又出現(xiàn)了第三代EDA軟件,稱為電子系統(tǒng)設(shè)計自動化(ESDA),可以通過概念輸入(框圖、公式等)自動生成各種設(shè)計結(jié)果,包括ASIC芯片設(shè)計結(jié)果、電路原理圖、印刷電路板(PrintedCircuitBoard,PCB)板圖以及軟件等,并且可以進(jìn)行機(jī)電一體化設(shè)計。與傳統(tǒng)的設(shè)計方法不同,現(xiàn)代電子工程師們設(shè)計系統(tǒng)的過程首先是描述系統(tǒng),然后用EDA工具在計算機(jī)上進(jìn)行系統(tǒng)級仿真,設(shè)計適合自己用的ASIC芯片;用通用和專用芯片構(gòu)成系統(tǒng),進(jìn)行功能模擬和帶延時的仿真;布PCB板,對PCB板進(jìn)行仿真,最終生產(chǎn)調(diào)試成功。

在計算機(jī)技術(shù)的推動下,電子技術(shù)在20世紀(jì)末獲得了飛速的發(fā)展,現(xiàn)代電子產(chǎn)品幾乎滲透于社會的各個領(lǐng)域,有力地推動了社會生產(chǎn)力的發(fā)展和信息化程度的提高,同時又促使現(xiàn)代電子產(chǎn)品性能的進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。電子技術(shù)發(fā)展的根基是微電子技術(shù)的進(jìn)步,它表現(xiàn)在大規(guī)模集成電路加工技術(shù),即半導(dǎo)體工藝技術(shù)的發(fā)展上。表征半導(dǎo)體工藝水平的線寬已經(jīng)達(dá)到28nm以下,并還在不斷地縮??;在硅片單位面積上集成了更多的晶體管;集成電路設(shè)計在不斷地向超大規(guī)模、極低功耗和超高速的方向發(fā)展。同時,這些專用集成電路(ASIC)的設(shè)計成本還在不斷降低,而在功能和結(jié)構(gòu)上,現(xiàn)代的集成電路已能實現(xiàn)片上系統(tǒng)(SystemonaChip,SoC)。

EDA技術(shù)利用計算機(jī)完成電子系統(tǒng)設(shè)計,是一種節(jié)省設(shè)計而又高效率的現(xiàn)代設(shè)計理念。尤其是可編程器件和軟件仿真模擬方法的使用,給傳統(tǒng)的電路設(shè)計方法帶來了重大的變革,使得設(shè)計工程師們從繁雜而凌亂的工作中解脫出來,而把重點(diǎn)放在電路的設(shè)計上。EDA工具以計算機(jī)為工具,設(shè)計者只需要完成對系統(tǒng)功能的HDL描述,就可以由計算機(jī)軟件完成數(shù)字系統(tǒng)的邏輯化簡、邏輯分割、邏輯綜合、結(jié)構(gòu)綜合(布局布線)以及邏輯優(yōu)化和仿真測試等功能,直至實現(xiàn)既定性能的電子線路系統(tǒng)。EDA技術(shù)使得設(shè)計者的工作僅限于利用軟件的方式,即利用HDL和EDA軟件來完成對系統(tǒng)硬件功能的實現(xiàn)。5.1.2EDA技術(shù)實現(xiàn)的目標(biāo)

一般來說,利用EDA技術(shù)進(jìn)行數(shù)字邏輯電路設(shè)計的最后目標(biāo)是完成ASIC或PCB的設(shè)計和實現(xiàn),如圖5-1所示。其中,PCB設(shè)計指的是電子系統(tǒng)的印刷電路板設(shè)計,從電路原理圖到PCB上元件的布局、布線、阻抗匹配、信號完整性分析及板級仿真,到最后的電路板機(jī)械加工文件生成,這些都需要相應(yīng)的計算機(jī)EDA工具軟件輔助設(shè)計者來完成,這僅是EDA技術(shù)應(yīng)用的一個重要方面。ASIC作為最終的物理平臺,集中容納了用戶通過EDA技術(shù)將電子應(yīng)用系統(tǒng)的既定功能和技術(shù)指標(biāo)具體實現(xiàn)的硬件實體。圖5-1EDA技術(shù)實現(xiàn)的目標(biāo)5.1.3EDA和傳統(tǒng)設(shè)計方法的比較

在傳統(tǒng)的數(shù)字邏輯電路或集成電路(IntegratedCircuit,IC)設(shè)計中,手工設(shè)計占有較大的比例。手工設(shè)計一般先按電子系統(tǒng)的具體功能要求進(jìn)行功能劃分,然后對每個子模塊畫出真值表,用卡諾圖進(jìn)行手工邏輯化簡,寫出布爾表達(dá)式,畫出相應(yīng)的邏輯線路圖,再據(jù)此選擇元器件,設(shè)計電路板,最后進(jìn)行實測與調(diào)試。手工設(shè)計方法的缺點(diǎn)是:

(1)對于復(fù)雜電路的設(shè)計、調(diào)試十分困難。

(2)由于無法進(jìn)行硬件系統(tǒng)仿真,如果某一過程存在錯誤,則查找和修改十分不便。

(3)設(shè)計過程中產(chǎn)生大量文檔,不易管理。

(4)對于IC設(shè)計而言,設(shè)計實現(xiàn)過程與具體生產(chǎn)工藝直接相關(guān),因此可移植性差。

(5)只有在設(shè)計出樣機(jī)或生產(chǎn)出芯片后才能進(jìn)行實測。

相比之下,EDA技術(shù)有著很大的不同:

(1)用HDL對數(shù)字邏輯電路進(jìn)行抽象的行為與功能描述,以及具體的內(nèi)部線路結(jié)構(gòu)描述,從而可以在電子設(shè)計的各個階段、各個層次進(jìn)行計算機(jī)模擬驗證,保證設(shè)計過程的正確性,大大降低設(shè)計成本,縮短設(shè)計周期。

(2)?EDA工具之所以能夠完成各種自動設(shè)計過程,關(guān)鍵是有各類庫的支持,如邏輯仿真時的模擬庫、邏輯綜合時的綜合庫、版圖綜合時的版圖庫、測試綜合時的測試庫等。這些庫都是EDA公司與半導(dǎo)體生產(chǎn)廠商緊密合作、共同開發(fā)的。

(3)?HDL也大多是文檔型的語言(如VerilogHDL),極大簡化了設(shè)計文檔的管理。

(4)?EDA技術(shù)中最具現(xiàn)代電子設(shè)計技術(shù)特征的功能,是日益強(qiáng)大的邏輯設(shè)計仿真測試技術(shù)。使用EDA仿真測試技術(shù),只需通過計算機(jī)模擬,就能對所設(shè)計的電子系統(tǒng)從各種不同層次的系統(tǒng)性能特點(diǎn),完成一系列準(zhǔn)確的測試與仿真操作;在完成實際系統(tǒng)的安裝后,還能對系統(tǒng)上的目標(biāo)器件進(jìn)行所謂的“邊界掃描測試”。這一切都極大地提高了大規(guī)模系統(tǒng)電子設(shè)計的自動化程度。

(5)無論傳統(tǒng)的應(yīng)用電子系統(tǒng)設(shè)計得如何完美,使用了多么先進(jìn)的功能器件,都掩蓋不了一個無情的事實,就是該系統(tǒng)對于設(shè)計者來說,沒有任何自主知識產(chǎn)權(quán)可言,因為系統(tǒng)中的關(guān)鍵性器件往往并非出自設(shè)計者之手,這將導(dǎo)致該系統(tǒng)的應(yīng)用直接受到限制。基于EDA技術(shù)的設(shè)計則不同,使用HDL表達(dá)的專用功能設(shè)計在實現(xiàn)目標(biāo)方面有很大的可選性,它既可以用不同來源的通用FPGA/CPLD實現(xiàn),也可以直接以ASIC來實現(xiàn),設(shè)計者擁有完全的自主權(quán),不再處處受到限制。

(6)傳統(tǒng)的電子設(shè)計方法至今沒有任何標(biāo)準(zhǔn)加以約束,因此設(shè)計效率低、系統(tǒng)性能差、開發(fā)成本高、市場競爭力小。而EDA技術(shù)的設(shè)計語言是標(biāo)準(zhǔn)化的,不會由于設(shè)計對象的不同而改變;其開發(fā)工具是規(guī)范化的,EDA軟件平臺支持任何標(biāo)準(zhǔn)化的設(shè)計語言;其設(shè)計成果是通用的,具有規(guī)范的接口協(xié)議;具有良好的可移植性與可測試性,為系統(tǒng)開發(fā)提供了可靠的保證。

(7)從電子設(shè)計方法學(xué)來看,EDA技術(shù)最大的優(yōu)勢就是能將所有的設(shè)計環(huán)節(jié)納入統(tǒng)一的自頂向下的設(shè)計方案中。

(8)?EDA不但在整個設(shè)計流程上充分利用計算機(jī)的自動設(shè)計能力、在各個設(shè)計層次上利用計算機(jī)完成不同內(nèi)容的仿真模擬,而且在系統(tǒng)板設(shè)計結(jié)束后仍可利用計算機(jī)對硬件系統(tǒng)進(jìn)行完整的測試。而傳統(tǒng)的設(shè)計方法只能在最后完成的系統(tǒng)上進(jìn)行局部的且僅限于軟件的仿真調(diào)試,在整個設(shè)計的中間過程是無能為力的。5.1.4EDA技術(shù)的發(fā)展趨勢

隨著市場需求的增長、集成工藝水平及計算機(jī)自動化設(shè)計技術(shù)的不斷提高,單片系統(tǒng)成為IC設(shè)計的發(fā)展方向。這一發(fā)展趨勢具體表現(xiàn)在如下幾個方面:

(1)超大規(guī)模集成電路的集成度和工藝水平不斷提高,深亞微米(Deep-Submicron)工藝(如65nm、45nm、28nm)已經(jīng)走向成熟,在一個芯片上完成系統(tǒng)級的集成已成為可能。

(2)由于工藝線寬的不斷減小,在半導(dǎo)體材料上的許多寄生效應(yīng)已經(jīng)不能簡單地被忽略,這就對EDA工具提出了更高的要求,同時也使得IC生產(chǎn)線的投資更為巨大,這一變化使得可編程邏輯器件開始進(jìn)入傳統(tǒng)的ASIC市場。

(3)市場對電子產(chǎn)品提出了更高的要求,如進(jìn)一步降低成本、減小系統(tǒng)的體積等,從而對系統(tǒng)的集成度不斷提出更高的要求;同時,設(shè)計的速度也成為一個產(chǎn)品能否成功的關(guān)鍵因素,從而促使EDA工具應(yīng)用更為廣泛。

(4)高性能的EDA工具得到長足的發(fā)展,其自動化和智能化程度不斷提高,為嵌入式系統(tǒng)設(shè)計提供了功能強(qiáng)大的開發(fā)環(huán)境。

(5)計算機(jī)硬件平臺性能大幅度提高,為復(fù)雜的SoC設(shè)計提供了物理基礎(chǔ)。

此外,隨著系統(tǒng)開發(fā)對EDA技術(shù)的目標(biāo)器件各種性能要求的提高,ASIC和FPGA將更大程度地相互融合,在新一代的ASIC器件中留有FPGA的空間。如果希望改變設(shè)計,或者由于開始工作時沒有條件完成足夠的驗證測試,以后也可以根據(jù)要求對其進(jìn)行編程,這就使得ASIC設(shè)計人員有了一定的再修改自由度。可重構(gòu)計算的概念已逐漸明晰,它試圖在通用的計算機(jī)體系架構(gòu)中引入新的計算模式,通過CPU加入可以動態(tài)重構(gòu)的可編程邏輯,為每一個不同應(yīng)用加載不同的可編程邏輯配置,以優(yōu)化計算速度,這種模糊軟硬件界限的技術(shù)或?qū)@得長足的發(fā)展。

現(xiàn)在,傳統(tǒng)ASIC與FPGA之間的界限正變得日益模糊,系統(tǒng)級芯片不僅集成了RAM和微處理器,也集成了FPGA。整個EDA和IC設(shè)計工業(yè)都在朝這個方向發(fā)展。

5.2EDA設(shè)計流程及工具

5.2.1數(shù)字系統(tǒng)設(shè)計的一般步驟

數(shù)字系統(tǒng)的設(shè)計分為多個步驟,一般包括如圖5-2所示的過程。

EDA工具的設(shè)計就是按照數(shù)字邏輯的設(shè)計流程進(jìn)行的。由于數(shù)字系統(tǒng)設(shè)計的過程有多個步驟,因此需要用到多個EDA工具。圖5-2數(shù)字系統(tǒng)一般設(shè)計流程5.2.2EDA工具及其作用

EDA工具在EDA技術(shù)應(yīng)用中占據(jù)著極其重要的位置。EDA的核心是利用計算機(jī)完成電子設(shè)計全程自動化,因此基于計算機(jī)環(huán)境的EDA軟件的支持是必不可少的。

在數(shù)字系統(tǒng)設(shè)計的不同階段和層次,需要使用不同的EDA軟件工具。在這里,結(jié)合本書配套的實驗設(shè)備對相應(yīng)的EDA工具進(jìn)行介紹。

1.設(shè)計輸入

設(shè)計輸入編輯器在多樣性、易用性和通用性方面的功能不斷增強(qiáng),標(biāo)志著EDA技術(shù)中自動化設(shè)計程度的不斷提高。在EDA軟件平臺上開發(fā)時,首先要將數(shù)字系統(tǒng)以一定的表達(dá)方式輸入計算機(jī)。通常,EDA工具的設(shè)計輸入可分為以下類型:

(1)圖形輸入。圖形輸入通常包括原理圖輸入、狀態(tài)圖輸入和波形圖輸入等方法。

狀態(tài)圖輸入方法就是根據(jù)電路的控制條件和不同的轉(zhuǎn)換方式,用繪圖的方法在EDA工具的狀態(tài)圖編輯器上繪出狀態(tài)圖,然后由EDA編譯器和綜合器將此狀態(tài)圖編譯、綜合成電路網(wǎng)表。波形圖輸入方法則是將待設(shè)計的電路看成是一個黑盒子,只需告訴EDA工具該黑盒子電路的輸入和輸出時序波形圖,EDA工具就可以完成黑盒子電路的設(shè)計。

原理圖輸入方法是一種類似于傳統(tǒng)電子設(shè)計方法的原理圖編輯輸入方式,即在EDA軟件的圖形編輯界面上繪制能完成特定功能的電路原理圖。原理圖由邏輯器件(符號)和連接線構(gòu)成,圖中的邏輯器件可以是EDA軟件庫中預(yù)制的功能模塊,如與門、非門、或門、觸發(fā)器、各種宏功能模塊。

(2)?HDL文本輸入。這種方式與傳統(tǒng)的計算機(jī)軟件語言編輯輸入基本一致,就是將使用了某種HDL的電路設(shè)計文本,如VHDL或VerilogHDL的源程序進(jìn)行輸入編輯。

2.綜合

綜合(Synthesis)就是把設(shè)計抽象層次中的一種表述轉(zhuǎn)化成另一種表述的過程。進(jìn)一步講,綜合就是將用行為和功能層次表達(dá)的數(shù)字邏輯電路轉(zhuǎn)換為由低層次的便于具體實現(xiàn)的模塊組合而成的系統(tǒng)的過程。

設(shè)計過程通常從高層次的行為描述開始,以最底層的結(jié)構(gòu)描述結(jié)束,每個步驟都是一個綜合過程。這些步驟包括:

(1)從自然語言表述轉(zhuǎn)換到HDL算法表述,是自然語言綜合。

(2)從算法表述轉(zhuǎn)換到RTL表述,即從行為域到結(jié)構(gòu)域的綜合,是行為綜合。

(4)從邏輯門表述轉(zhuǎn)換到版圖表述(ASIC設(shè)計),或轉(zhuǎn)換到FPGA的配置網(wǎng)表文件,可稱為版圖綜合或結(jié)構(gòu)綜合。

一般地,綜合是僅對應(yīng)于HDL而言的。利用HDL綜合器對設(shè)計進(jìn)行綜合是十分重要的一步,因為這一綜合過程將把軟件設(shè)計的HDL描述與硬件結(jié)構(gòu)聯(lián)系起來,是將軟件轉(zhuǎn)化為硬件電路的關(guān)鍵步驟,是文字描述與硬件實現(xiàn)的一座橋梁。因此,綜合就是將電路的高級語言(如行為描述)轉(zhuǎn)換成低級的、可與FPGA/CPLD的基本結(jié)構(gòu)相映射的網(wǎng)表文件或程序的過程。當(dāng)輸入的HDL文件在EDA工具中檢測無誤后,首先面臨的是邏輯綜合,因此要求HDL源文件中的語句都是可綜合的。

在綜合之后,HDL綜合器一般都可以生成一種或多種文件格式的網(wǎng)表文件,如EDIF、VHDL、VerilogHDL等標(biāo)準(zhǔn)格式,在網(wǎng)表文件中用各自的格式描述電路的結(jié)構(gòu),如在HDL網(wǎng)表文件中采用HDL的語法,用結(jié)構(gòu)描述的風(fēng)格重新詮釋綜合后的電路結(jié)構(gòu)。整個綜合過程就是將設(shè)計者在EDA平臺上編輯輸入的HDL文本、原理圖或狀態(tài)圖描述,依據(jù)給定的硬件結(jié)構(gòu)組件和約束控制條件進(jìn)行編譯、優(yōu)化、轉(zhuǎn)換和綜合,最終獲得門級電路甚至更底層的電路描述網(wǎng)表文件。由此可見,綜合器工作前,必須給定最后實現(xiàn)的硬件結(jié)構(gòu)參數(shù),它的功能就是將軟件描述與給定的硬件結(jié)構(gòu)用某種網(wǎng)表文件的方式對應(yīng)起來,形成相應(yīng)的映射關(guān)系。如果把綜合理解為映射過程,那么顯然這種映射不是唯一的,并且綜合的優(yōu)化也不是單純的或一個方向的。為達(dá)到速度、面積、性能的要求,往往需要對綜合加以約束,稱為綜合約束。

3.布局布線(適配)

適配器也稱為結(jié)構(gòu)綜合器,它的功能是將由綜合器產(chǎn)生的網(wǎng)表文件配置于指定的目標(biāo)器件中,使之產(chǎn)生最終的下載文件,如sof、pof格式的文件。適配所選定的目標(biāo)器件必須屬于原綜合器指定的目標(biāo)器件系列。通常,EDA軟件中的綜合器可由專業(yè)的第三方EDA公司提供,而適配器則須由FPGA/CPLD供應(yīng)商提供,因為適配器的適配對象直接與器件的結(jié)構(gòu)細(xì)節(jié)相對應(yīng)。

適配器的功能就是將綜合后的網(wǎng)表文件針對某一具體的目標(biāo)器件進(jìn)行邏輯映射操作,其中包括底層器件配置、邏輯分割、優(yōu)化、布局布線操作。適配完成后可以利用適配所產(chǎn)生的仿真文件作精確的時序仿真,同時產(chǎn)生可用于編程的文件。

4.仿真

仿真就是讓計算機(jī)根據(jù)一定的算法和一定的仿真庫對EDA設(shè)計進(jìn)行模擬,以驗證設(shè)計,排除錯誤。仿真是EDA設(shè)計過程中的重要步驟,它包括兩種不同級別的仿真測試。

(1)功能仿真:就是直接對HDL、原理圖描述或其他描述形式的邏輯功能進(jìn)行測試模擬,以了解其實現(xiàn)的功能是否滿足原設(shè)計要求的過程。功能仿真過程不涉及任何具體器件的硬件特性,不經(jīng)歷適配階段,在設(shè)計項目編輯、編譯(或綜合)后即可進(jìn)入門級仿真器進(jìn)行模擬測試。直接進(jìn)行功能仿真的好處是設(shè)計耗時短,對硬件庫、綜合器等沒有任何要求。

(2)時序仿真,就是接近真實器件運(yùn)行特性的仿真,仿真文件中已包含了器件的硬件特性參數(shù),因而仿真精度高。但時序仿真的仿真文件必須來自針對具體器件的適配器。綜合后所得到的EDIF等網(wǎng)表文件通常作為FPGA適配器的輸入文件,F(xiàn)PGA適配器輸出的仿真網(wǎng)表文件中包含了精確的硬件延時信息。

5.下載和硬件測試

把適配后生成的下載或配置文件,通過編程器或編程電纜向FPGA或CPLD進(jìn)行下載,以便最終驗證設(shè)計項目在目標(biāo)系統(tǒng)上的實際工作情況,以排除錯誤,改進(jìn)設(shè)計。

5.3FPGA簡介

1984年,Xilinx公司發(fā)布了第一個FPGA,當(dāng)時的應(yīng)用只是用這些器件去實現(xiàn)粘合邏輯(glue-logic)、非常簡單的狀態(tài)機(jī)和相當(dāng)有限的數(shù)據(jù)處理等。而今天,F(xiàn)PGA已經(jīng)是最令人激動的器件類型之一。除了具有可編程的體系結(jié)構(gòu)外,它們還包含大量的存儲單元和成百上千的硬宏(hard-macro),例如乘法器、加法器和數(shù)字信號處理(DSP)模塊等。各種類型的FPGA器件的應(yīng)用范圍之廣讓人難以置信,從電池供電的便攜式手持設(shè)備,到自動控制和娛樂系統(tǒng),再到SETI(搜索地外文明)計劃中用于搜尋外太空生命的每秒萬億次的計算引擎等。采用FPGA(而不是ASIC或者ASSP)進(jìn)行設(shè)計的優(yōu)勢包括:

迅速進(jìn)行原型開發(fā);

縮短產(chǎn)品面市時間;

能夠在現(xiàn)場重新編程,進(jìn)行調(diào)試;

較低的一次性工程費(fèi)用(Non-RecurringEngineering,NRE)成本;

較長的產(chǎn)品生命周期,降低了產(chǎn)品過時的風(fēng)險。

目前以HDL所完成的電路設(shè)計,可以經(jīng)過簡單的綜合與布局,快速地?zé)浿罠PGA上進(jìn)行測試,是現(xiàn)代IC設(shè)計驗證的技術(shù)主流。

FPGA含有名為邏輯單元(LogicElement,LE)的可編程邏輯,以及分層的可配置互聯(lián),支持LE的物理連接。這些可編輯元件可以被用來實現(xiàn)一些基本的邏輯門電路(比如AND、OR等)或者更復(fù)雜一些的組合功能(如解碼器、數(shù)學(xué)方程式)。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件如觸發(fā)器(Flip-flop)或者其他更加完整的記憶塊。

系統(tǒng)設(shè)計師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊連接可以按照設(shè)計者的想法而改變,完成所需要的邏輯功能。5.3.1關(guān)于FPGA

在此引用兩個來自互聯(lián)網(wǎng)的對FPGA的定義。

維基百科的定義:現(xiàn)場可編程邏輯門陣列(FPGA),是一個含有可編輯元件的半導(dǎo)體設(shè)備,是可供使用者現(xiàn)場程式化的邏輯門陣列元件。

百度百科的定義:FPGA即現(xiàn)場可編程門陣列,它是在可編程邏輯陣列(ProgrammableArrayLogic,PAL)、通用陣列邏輯(GenericArrayLogic,GAL)、復(fù)雜可編程邏輯設(shè)備(ComplexProgrammableLogicDevice,CPLD)等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。在介紹FPGA的教科書及參考文獻(xiàn)中,經(jīng)常會出現(xiàn)的一些詞匯:

(1)結(jié)構(gòu)(Fabric):針對硅半導(dǎo)體芯片來說,它是指器件的基礎(chǔ)結(jié)構(gòu)。

(2)幾何結(jié)構(gòu):指的是建造在芯片上的獨(dú)立結(jié)構(gòu)的尺寸,比如場效應(yīng)管(FET)的溝道。這些結(jié)構(gòu)小到令人難以置信。在20世紀(jì)80年代的早中期,器件是基于3μm的幾何結(jié)構(gòu),這意味著它們的最小結(jié)構(gòu)在尺寸上只有1m的百萬分之三(簡稱“基于3μm技術(shù)”的IC)。

(3)工藝節(jié)點(diǎn):指新的幾何結(jié)構(gòu)。在20世紀(jì)90年代,基于1μm幾何結(jié)構(gòu)的器件開始出現(xiàn),而且特征尺寸在這十年中持續(xù)快速減小。21世紀(jì),高性能IC已經(jīng)具有0.18μm的幾何結(jié)構(gòu)了。2002年,發(fā)展到了0.13μm;2003年,基于0.09μm的器件開始出現(xiàn)。目前,28nm的器件也已應(yīng)用到實際的產(chǎn)品中了。

所有小于0.5μm的幾何結(jié)構(gòu)被劃分為深亞微米(Deepsub-micron,DSM),按照流行的說法,我們正在向超深亞微米(UltraDeepsub-micron,UDSM)領(lǐng)域邁進(jìn)。5.3.2FPGA的基本分類

按照原理和技術(shù),F(xiàn)PGA可分為以下三類:

(1)基于靜態(tài)內(nèi)存(StaticAccessMemory,SRAM)技術(shù)的FPGA:系統(tǒng)內(nèi)可編程和再程式化(re-programmable),需要外部啟動元件(externalbootdevices),屬于CMOS器件。

(2)基于反熔絲(Antifuse)技術(shù)的FPGA:可燒錄一次,通常為CMOS器件。其最大的優(yōu)點(diǎn)是:它的內(nèi)部互聯(lián)結(jié)構(gòu)是“防輻射的”,也就是說,它相對不受電磁輻射的影響。這對軍事和宇航應(yīng)用具有特別的吸引力。

(3)基于EEPROM(ElectricallyErasablePROM)/FLASH技術(shù)的FPGA:編程之后,它們的內(nèi)部數(shù)據(jù)就不會丟失,所以系統(tǒng)第一次上電時,這些器件將會“立即”運(yùn)行。5.3.3FPGA的體系結(jié)構(gòu)

FPGA主要由大量相對較小的可編程邏輯塊“島”嵌入在可編程互聯(lián)“?!崩飿?gòu)成,如圖5-3所示。

可編程邏輯塊按照粒度分為細(xì)粒度、中等粒度和粗粒度三種。細(xì)粒度邏輯塊實現(xiàn)非常簡單的邏輯,如3輸入函數(shù)、基本門電路或存儲元件(觸發(fā)器等);粗粒度邏輯塊包含的邏輯數(shù)量比細(xì)粒度要多很多,如可能包含4個多路復(fù)用器、4個D觸發(fā)器等;而中等粒度的邏輯塊則處于兩者之間。圖5-3FPGA結(jié)構(gòu)

1.基于多路復(fù)用器(MUX)的體系結(jié)構(gòu)

例如一個3輸入函數(shù)y=(a&b)|c,可利用包含多路復(fù)用器的邏輯塊實現(xiàn),如圖5-4所示。

邏輯塊的每個輸入都有一個邏輯0,一個邏輯1,或者一個來自其他邏輯塊或器件基本輸入信號(a、b或c)的真值或反值,這就允許每個邏輯塊可以用多種方式來配置,以實現(xiàn)多種可能的功能(圖中的x表示這個輸入不管與0連接還是與1連接都無所謂)。

2.基于查找表(LUT)的體系結(jié)構(gòu)

LUT的輸入信號作為其索引(指針),然后從查找表得到相應(yīng)的輸出。查找表的內(nèi)容是按照每種輸入組合對應(yīng)的期望輸出編排的。如針對y=(a&b)|c的實現(xiàn),其查找表數(shù)據(jù)如圖5-5所示。圖5-4多路復(fù)用器圖5-5查找表5.3.4FPGA主流廠商簡介

FPGA的主流廠商包括:

(1)?Xilinx和Altera:是目前FPGA的領(lǐng)導(dǎo)廠商。

(2)?Actel:生產(chǎn)基于Flash架構(gòu)的FPGA,具有單芯片、低成本、高可靠性、高安全性、低功耗等特征。

(3)?LatticeSemiconductor:包括SRAM以及non-volatile、flash-basedFPGAs。本書所有例子均是基于ActelFPGA及相應(yīng)軟件環(huán)境進(jìn)行設(shè)計及驗證的,愛特公司(ActelCorporation,現(xiàn)被Microsemi收購)是非易失性、低功耗及混合信號FPGA,以及可編程邏輯解決方案的全球領(lǐng)導(dǎo)廠商。愛特公司致力通過運(yùn)用業(yè)界最低功耗的FPGA系列,以及獨(dú)有的混合信號FPGA,在芯片及系統(tǒng)級上進(jìn)行功耗管理,為系統(tǒng)設(shè)計人員提高競爭優(yōu)勢。ActelFPGA的主要產(chǎn)品包括FlashFPGA產(chǎn)品、反熔絲FPGA產(chǎn)品、大規(guī)模系統(tǒng)級FPGA和為之服務(wù)的相關(guān)產(chǎn)品。讀者可以訪問愛特公司的網(wǎng)站()以獲得更為全面的技術(shù)支持。5.3.5集成開發(fā)環(huán)境LiberoIDE

LiberoIDE是Actel公司的FPGA集成開發(fā)環(huán)境,提供了完整的FPGA設(shè)計工具,支持原理圖、HDL輸入,并以GUI方式顯示FPGA的設(shè)計過程。LiberoIDE不僅帶有Actel自身高性能的布局布線工具(Designer),還集合了業(yè)界極具影響力的仿真(Modelsim)、綜合(Synplify)等工具。

LiberoIDE的優(yōu)勢是能簡化設(shè)計過程,方便用戶使用,使設(shè)計得到最佳優(yōu)化,提高系統(tǒng)性能。如圖5-6所示,LiberoIDE提供了清晰明了的開發(fā)流程,并提供了一些Actel特有的資源。圖5-6LiberoIDE運(yùn)行界面在根據(jù)開發(fā)流程進(jìn)行開發(fā)時,LiberoIDE會根據(jù)需要調(diào)用不同的工具。除了集成了Modelsim和Synplify外,LiberoIDE還集成了以下的軟件:

(1)?HDLEditer:可通過HDLEditer輸入HDL語言代碼,支持VerilogHDL和VHDL兩種語言的輸入。HDL語言輸入最常用,移植性也最好。

(2)?SmartDesign:可基于原理圖和模塊輸入設(shè)計,采用圖形化的輸入方式,方便連接和直觀地校驗設(shè)計的正確性。

(3)?Designer:Actel公司自身提供的針對FPGA的高效布局布線工具,可實現(xiàn)網(wǎng)表到實際目標(biāo)器件(FPGA)的變換,將電路方案中的邏輯元件分解布局,確定如何布線,如何連接邏輯元件等設(shè)計。還可通過Designer生成反標(biāo)注文件和最終的編程下載文件,可用圖形化方式管理約束管腳、提供時序約束和功耗分析功能。

(4)?FlashPro:Actel公司提供的編程下載軟件,支持所有的ActelFPGA器件,可執(zhí)行下載文件、設(shè)置/擦除密碼、校驗、讀取配置信息等任務(wù)。

5.4IP核基礎(chǔ)

IP(IntellectualProperty)就是常說的知識產(chǎn)權(quán),是指完成某種功能的虛擬電路模塊,也稱之為虛擬部件。它是指利用硬件描述語言(如VerilogHDL等)描述的,經(jīng)過嚴(yán)格驗證的具有一定功能的電路模塊。

美國著名的Dataquest咨詢公司將半導(dǎo)體產(chǎn)業(yè)的IP定義為“用于ASIC或FPGA中的預(yù)先設(shè)計好的電路功能模塊”。百度百科的定義是:IP核(IntellectualPropertycore)是一段具有特定電路功能的硬件描述語言程序,該程序與集成電路工藝無關(guān),可以移植到不同的半導(dǎo)體工藝中去生產(chǎn)集成電路芯片。

IP的內(nèi)涵有如下明確的界定:

(1)基于易于重用而專門設(shè)計。

(2)基于最優(yōu)化指標(biāo)而設(shè)計。優(yōu)化的目標(biāo)包括芯片的面積最小、運(yùn)算速度最快、功耗最低、工藝容差最大。

(3)基于標(biāo)準(zhǔn)而設(shè)計。包括IP重用所需的參數(shù)、文檔、檢驗方式、接口、片內(nèi)總線協(xié)議等。5.4.1IP技術(shù)概述

1.IP技術(shù)

IP的概念早已在數(shù)字系統(tǒng)設(shè)計中得以使用,標(biāo)準(zhǔn)單元庫(StandardCellLibrary)中的功能單元就是IP的一種形式。IC生產(chǎn)廠商(Foundry)為了擴(kuò)大業(yè)務(wù),通常會提供精心設(shè)計并經(jīng)過工業(yè)驗證的標(biāo)準(zhǔn)單元,以吸引IC設(shè)計公司(Fabless)成為其客戶。

IP核的優(yōu)化設(shè)計和重用就是IP技術(shù),還包括設(shè)計思想、設(shè)計方法、設(shè)計工具、工藝與布局布線等的設(shè)計重用(DesignbyReuse)以及可重用性設(shè)計(DesignforReuse),即所有的包含了智力因素的設(shè)計結(jié)果都在重用之列。

IP技術(shù)包括IP開發(fā)及IP復(fù)用兩個方面:

(1)?IP開發(fā):首先要求整個設(shè)計流程一致性要好,從規(guī)格定義到產(chǎn)品化每一個設(shè)計階段、每一個步驟都必須嚴(yán)格遵循已經(jīng)定義的設(shè)計規(guī)則和操作規(guī)范,同時要求每一個項目的開發(fā)環(huán)境,包括設(shè)計策略、流程和EDA開發(fā)工具都要保持高度的一致性以便于交流和復(fù)用。其次,IP開發(fā)強(qiáng)調(diào)沒有文檔的工作是無效的工作。

(2)?IP復(fù)用:指利用預(yù)先設(shè)計好和預(yù)先充分驗證的IP模塊進(jìn)行功能組裝來設(shè)計IC的方法。

IP技術(shù)的本質(zhì)特征是功能模塊的可復(fù)用性,其基本要求是可移植性好,而設(shè)計文檔的質(zhì)量(IP核的應(yīng)用特點(diǎn)和限制條件需在設(shè)計文檔中詳細(xì)說明)是可移植性好壞的重要體現(xiàn)。設(shè)計復(fù)用的最終目標(biāo)是建立一個包含軟硬件模塊的資源庫。該庫的模塊包含各個層次(從物理層到系統(tǒng)層)的描述。

2.IP核的分類

(1)硬IP模塊(HardCore)。IP硬核是基于半導(dǎo)體工藝的物理設(shè)計,已有固定的拓?fù)洳季趾途唧w工藝,并已經(jīng)過工藝驗證,具有可保證的性能。其提供給用戶的形式是電路物理結(jié)構(gòu)掩膜版圖和全套工藝文件,是可以拿來就用的全套技術(shù)。硬IP是IP模塊的最深層次,涉及內(nèi)容廣泛,它也是最主要的形式。

硬核提供設(shè)計的最終產(chǎn)品:掩膜,以經(jīng)過完全的布局布線的網(wǎng)表形式提供。這種硬核既具有可預(yù)見性,同時還可以針對特定工藝或購買商進(jìn)行功耗和尺寸上的優(yōu)化。盡管硬核由于缺乏靈活性而可移植性差,但由于無須提供寄存器傳輸級(RTL)文件,因而更易于實現(xiàn)IP保護(hù)。其電路布局和工藝是固定的,有全物理的晶體管和互連掩膜信息,完成了全部的前端和后端設(shè)計,制造也已固定。硬IP模塊可提供可預(yù)測的性能和快速的設(shè)計。

(2)軟IP模塊(SoftCore)。軟核是用Verilog或VHDL等硬件描述語言描述的功能塊,在抽象的較高層次上對電路用硬件描述語言進(jìn)行描述,包括邏輯描述、網(wǎng)表和用于測試的文檔。軟IP模塊需要綜合和布局布線才能完成核的設(shè)計,但是并不涉及用什么具體電路元件實現(xiàn)這些功能。軟IP通常是以HDL源文件的形式出現(xiàn)的,應(yīng)用開發(fā)過程與普通的HDL設(shè)計也十分相似,只是所需的開發(fā)硬軟件環(huán)境比較昂貴。軟IP的設(shè)計周期短,設(shè)計投入少;由于不涉及物理實現(xiàn),為后續(xù)設(shè)計留有很大的發(fā)揮空間,增大了IP的靈活性和適應(yīng)性。其主要缺點(diǎn)是在一定程度上使后續(xù)工序無法適應(yīng)整體設(shè)計,從而需要一定程度的軟IP修正,在性能上也不可能獲得全面的優(yōu)化。由于軟核是以源代碼的形式提供,盡管源代碼可以采用加密方法,但其知識產(chǎn)權(quán)保護(hù)問題不容忽視。

軟IP是設(shè)計投入最少,只完成RTL級的行為設(shè)計,以HDL描述文本的形式提交使用。在使用前,這個HDL描述一定經(jīng)過仿真驗證,使用者可以用它綜合出正確的門級網(wǎng)表。軟IP一定是優(yōu)化的行為級設(shè)計,與其它設(shè)計相比,它所需的硬件數(shù)量最小。

(3)固IP模塊(FirmCore)。固核則是軟核和硬核的折衷,除了完成軟核所有的設(shè)計外,還完成了門級電路綜合和時序仿真等設(shè)計環(huán)節(jié),一般以門級電路網(wǎng)表的形式提供給用戶。

大多數(shù)應(yīng)用于FPGA的IP內(nèi)核均為軟核,軟核有助于用戶調(diào)節(jié)參數(shù)并增強(qiáng)可復(fù)用性。軟核通常以加密形式提供,這樣實際的RTL對用戶是不可見的,但布局和布線靈活。在這些加密的軟核中,如果對內(nèi)核進(jìn)行了參數(shù)化,那么用戶就可通過頭文件或圖形用戶接口(GUI)方便地對參數(shù)進(jìn)行操作。對于那些對時序要求嚴(yán)格的內(nèi)核(如PCI接口內(nèi)核),可預(yù)布線特定信號或分配特定的布線資源,以滿足時序要求。這些內(nèi)核可歸類為固核,由于內(nèi)核是預(yù)先設(shè)計的代碼模塊,因此這有可能影響包含該內(nèi)核的整體設(shè)計。由于內(nèi)核的建立、保持時間和握手信號都可能是固定的,因此其它電路的設(shè)計都必須考慮與該內(nèi)核進(jìn)行正確的接口。如果內(nèi)核具有固定布局或部分固定的布局,那么還將影響其它電路的布局。

固核是以RTL代碼和對應(yīng)具體工藝網(wǎng)表的混合形式提供的,是一種可綜合的并帶有布局規(guī)劃的軟核。目前的設(shè)計復(fù)用方法在很大程度上要依靠固核,將RTL描述結(jié)合具體標(biāo)準(zhǔn)單元庫進(jìn)行邏輯綜合優(yōu)化,形成門級網(wǎng)表,再通過布局布線工具最終形成設(shè)計所需的硬核。

3.IP核的特征

(1)可讀性:只有詳細(xì)了解固核軟核的功能和算法,才能正確使用和充分發(fā)揮IP核的優(yōu)點(diǎn)。

(2)設(shè)計的延展性和工藝適應(yīng)性:當(dāng)IP核被用到不同的領(lǐng)域時,不需要做重大的修改,就能方便地使用。同時,當(dāng)采用新工藝和工藝改進(jìn)時,IP核能較容易地進(jìn)行設(shè)計改進(jìn)或不需做修改。

(3)可測性:除了對IP核進(jìn)行單獨(dú)的測試外,還要能夠在IP核應(yīng)用到的系統(tǒng)環(huán)境中進(jìn)行測試。

(4)端口定義標(biāo)準(zhǔn)化:IP核的端口需進(jìn)行嚴(yán)格的定義,主要包括端口信號的邏輯值、物理值、信號傳輸頻率、傳輸機(jī)制等。

(5)版權(quán)保護(hù):采用加密技術(shù)或在工藝實現(xiàn)時添加保密技術(shù)。5.4.2ActelIP核簡介

在Actel免費(fèi)的開發(fā)工具LiberoIDE中提供了常用的IP核,包括:

ActelMacros:包括針對ActelFPGA的基本單元電路模塊;

BasicBlocks:包括幾乎所有的常用中規(guī)模數(shù)字邏輯器件;

BusInterfaces:包括ARM總線及PCI總線標(biāo)準(zhǔn)單元;

Clock&Management:包括CCC及PLL單元電路;

DSP:包含經(jīng)過驗證的常用DSP單元;

Memory&Controllers:包括各種存儲器的布署及控制器;

Peripherals:包括幾乎所有常用的IO設(shè)備接口;

Processors:包括針對不同器件適用的CoreABC,Core8051s,CoreMP7,CortexM1,CortexM3。

由于IP核的內(nèi)容非常豐富,其詳細(xì)的介紹請參考ACTEL()的官方網(wǎng)站及LiberoIDE的說明文檔。

5.5EDA開發(fā)綜合實例1:Modelsim的使用

在此討論實現(xiàn)1位全加器的多種方法,并使用Modelsim進(jìn)行功能仿真。本例與4.2節(jié)討論的2選1MUX例子相比,增添了更多內(nèi)容:

設(shè)計難度更大一些,更具代表性;

列舉了多種實現(xiàn)方法,增加了混合編程風(fēng)格的內(nèi)容;

Modelsim的使用和操作方式與4.2.5節(jié)中的不同,雖然都可以達(dá)到仿真的目的,但此例的操作更詳細(xì)和規(guī)范。5.5.1門級(結(jié)構(gòu))風(fēng)格的描述

在此使用門級風(fēng)格描述一個全加器電路,該實例基于圖5-7所示的結(jié)構(gòu)圖。

以下使用內(nèi)置門原語對一位全加器的結(jié)構(gòu)進(jìn)行門級風(fēng)格描述:

moduleFA_struct(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

wireS1,T1,T2,T3;

圖5-7一位全加器的結(jié)構(gòu)圖

xorX1(S1,A,B);

//調(diào)用一個內(nèi)置的異或門,器件名為xor,代碼實例化名為X1;

//S1,A,B表明該器件管腳的實際連接線的名稱,A、B是輸入,S1是輸出。

xorX2(Sum,S1,Cin);

andA1(T3,A,B);

andA2(T2,B,Cin);

andA3(T1,A,Cin);

orO1(Cout,T1,T2,T3);

endmodule

該一位全加器由兩個異或門、三個與門、一個或門構(gòu)成。S1、T1、T2、T3則是門與門之間的連線;xor、and、or是VerilogHDL內(nèi)置的門器件。

5.5.2數(shù)據(jù)流風(fēng)格的描述

以下使用數(shù)據(jù)流風(fēng)格描述一位全加器:

moduleFA_flow1(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

wireS1,T1,T2,T3;

assignS1=A^B;

assignSum=S1^Cin;

/*以上2句可合并為1句:

ssignSum=A^B^Cin; */

assignT1=A&Cin;

assignT2=B&Cin;

assignT3=A&B;

assignCout=T1|T2|T3;

/*以上4句可合并為1句:

assignCout=(A&Cin)|(B&Cin)|(A&B);*/

endmodule

各assign語句是并行執(zhí)行的,即各語句的執(zhí)行與語句的編寫順序無關(guān)。如上代碼中,當(dāng)A有變化時,S1、T3、T1將同時變化,S1的變化又會造成Sum的變化。

以上代碼中包含6個assign連續(xù)賦值,是為了更直觀地描述其電路結(jié)構(gòu),但對于抽象層次更高的數(shù)據(jù)流風(fēng)格,可以不按結(jié)構(gòu)的方式進(jìn)行描述。

以下為第2種描述方法,采用更加高級(更趨于行為邏輯)的描述方式:

moduleFA_flow2(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

wireSum,Cout;

assign{Cout,Sum}=A+B+Cin;

endmodule5.5.3行為風(fēng)格的描述

以下使用行為風(fēng)格描述方式給一位全加器建模:

moduleFA_behav1(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

regSum,Cout;

always@(AorBorCin) //敏感表,A、B、Cin發(fā)生變化時觸發(fā)運(yùn)行

begin//begin和end之間的語句順序執(zhí)行,屬于串行語句

Sum=(A^B)^Cin;

Cout=(A&Cin)|(B&Cin)|(A&B);

end

endmodule相對于數(shù)據(jù)流風(fēng)格的第2種方法,行為風(fēng)格的程序如下:

moduleFA_behav2(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

regSum,Cout;

always

@(AorBorCin)begin

{Cout,Sum}=A+B+Cin;//使用拼接運(yùn)算符

end

endmodule

{Cout,Sum}表示對位數(shù)的擴(kuò)展,兩個1bit相加,和有兩位,低位放在Sum變量中,進(jìn)位放在Cout中。此段代碼更接近我們的語言風(fēng)格,更容易理解,并不需要畫出結(jié)構(gòu)圖就可以寫出實現(xiàn)的代碼。

5.5.4混合風(fēng)格的描述

在模塊中,結(jié)構(gòu)的和行為的編程風(fēng)格可以自由混合,模塊描述中可以包含門的實例引用、模塊實例化語句、連續(xù)賦值語句、always語句和initial語句的混合。來自門或連續(xù)賦值語句的值能夠用于觸發(fā)always語句和initial語句;來自always語句和initial語句的值能夠驅(qū)動門或開關(guān)。以下為混合設(shè)計方式的一位全加器的描述。

moduleFA_Mix(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

regCout;

regT1,T2,T3; //在always塊中被賦值的變量應(yīng)定義為reg型

wireS1;

xorX1(S1,A,B); //門實例語句

@(AorBorCin)

begin

T1=A&Cin;

T2=B&Cin;

T3=A&B;

Cout=(T1|T2)|T3;

end

assignSum=S1^Cin; //連續(xù)賦值語句

endmodule

只要A或B上有事件發(fā)生,門實例語句即被執(zhí)行。只要A、B或Cin上有事件發(fā)生,就執(zhí)行always語句,并且只要S1或Cin上有事件發(fā)生,就執(zhí)行連續(xù)賦值語句。5.5.5編寫測試平臺

測試平臺程序如下:

moduletestFA;

regpa,pb,pCin;

wireSum,Cout;

FA_behav2fadd(pa,pb,pCin,Sum,Cout);//調(diào)用FA_behav2模塊,按端口順序?qū)?yīng)方式連接initial

begin

pa=0;pb=0;pCin=0;

#5pCin=1;

#5pb=1;

#5pCin=0;

#5pa=1;

#5pCin=1;

#5pb=0;

#5pCin=0;

end

initial

$monitor(“time=%t,a=%b,b=%b,Cin=%b,Sum=%b,

Cout=%b”,$time,pa,pb,pCin,Sum,Cout);

//調(diào)用系統(tǒng)任務(wù)$monitor,當(dāng)pa、pb、pCin、py中任一個發(fā)生變化時就輸出顯示

endmodule

代碼中所調(diào)用模塊為“FA_behav2”,是根據(jù)實際代碼中所定義的全加器模塊名稱進(jìn)行調(diào)用的;中間從“begin”到“end”部分的代碼,實現(xiàn)每過5個單位時間改變一下輸入,實現(xiàn)“pa”、“pb”、“pCin”的值按照“000-001-011-010-110-111-101-100”的順序發(fā)生變化。5.5.6在Modelsim中進(jìn)行仿真

在此使用前述的代碼(1位全加器及測試平臺),在Modelsim中進(jìn)行仿真,驗證是否能得到正確的運(yùn)行結(jié)果。

1.新建工程

運(yùn)行Modelsim軟件,選擇“File”→“New”菜單中的“Project”,在彈出的對話框中輸入項目名稱和項目保存路徑,如圖5-8所示。

2.創(chuàng)建程序文件(1位全加器)

在接下來彈出的“AdditemstotheProject”對話框中選擇“CreateNewFile”,輸入文件名,語言類型選擇“Verilog”,如圖5-9所示。圖5-8建立新工程圖5-9創(chuàng)建文件在此可繼續(xù)選擇添加其它文件,在本例中選擇關(guān)閉“AdditemstotheProject”對話框。可在“Project”窗口看到剛創(chuàng)建的“Fadd1.v”文件,如圖5-10所示。

雙擊打開“FAdd1.v”文件,輸入以下代碼并保存。以下代碼與前述行為風(fēng)格描述代碼一致,也可使用其它模塊,如“FA_behav1”等。

moduleFA_behav2(A,B,Cin,Sum,Cout);

inputA,B,Cin;

outputSum,Cout;

regSum,Cout;

always@(AorBorCin)

begin

{Cout,Sum}=A+B+Cin;

end

endmodule

界面效果如圖5-10所示。圖5-10ModelSim界面

3.創(chuàng)建測試平臺文件

在4.2.5節(jié)的例子中,把功能實現(xiàn)的模塊和測試用的模塊放在同一個文件中,在實際開發(fā)中應(yīng)分為兩個不同的文件。功能實現(xiàn)模塊是真正要設(shè)計實現(xiàn)的內(nèi)容,而測試平臺只是用于檢驗設(shè)計正確與否的仿真程序。

點(diǎn)擊“Project”窗口,此時菜單中會出現(xiàn)“Project”菜單,選擇“Project”→“AddtoProject”菜單中的“NewFile”,在彈出的對話框中輸入文件名“testFA.v”,語言類型選擇“Verilog”。

雙擊打開“testFA.v”文件,輸入5.5.5節(jié)中的測試平臺代碼,該段代碼調(diào)用“FA_behav2”模塊,如果使用了其它模塊(如數(shù)據(jù)流風(fēng)格),則做相應(yīng)的修改即可。

4.編譯

選擇“Compile”菜單的“CompileAll”命令,或工具欄的

圖標(biāo),系統(tǒng)提示編譯結(jié)果,如果正常,則在Transcript窗口中出現(xiàn)如圖5-11所示的結(jié)果。

如果只需對部分文件進(jìn)行編譯(如“FAdd1.v”文件被修改過,而其它文件無變化),則可選擇需要編譯的文件,選擇“Compile”菜單的“CompileSelected”命令。圖5-11編譯結(jié)果

5.創(chuàng)建仿真配置(非必須進(jìn)行步驟)

一個設(shè)計可能包含多個測試平臺和仿真過程,可以每次仿真時選擇仿真對象,也可以事先把仿真內(nèi)容配置并保存下來。

選擇“Project”→“AddtoProject”菜單中的“SimulationConfiguration”,彈出如圖5-12所示的對話框,選擇“work”庫下的“testFA”模塊,可以更改仿真配置名稱,在此采用默認(rèn)名稱“Simulation1”。

在“Project”窗口中可看到新建的“Simulation1”,如圖5-13所示?!皌estFA.v”和“FAdd1.v”文件的狀態(tài)顯示綠色的鉤,表示已編譯。圖5-12仿真配置圖5-13編譯成功

6.選擇仿真對象

可以用以下兩種方式選擇仿真對象:

如果在第5步創(chuàng)建了仿真配置,可以直接雙擊“Project”窗口中的仿真配置“Simulation1”,因為該仿真配置已經(jīng)設(shè)置好仿真的啟動文件為“testFA.v”,故Modelsim首先執(zhí)行“testFA.v”模塊中的代碼,再由“testFA.v”調(diào)用“FAdd1.v”文件中的“FA_behav2”模塊。

如果沒有創(chuàng)建仿真配置,可選擇“Simulate”菜單的“StartSimulation”,或工具欄的圖標(biāo),在彈出的對話框中選擇“Work”下面的“testFA”模塊,點(diǎn)擊“OK”,如圖5-14所示。圖5-14選擇仿真對象

Modelsim界面發(fā)生變化,出現(xiàn)“sim”窗口,在“Objects”窗口中也顯示該模塊中的變量,如圖5-15所示。圖5-15Modelsim界面

7.配置波形顯示內(nèi)容圖

點(diǎn)擊“Objects”窗口(只有點(diǎn)擊該窗口后才會出現(xiàn)后面的菜單內(nèi)容),選擇“Add”→“ToWave”菜單中的“SignalsinRegion”命令,可以顯示所有的信號;如果要選擇性地挑選顯示的內(nèi)容,可在選擇“Objects”窗口中一個或多個信號后,選擇“Add”→“ToWave”菜單中的“SelectedSignals”命令(或直接拖拽至“Wave”窗口的“Message”欄)。“Wave”窗口如圖5-16所示。5-16波形窗口

8.運(yùn)行仿真并查看結(jié)果

選擇“Simulate”→“Run”菜單中的“Run-All”命令,或工具欄的圖標(biāo),Transcript窗口將顯示運(yùn)行結(jié)果:

#time=0,a=0,b=0,Cin=0,Sum=0,Cout=0

#time=5,a=0,b=0,Cin=1,Sum=1,Cout=0

#time=10,a=0,b=1,Cin=1,Sum=0,Cout=1

#time=15,a=0,b=1,Cin=0,Sum=1,Cout=0

#time=20,a=1,b=1,Cin=0,Sum=0,Cout=1

#time=25,a=1,b=1,Cin=1,Sum=1,Cout=1

#time=30,a=1,b=0,Cin=1,Sum=0,Cout=1

#time=35,a=1,b=0,Cin=0,Sum=1,Cout=0

Wave窗口將顯示波形圖,點(diǎn)擊Zoom工具欄圖標(biāo)可調(diào)整波形查看效果,如圖5-17所示。圖5-17仿真波形圖說明:

前面給出了多種1位全加器的實現(xiàn)代碼,讀者只需把代碼中的“FA_behav2”模塊替換為其它模塊代碼(如“FA_flow”),并把“testFA”模塊中的文本“FA_behav2”改過來,可得到同樣的運(yùn)行結(jié)果。

如果選擇“FA_behav2”模塊進(jìn)行仿真,會出現(xiàn)什么結(jié)果呢?仿真將提示正常運(yùn)行,但沒有結(jié)果顯示。請讀者進(jìn)行嘗試并思考原因。

5.6EDA開發(fā)綜合實例2:LiberoIDE完整設(shè)計流程

如果需要將設(shè)計燒錄到FPGA中,則需要綜合使用多個不同的EDA工具。本綜合實例以開發(fā)2-4譯碼器為例,使用Libero集成開發(fā)環(huán)境(本書配套實驗環(huán)境為LiberoIDE9.0),讓讀者了解簡單的VerilogHDL編程和FPGA設(shè)計的完整流程。

5.6.1真值表

2-4譯碼器真值表如表5-1所示,應(yīng)注意y作了反相處理。表5-12-4譯碼器真值表

5.6.2邏輯表達(dá)式

根據(jù)真值表可得出以下邏輯表達(dá)式(為避免混淆,表5-1中的en,在邏輯表達(dá)式中記為“en”):5.6.3用Verilog描述2-4譯碼器

以下用三種不同風(fēng)格的Verilog語句來描述2-4譯碼器,在本例中可任選其中一種來實現(xiàn)。

1.行為風(fēng)格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

outputreg[0:3]y;

regaf,bf;always

@(aorboren) //當(dāng)a、b、en發(fā)生變化時執(zhí)行后面的代碼

begin

af=~a; //a取反后賦值給af

bf=~b;

//非阻塞賦值,以下4句同時執(zhí)行

y[0]<=~(af&bf&en); //根據(jù)邏輯表達(dá)式寫出

y[1]<=~(af&b&en);

y[2]<=~(a&bf&en);

y[3]<=~(a&b&en);

end

endmodule

2.?dāng)?shù)據(jù)流風(fēng)格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

output[0:3]y;

wireaf,bf;

//assign連續(xù)賦值,以下各語句并發(fā)執(zhí)行

assignaf=~a;

assignbf=~b;

assigny[0]=~(af&bf&en);

assigny[1]=~(af&b&en);

assigny[2]=~(a&bf&en);

assigny[3]=~(a&b&en);

endmodule

3.門級風(fēng)格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

output[0:3]y;

wireaf,bf;

not

u0not(af,a),

u1not(bf,b);

nand

u0nand(y[0],en,af,bf),

u1nand(y[1],en,af,b),

u2nand(y[2],en,a,bf),

u3nand(y[3],en,a,b);

endmodule

行為風(fēng)格和數(shù)據(jù)流風(fēng)格均可根據(jù)邏輯表達(dá)式寫出,不需自行畫出邏輯結(jié)構(gòu)圖;門級風(fēng)格建模直接描述門結(jié)構(gòu),故應(yīng)先畫出邏輯圖。5.6.4編寫測試平臺

測試平臺編寫如下:

`timescale1ns/1ns//單位時間為1納秒

moduletestdecoder2x4;

regpa,pb,pen;

wire[0:3]py;

decoder2x4u1(pa,pb,pen,py);//調(diào)用decoder2x4模塊,按端口順序?qū)?yīng)方式連接

initial

begin

pa=0;pb=0;pen=0;//賦予初值

#5pen=1; //5個單位時間延遲后進(jìn)行賦值#10pa=1;

#5pb=1;

#5pa=0;

#10pb=0;

end

initial

$monitor("time=%t,a=%b,b=%b,en=%b,y=%b",$time,pa,pb,pen,py);

//調(diào)用系統(tǒng)任務(wù)monitor,使得pa、pb、pen、py當(dāng)中任一個發(fā)生變化時就輸出顯示

endmodule5.6.5FPGA開發(fā)完整流程

1.新建工程

打開LiberoIDE,選擇“Project”菜單的“NewProject”命令,輸入項目名稱,選擇項目存放路徑,選擇語言Verilog(如圖5-18所示)。每一個項目使用一個目錄進(jìn)行存放,項目中各操作的結(jié)果將存放于項目文件夾下不同子目錄下。

選擇實際使用的設(shè)備型號、系列和封裝,點(diǎn)擊“Finish”。本書配套實驗環(huán)境為ProASIC3型號A3P030系列100引腳的FPGA芯片(如圖5-19所示)。如果不需要燒錄到FPGA,選擇隨意一個也沒問題。圖5-18新建工程圖5-19選擇設(shè)備

2.輸入設(shè)計代碼

“ProjectManager”被打開,界面中間顯示了基本項目流程,可以看到綜合及仿真都是不可用狀態(tài),如圖5-20所示。

點(diǎn)擊“HDLEditor”按鈕,在彈出的對話框中選擇“VerilogSourceFile”,輸入源程序文件名(擴(kuò)展名為?.v),如圖5-21所示。

輸入2-4譯碼器的功能描述代碼(在此采用前述的行為風(fēng)格代碼),保存(如圖5-22所示),該文件將保存于項目文件夾的“\hdl”子目錄下。圖5-20ProjectManager窗口圖5-21添加源程序文件

圖5-22輸入程序代碼

3.輸入測試平臺代碼

點(diǎn)擊“ProjectFlow”切換回項目流程,再次點(diǎn)擊“HDLEditor”按鈕,在打開的對話框中選擇“HDLStimulusFile”,輸入激勵程序的文件名(后綴也為?.v),如圖5-23所示。

在打開的編輯器中輸入激勵程序代碼,保存(如圖5-24所示),該文件將保存于項目文件夾的“\stimulus”子目錄下。圖5-23新建激勵程序文件圖5-24輸入激勵程序代碼

4.代碼檢查及修改

在代碼編輯器中單擊右鍵,在彈出的菜單中選擇“CheckHDLfile”,可檢查程序是否有語法錯誤,如圖5-25所示。

在LogWindow中可看到是否有錯誤信息(如圖5-26所示),如有錯誤,程序?qū)o法通過編譯,可在代碼編輯窗口中進(jìn)行修改。

以上操作可檢查語法錯誤,但非語法錯誤就需要自行檢查發(fā)現(xiàn),如在此應(yīng)檢查功能模塊的名稱(“decoder2x4”)與測試平臺中調(diào)用的名稱是否相同。圖5-25語法檢查

圖5-26檢查結(jié)果

5.Options設(shè)置

點(diǎn)擊“ProjectFlow”切換回項目流程,有一個重要參數(shù)應(yīng)首先設(shè)置:對著“Simulation”按鈕按右鍵,在彈出的菜單中選擇“Options”(如圖5-27所示)。

激勵模塊名稱和實例名須與代碼中的一致。在彈出的“ProjectSettings”對話框中,將“Testbenchmodulename”值修改為激勵模塊的名稱,將“Toplevelinstancenameinthetestbench”值修改為所使用的實例名,如圖5-28所示。圖5-27選項設(shè)置圖5-28項目設(shè)置

6.仿真(綜合前)

在“ProjectFlow”中,點(diǎn)擊“Simulation”按鈕,進(jìn)行綜合前的仿真。彈出消息框提示沒有關(guān)聯(lián)激勵程序(如圖5-29所示),點(diǎn)擊“是”,在彈出的對話框中把激勵程序“testbench.v”加入到關(guān)聯(lián)文件中,如圖5-30所示。

ModelSim軟件被打開,正常情況下(無程序錯誤,沒有打開多個ModelSim程序等),ModelSim會自動執(zhí)行剛才關(guān)聯(lián)的激勵程序,通過激勵程序調(diào)用2x4譯碼器程序,并顯示仿真結(jié)果,如圖5-31所示。

對于“Wave”窗口顯示的波形,波形顯示可能會太寬或太窄而影響查看,可通過工具欄進(jìn)行縮放顯示,如圖5-32所示。圖5-29沒有關(guān)聯(lián)激勵程序圖5-30關(guān)聯(lián)激勵程序圖5-31仿真結(jié)果圖5-32波形顯示在Transcript小窗口顯示了執(zhí)行情況及執(zhí)行結(jié)果:

#Loadingpresynth.testdecoder2x4

#Loadingpresynth.decoder2x4

#**Warning:(vsim-3009)[TSCALE]-Module‘decoder2x4’doesnothavea`timescaledirectiveineffect,butpreviousmodulesdo.

#Region:/testdecoder2x4/u1

#time=0,a=0,b=0,en=0,y=1111

#time=5000,a=0,b=0,en=1,y=0111

#time=15000,a=1,b=0,en=1,y=1101

#time=20000,a=1,b=1,en=1,y=1110

#time=25000,a=0,b=1,en=1,y=1011

time=35000,a=0,b=0,en=1,y=0111

驗證輸出結(jié)果和波形是否正確,驗證后關(guān)閉ModelSim。其它說明:

(1)激勵程序(testbench.v)中的延遲設(shè)置為1納秒(ns),而2-4譯碼器的程序(dec2x4.v)中沒有指定(如圖5-33所示)?!癟ranscript”窗口中也有相應(yīng)提示信息“Module‘decoder2x4’doesnothavea`timescaledirectiveineffect,butpreviousmodulesdo.”。

(2)當(dāng)前顯示的單位時間為1皮秒(1ns=1000ps),所以在結(jié)果中顯示的時間為“0、5000、15000、…、35000”,而不是激勵程序中的“0、5…”。圖5-33`timescale設(shè)置

(3)某些情況下進(jìn)入ModelSim后未必能正常顯示仿真結(jié)果,如程序錯誤、參數(shù)設(shè)置錯誤等,可以點(diǎn)擊工具欄圖標(biāo)執(zhí)行“Restart”操作,清除之前的顯示(不清除的話可能影響后面的顯示),然后點(diǎn)擊重新執(zhí)行(Run–All)。

(4)如運(yùn)行不正常又覺得代碼沒問題,可嘗試

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論