EDA技術(shù)案例教程PPT完整全套教學(xué)課件_第1頁
EDA技術(shù)案例教程PPT完整全套教學(xué)課件_第2頁
EDA技術(shù)案例教程PPT完整全套教學(xué)課件_第3頁
EDA技術(shù)案例教程PPT完整全套教學(xué)課件_第4頁
EDA技術(shù)案例教程PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩568頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

目錄

第1章緒論第2章VHDL的結(jié)構(gòu)與要素第3章VHDL典型電路設(shè)計(jì)第4章VHDL設(shè)計(jì)進(jìn)階第5章綜合訓(xùn)練第1章緒論1.1什么是EDA技術(shù) 1.2為什么要用硬件描述語言1.3可編程邏輯器件的結(jié)構(gòu)與原理1.4IP核 1.5JTAG邊界掃描測(cè)試技術(shù) 1.6習(xí)題

1.1

什么是EDA技術(shù)

EDA技術(shù)就是以計(jì)算機(jī)為工具,在EDA軟件平臺(tái)上用硬件描述語言進(jìn)行電路設(shè)計(jì),然后由計(jì)算機(jī)自動(dòng)地完成邏輯編譯、綜合、分割、優(yōu)化、布局、布線和仿真,直至對(duì)于特定目標(biāo)芯片的適配編譯、邏輯映射和配置下載等工作。

EDA技術(shù)融合了電子技術(shù)、計(jì)算機(jī)技術(shù)、信息技術(shù)和智能化技術(shù)的最新成果,極大地提高了電子電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)人員的工作強(qiáng)度。這類軟件目前已有很多種,其主要功能是輔助進(jìn)行三方面的設(shè)計(jì)工作:芯片設(shè)計(jì)、電子電路設(shè)計(jì)、PCB設(shè)計(jì)。沒有EDA技術(shù)的支持,想要完成上述超大規(guī)模集成電路的設(shè)計(jì)制造是不可想象的。反過來,生產(chǎn)制造技術(shù)的不斷進(jìn)步又必將對(duì)EDA技術(shù)提出新的要求?;仡橢DA技術(shù)的發(fā)展歷程,可將電子設(shè)計(jì)技術(shù)分為三個(gè)階段。

EDA代表了當(dāng)今電子設(shè)計(jì)技術(shù)的最新發(fā)展方向,它的基本特征是使用硬件描述語言(HardwareDescriptionLanguage,HDL)進(jìn)行電子設(shè)計(jì)。設(shè)計(jì)人員按照“自頂向下”(Top-Down)的設(shè)計(jì)方法,首先對(duì)整個(gè)系統(tǒng)進(jìn)行方案設(shè)計(jì)和功能劃分,然后采用硬件描述語言對(duì)系統(tǒng)的功能進(jìn)行描述,并對(duì)系統(tǒng)的行為進(jìn)行仿真和驗(yàn)證,再通過綜合優(yōu)化工具生成門級(jí)網(wǎng)表(表示低層電路連接方式的文件),最后在可編程邏輯器件或?qū)S眉呻娐?ApplicationSpecificIntegratedCircuit,ASIC)芯片上完成物理實(shí)現(xiàn)。這樣的設(shè)計(jì)方法稱為高層次的電子設(shè)計(jì)方法。

電子設(shè)計(jì)大致可分為物理級(jí)設(shè)計(jì)、電路級(jí)設(shè)計(jì)和系統(tǒng)級(jí)設(shè)計(jì)三個(gè)層次。

電路級(jí)設(shè)計(jì)工作流程如圖1-1所示。電子工程師接受系統(tǒng)設(shè)計(jì)任務(wù)后,首先確定設(shè)計(jì)方案,同時(shí)要選擇能實(shí)現(xiàn)該方案的合適元件,然后根據(jù)具體的元件設(shè)計(jì)電路原理圖。接著進(jìn)行第一次仿真,包括數(shù)字電路的邏輯模擬、故障分析,模擬電路的交直流分析、瞬態(tài)分析。系統(tǒng)在進(jìn)行仿真時(shí),必須要有元件模型庫的支持,計(jì)算機(jī)上模擬的輸入輸出波形代替了實(shí)際電路調(diào)試中的信號(hào)源和示波器。這一次仿真主要是檢驗(yàn)設(shè)計(jì)方案在功能方面的正確性。

圖1-1電路級(jí)設(shè)計(jì)工作流程

仿真通過后,根據(jù)原理圖產(chǎn)生的電氣連接網(wǎng)絡(luò)表進(jìn)行PCB的自動(dòng)布局布線。在制作PCB之前還可以進(jìn)行后分析,包括熱分析、噪聲及串?dāng)_分析、電磁兼容分析、可靠性分析等,并且可以將分析后的結(jié)果參數(shù)反標(biāo)回電路圖,進(jìn)行第二次仿真,也稱為后仿真。這一次仿真主要是檢驗(yàn)PCB在實(shí)際工作環(huán)境中的可行性。

由此可見,電路級(jí)的設(shè)計(jì)技術(shù)使電子工程師在實(shí)際的電子系統(tǒng)產(chǎn)生前,就可以全面地了解系統(tǒng)的功能特性和物理特性,從而將開發(fā)風(fēng)險(xiǎn)消滅在設(shè)計(jì)階段,縮短了開發(fā)時(shí)間,降低了開發(fā)成本。

進(jìn)入20世紀(jì)90年代以來,電子信息類產(chǎn)品的開發(fā)明顯出現(xiàn)兩個(gè)特點(diǎn):

一是產(chǎn)品的復(fù)雜程度加深;

二是產(chǎn)品的上市時(shí)限緊迫。然而電路級(jí)設(shè)計(jì)本質(zhì)上是基于門級(jí)描述的單層次設(shè)計(jì),設(shè)計(jì)的所有工作(包括設(shè)計(jì)輸入、仿真和分析、設(shè)計(jì)修改等)都是在基本邏輯門這一層次上進(jìn)行的,顯然這種設(shè)計(jì)方法不能適應(yīng)新的形勢(shì),而EDA技術(shù)則引入了一種高層次的電子設(shè)計(jì)方法,也稱為系統(tǒng)級(jí)的設(shè)計(jì)方法。

高層次設(shè)計(jì)是一種“概念驅(qū)動(dòng)式”設(shè)計(jì),設(shè)計(jì)人員無需通過門級(jí)原理圖描述電路,而是針對(duì)設(shè)計(jì)目標(biāo)進(jìn)行功能描述。由于擺脫了電路細(xì)節(jié)的束縛,設(shè)計(jì)人員可以把精力集中于創(chuàng)造性的方案與概念構(gòu)思上,一旦這些概念構(gòu)思以高層次描述的形式輸入計(jì)算機(jī),EDA系統(tǒng)就能以規(guī)則驅(qū)動(dòng)的方式自動(dòng)完成整個(gè)設(shè)計(jì)。這樣,新的概念得以迅速有效地成為產(chǎn)品,大大縮短了產(chǎn)品的研制周期。不僅如此,高層次設(shè)計(jì)只是定義系統(tǒng)的行為特性,可以不涉及實(shí)現(xiàn)工藝,在廠家綜合庫的支持下,利用綜合優(yōu)化工具可以將高層次描述轉(zhuǎn)換成針對(duì)某種工藝優(yōu)化的網(wǎng)表,使工藝轉(zhuǎn)化變得輕松容易。具體的系統(tǒng)級(jí)設(shè)計(jì)工作流程如圖1-2所示。

圖1-2系統(tǒng)級(jí)設(shè)計(jì)工作流程

高層次設(shè)計(jì)步驟如下:

第一步:確定設(shè)計(jì)方案。

按照“自頂向下”的設(shè)計(jì)方法進(jìn)行系統(tǒng)規(guī)劃。

第二步:設(shè)計(jì)輸入。

輸入HDL代碼,這是高層次設(shè)計(jì)中最為普遍的輸入方式。此外,還可以采用圖形輸入方式(原理圖、狀態(tài)圖、波形圖等),此方式具有直觀、容易理解的優(yōu)點(diǎn)。

第三步:源代碼仿真。

對(duì)于大型設(shè)計(jì),還要進(jìn)行代碼級(jí)的功能仿真,主要是檢驗(yàn)系統(tǒng)功能設(shè)計(jì)的正確性,因?yàn)閷?duì)于大型設(shè)計(jì),綜合、適配要花費(fèi)數(shù)小時(shí),在綜合前對(duì)源代碼仿真,就可以大大減少設(shè)計(jì)重復(fù)的次數(shù)和時(shí)間。

第四步:綜合(Synthesize)。

利用綜合器對(duì)HDL源代碼進(jìn)行綜合優(yōu)化處理,生成門級(jí)描述的網(wǎng)表文件,這是將高層次的語言描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟。綜合優(yōu)化是針對(duì)ASIC芯片供應(yīng)商的某一產(chǎn)品系列進(jìn)行的,所以綜合的過程要在相應(yīng)的廠家綜合庫的支持下才能完成。綜合后,可利用產(chǎn)生的網(wǎng)表文件進(jìn)行適配前的仿真,仿真過程不涉及具體器件的硬件特性,是較為粗略的。

第五步:適配(Fit)。

利用適配器將綜合后的網(wǎng)表文件針對(duì)某一具體的目標(biāo)器件進(jìn)行邏輯映射操作,包括底層器件配置、邏輯分割、邏輯優(yōu)化、布局布線。適配完成后,產(chǎn)生多項(xiàng)設(shè)計(jì)結(jié)果:①適配報(bào)告,包括芯片內(nèi)部資源利用情況,設(shè)計(jì)的布爾方程描述情況等;②適配后的仿真模型;③器件編程文件。根據(jù)適配后的仿真模型,可以進(jìn)行適配后的時(shí)序仿真,因?yàn)橐呀?jīng)得到器件的實(shí)際硬件特性(如時(shí)延特性)及結(jié)構(gòu)細(xì)節(jié),所以仿真結(jié)果能比較精確地預(yù)測(cè)未來芯片的實(shí)際性能。如果仿真結(jié)果達(dá)不到設(shè)計(jì)要求,就需要修改HDL源代碼或選擇不同速度品質(zhì)的器件,直至滿足設(shè)計(jì)要求。

第六步:器件編程(Program)或配置(Configure)。

器件編程或配置即設(shè)計(jì)的實(shí)現(xiàn)。將適配器產(chǎn)生的器件編程文件通過編程器或下載電纜載入到目標(biāo)芯片F(xiàn)PGA或CPLD中,即對(duì)FPGA或CPLD芯片進(jìn)行編程或配置,使它們實(shí)現(xiàn)設(shè)計(jì)的功能。通常將對(duì)CPLD的下載稱為編程,對(duì)FPGA的下載稱為配置。如果是大批量產(chǎn)品開發(fā),通過更換相應(yīng)的廠家綜合庫,可以很容易轉(zhuǎn)由ASIC形式來實(shí)現(xiàn)。

此外,各大半導(dǎo)體器件生產(chǎn)商也推出了一些EDA軟件,如Lattice公司的ispDesignExpert、Altera公司的QuartusⅡ、Xilinx公司的Fundation等。這類軟件除了可以進(jìn)行電路設(shè)計(jì)和仿真外,還可以直接對(duì)相應(yīng)的器件進(jìn)行編程和配置,在實(shí)際中得到了廣泛的應(yīng)用。

1.2 為什么要用硬件描述語言

隨著電子技術(shù)的發(fā)展,電子電路的設(shè)計(jì)變得越來越復(fù)雜,使用硬件描述語言進(jìn)行電子電路的設(shè)計(jì)已成為一種趨勢(shì)。所謂硬件描述語言,就是可以描述硬件電路功能、信號(hào)連接關(guān)系以及延時(shí)關(guān)系的語言。與電路原理圖比較,硬件描述語言能更有效地表示硬件電路的特性。利用硬件描述語言來表示邏輯部件及系統(tǒng)硬件的功能和行為,是EDA設(shè)計(jì)方法的一個(gè)重要特征。

下面通過一個(gè)簡(jiǎn)單的例子來初步了解使用硬件描述語言進(jìn)行電路設(shè)計(jì)的優(yōu)勢(shì)。假設(shè)要設(shè)計(jì)一個(gè)一位半加器,輸入是A和B,輸出是S0和C0,其中S0是和,C0是進(jìn)位。根據(jù)加法器的功能,可以列出如表1-1所示的真值表。

按照傳統(tǒng)的設(shè)計(jì)方法,我們首先要畫出電路原理圖,這需要具備一定的專業(yè)知識(shí)和經(jīng)驗(yàn)才能完成。根據(jù)真值表,可以列出一位半加器的邏輯表達(dá)式為

C0=A·B

根據(jù)邏輯表達(dá)式可以得出如圖1-3所示的電路原理圖。

圖1-3一位半加器原理圖

然后要選擇標(biāo)準(zhǔn)集成電路元件,如與門選用74LS08、異或門選用74LS86等,再根據(jù)電路原理圖設(shè)計(jì)出印制電路板圖,最后對(duì)電路進(jìn)行組裝與調(diào)試。

可見,傳統(tǒng)的設(shè)計(jì)方法要求設(shè)計(jì)人員具有豐富的硬件知識(shí),當(dāng)電路比較復(fù)雜時(shí),設(shè)計(jì)、調(diào)試、修改都將變得十分困難,這顯然不符合現(xiàn)代電子技術(shù)高速發(fā)展的需要。

使用硬件描述語言進(jìn)行設(shè)計(jì)時(shí),加法器的功能只需要一條語句,比如A

+

B

=

C,即可實(shí)現(xiàn),設(shè)計(jì)者不必了解具體的硬件結(jié)構(gòu),設(shè)計(jì)完成后,可以在計(jì)算機(jī)上進(jìn)行仿真和驗(yàn)證,以保證設(shè)計(jì)的正確性。另外,硬件描述語言是文檔型語言,便于保存和管理,且又是標(biāo)準(zhǔn)化的語言,開發(fā)工具也是規(guī)范化的,因此設(shè)計(jì)成果是通用的、可移植的,從而可以大大提高設(shè)計(jì)效率,縮短設(shè)計(jì)周期,降低設(shè)計(jì)成本。

VHDL是VeryhighspeedintegratedcircuitHardwareDescriptionLanguage(超高速集成電路硬件描述語言)的簡(jiǎn)稱,誕生于1982年。1987年底,VHDL被IEEE(InstituteofElectricalandElectronicEngineer,電氣和電子工程師協(xié)會(huì))和美國(guó)國(guó)防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。

VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風(fēng)格與句法是非常類似于一般的計(jì)算機(jī)高級(jí)語言的。VHDL的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件、一個(gè)電路模塊或一個(gè)系統(tǒng))分成外部(或稱可視部分,即端口)和內(nèi)部(或稱不可視部分),即涉及實(shí)體的內(nèi)部功能和算法完成部分。在對(duì)一個(gè)設(shè)計(jì)實(shí)體定義了外部端口后,一旦其內(nèi)部開發(fā)完成,其他的設(shè)計(jì)就可以直接調(diào)用這個(gè)實(shí)體。這種將設(shè)計(jì)實(shí)體分成內(nèi)外部分的概念是VHDL系統(tǒng)設(shè)計(jì)的基本點(diǎn)。

在應(yīng)用VHDL描述數(shù)字系統(tǒng)時(shí),采用Entity-Architecture(實(shí)體-結(jié)構(gòu)體)結(jié)構(gòu)。Entity描述數(shù)字系統(tǒng)的輸入輸出接口,同時(shí)Architecture中定義一些全局信號(hào)、變量、常量以及其他電路(程序模塊或邏輯圖模塊)之間必要連接的拓?fù)浣Y(jié)構(gòu)。但Entity并不對(duì)電路的功能做任何的描述,可將其看成一個(gè)“黑盒子”。很明顯,VHDL遵循EDA解決方案中自頂向下的設(shè)計(jì)原則,并能夠保持良好的接口兼容性。Entity和Architecture總是成對(duì)出現(xiàn),它們是VHDL描述電路時(shí)的主要結(jié)構(gòu)。

從整個(gè)利用VHDL設(shè)計(jì)數(shù)字邏輯硬件系統(tǒng)上可以看到,VHDL具有很多方面的優(yōu)點(diǎn)。

首先,VHDL可以用來描述邏輯設(shè)計(jì)的結(jié)構(gòu),比如邏輯設(shè)計(jì)中有多少個(gè)子邏輯,而這些子邏輯是如何連接的。除此之外,VHDL并不十分關(guān)心一個(gè)具體邏輯是靠何種電路實(shí)現(xiàn)的,設(shè)計(jì)者可以把精力集中到電路所實(shí)現(xiàn)的功能上。VHDL采用類似高級(jí)語言的語句格式完成對(duì)硬件行為的描述,這就是為什么稱VHDL為行為描述語言的原因。VHDL所給出的邏輯的模擬與調(diào)試為設(shè)計(jì)者提供了最大的空間,用戶甚至不必編寫任何測(cè)試向量便可以進(jìn)行源代碼級(jí)的調(diào)試。

設(shè)計(jì)者可以非常方便地比較各種方案的可行性和優(yōu)劣,從而大大地降低了設(shè)計(jì)的難度。VHDL描述能力強(qiáng),覆蓋了邏輯設(shè)計(jì)的諸多領(lǐng)域和層次,并支持眾多的硬件模型。設(shè)計(jì)者的原始描述是非常簡(jiǎn)練的硬件描述,經(jīng)過EDA工具處理最終生成付諸生產(chǎn)的電路描述或版圖參數(shù)描述的工藝文件。VHDL具有良好的可讀性,而且它所包含的設(shè)計(jì)實(shí)體(DesignEntity)、程序包(Package)、設(shè)計(jì)庫(Library)為設(shè)計(jì)人員重復(fù)利用別人的設(shè)計(jì)成果提供了技術(shù)手段。

邏輯功能仿真即Pre-RouteSimulation,是在適配下載前的功能模擬,它僅僅驗(yàn)證邏輯的正確性。在早期的EDA解決方案中,一般采用編寫向量或加激勵(lì)波形的方法來描述,但這只能對(duì)邏輯的輸出信號(hào)進(jìn)行模擬,而對(duì)于一些重要的內(nèi)部信號(hào)則無能為力。采用VHDL后可以借助HDLSynthesis生成的VHDL格式的內(nèi)部網(wǎng)單,使用一些特殊的調(diào)試器,對(duì)VHDL源程序進(jìn)行類似于高級(jí)語言調(diào)試的單步跟蹤調(diào)試。這樣,不僅可以觀察重要的內(nèi)部信號(hào),而且可以清楚看到程序執(zhí)行的流程。

接下來就是適配Fitter(Place&Route),這里要用各個(gè)芯片廠商提供的編譯器(TargetCompiler)來生成配置文件,用于下載(Download)和邏輯編程。在生成了JEDEC格式文件后,一般還要經(jīng)過時(shí)序模擬(TimingSimulation),即對(duì)電路的工作頻率、工作延時(shí)做一定的模擬,雖然這仍會(huì)與實(shí)際情況有一定的誤差,但這一步模擬是必需的。

另一方面必須注意,硬件描述語言雖然在形式上和一般的軟件編程語言很相似,但本質(zhì)上是完全不同的。我們知道,普通的軟件語言是在CPU的控制下按時(shí)鐘的節(jié)拍逐條順序運(yùn)行的,而硬件描述語言最終是在目標(biāo)芯片中轉(zhuǎn)換成具體的硬件電路的。

硬件描述語言(HDL)和傳統(tǒng)的原理圖設(shè)計(jì)方法的關(guān)系就好比是高級(jí)語言和匯編語言的關(guān)系。HDL的可移植性好,使用方便,但效率不如原理圖;原理圖設(shè)計(jì)的可控性好,效率高,比較直觀,但設(shè)計(jì)大規(guī)模電路時(shí)顯得比較困難。在真正的電子設(shè)計(jì)中,通常建議采用原理圖和HDL相結(jié)合的方法來設(shè)計(jì),適合用原理圖的地方就用原理圖,適合用HDL的地方就用HDL,并沒有強(qiáng)制的規(guī)定。在最短的時(shí)間內(nèi),用自己最熟悉的工具設(shè)計(jì)出高效、穩(wěn)定、符合設(shè)計(jì)要求的電路才是我們的最終目的。

硬件電路和軟件相比有許多優(yōu)勢(shì),最突出的是高速和高可靠性。硬件電路的延遲時(shí)間可以達(dá)到納秒級(jí),且電路中的各個(gè)部分是可以并行(同時(shí))工作的,這顯然比軟件的運(yùn)行方式快得多。只要設(shè)計(jì)得當(dāng),硬件電路的可靠性也比軟件好得多,不會(huì)出現(xiàn)軟件運(yùn)行時(shí)可能出現(xiàn)的程序跑飛或陷入非法循環(huán)等問題。事實(shí)上,在超高速應(yīng)用領(lǐng)域和對(duì)實(shí)時(shí)性要求很高的情況下,用軟件來實(shí)現(xiàn)往往是不可能的。此外,隨著大規(guī)模集成電路技術(shù)的發(fā)展,現(xiàn)在已可以將整個(gè)系統(tǒng)制造在一個(gè)芯片中,實(shí)現(xiàn)所謂的單片系統(tǒng)SOC(SystemOnaChip),這不僅縮小了系統(tǒng)的體積,也大大提高了系統(tǒng)工作的可靠性。

1.3 可編程邏輯器件的結(jié)構(gòu)與原理

1.3.1CPLD的結(jié)構(gòu)和原理由邏輯代數(shù)可知,任何一種邏輯關(guān)系都可以用與或表達(dá)式來表示,即表示為若干個(gè)乘積項(xiàng)(與項(xiàng))相或的形式。CPLD正是利用這一結(jié)論,通過與或陣列和存儲(chǔ)元件(觸發(fā)器)來實(shí)現(xiàn)各種邏輯電路功能的。因此,CPLD也稱為基于乘積項(xiàng)(Product-Term)的PLD。

如圖1-4所示,這種PLD可分為三塊結(jié)構(gòu):邏輯陣列塊(LAB)、可編程連線陣列(PIA)和I/O控制塊。每個(gè)邏輯陣列塊由16個(gè)宏單元(Macrocell)組成(因?yàn)楹陠卧^多,故圖中沒有一一畫出)。宏單元是PLD的基本結(jié)構(gòu),由它來實(shí)現(xiàn)基本的邏輯功能。可編程連線陣列負(fù)責(zé)各個(gè)LAB之間的連接,所有專用輸入、I/O引腳和宏單元的輸出都送到PIA,PIA可以把這些信號(hào)傳送到器件內(nèi)的各個(gè)地方。I/O控制塊負(fù)責(zé)輸入輸出的電氣特性控制,比如可以設(shè)定I/O引腳為輸入、輸出或雙向工作方式,也可設(shè)定為三態(tài)輸出、漏極開路輸出等。

圖1-4基于乘積項(xiàng)的PLD內(nèi)部結(jié)構(gòu)

圖1-4左上角所示的INPUT/GCLK1、INPUT/GCLRn、INPUT/OE1、INPUT/OE2分別是全局時(shí)鐘、清零和輸出使能信號(hào),這幾個(gè)信號(hào)由專用連線與PLD中的每個(gè)宏單元相連,信號(hào)到每個(gè)宏單元的延時(shí)相同并且延時(shí)最短。宏單元的具體結(jié)構(gòu)如圖1-5所示。

圖1-5宏單元結(jié)構(gòu)

圖1-5中左側(cè)所示的乘積項(xiàng)邏輯陣列就是一個(gè)與或陣列,它可以給每個(gè)宏單元提供5個(gè)乘積項(xiàng),乘積項(xiàng)選擇矩陣用于把這些乘積項(xiàng)分配到后面的或門和異或門,以實(shí)現(xiàn)組合邏輯。每個(gè)乘積項(xiàng)可以反相后回送到邏輯陣列,這些可共享的乘積項(xiàng)能夠連到同一個(gè)LAB中的任何一個(gè)乘積項(xiàng)的輸入上。EDA軟件可以自動(dòng)優(yōu)化乘積項(xiàng)的分配。圖1-5右側(cè)所示的是一個(gè)可編程D觸發(fā)器,它的時(shí)鐘、清零信號(hào)都可以通過編程來選擇,可以使用專用的全局清零和全局時(shí)鐘,也可以使用內(nèi)部邏輯(乘積項(xiàng)邏輯陣列)產(chǎn)生的時(shí)鐘和清零。如果不需要觸發(fā)器,也可以將此觸發(fā)器旁路,信號(hào)直接輸給PIA或輸出到I/O引腳。

下面以一個(gè)簡(jiǎn)單的電路為例,具體說明CPLD是如何利用以上結(jié)構(gòu)實(shí)現(xiàn)邏輯功能的。我們?nèi)砸陨厦嫣岬降囊晃话爰悠鳛槔?,輸入是A和B,輸出是S0和C0,其中S0是和,C0是進(jìn)位。

根據(jù)真值表(見表1-1),可以寫出一位半加器的與或表達(dá)式:

C0=A?B

圖1-6所示為陣列中連接關(guān)系的表示方法。十字交叉線表示兩根線未連接;交點(diǎn)上打黑點(diǎn)表示兩根線是固定連接,即PLD出廠時(shí)已連接;交點(diǎn)上打叉表示該點(diǎn)可編程,即連接與否可通過用戶編程來改變。

圖1-6與或陣列線連接表示法

圖1-7所示為多輸入與門、或門的簡(jiǎn)化畫法,通過編程,可以在陣列的多個(gè)輸入中選擇任一組或全部輸入與門和或門。

圖1-7

PLD中與或陣列的表示法

圖1-8所示為一個(gè)簡(jiǎn)化的與或陣列,由4個(gè)與陣列和2個(gè)或陣列組成。兩個(gè)輸入信號(hào)(A、B)經(jīng)過緩沖互補(bǔ)輸出進(jìn)入與陣列,每個(gè)與陣列輸出一個(gè)乘積項(xiàng),與陣列的輸出進(jìn)入或陣列,最終結(jié)果從或陣列輸出。圖1-8顯示了一位半加器在與或陣列中的實(shí)現(xiàn)方式,圖中的連接點(diǎn)是由EDA工具軟件根據(jù)設(shè)計(jì)文件自動(dòng)生成的。讀者可自行寫出S0、C0的輸出表達(dá)式。

圖1-8在與或陣列中實(shí)現(xiàn)半加器

1.3.2FPGA的結(jié)構(gòu)和原理

FPGA采用查找表結(jié)構(gòu)。查找表(Look-Up-Table,LUT)本質(zhì)上就是一個(gè)RAM。目前,F(xiàn)PGA中多使用4輸入的LUT,所以每一個(gè)LUT可以看成一個(gè)有4位地址線的16×1位的RAM。當(dāng)用戶通過原理圖或HDL描述了一個(gè)邏輯電路以后,EDA工具軟件就會(huì)自動(dòng)計(jì)算邏輯電路所有可能的結(jié)果,并把結(jié)果事先寫入RAM,這樣,每輸入一個(gè)信號(hào)進(jìn)行邏輯運(yùn)算就等于輸入一個(gè)地址進(jìn)行查表,找出地址對(duì)應(yīng)的內(nèi)容,然后輸出即可。表1-2所示為一個(gè)用查找表實(shí)現(xiàn)邏輯電路功能的例子。

下面以Altera公司的FLEX/ACEX系列為例,介紹一下FPGA的內(nèi)部結(jié)構(gòu)。

如圖1-9所示,F(xiàn)PGA的內(nèi)部結(jié)構(gòu)主要包括邏輯陣列塊(LAB)、I/O單元(IOE)和可編程行/列連線。LAB按行和列排成一個(gè)矩陣,每一行中還放置了一個(gè)嵌入式陣列塊(EAB)(圖中未表示)。

嵌入式陣列塊(EAB)是一種輸入輸出端帶有寄存器的非常靈活的RAM,它既可以配置為存儲(chǔ)器使用,也可以實(shí)現(xiàn)邏輯功能。

圖1-9

FPGA的內(nèi)部結(jié)構(gòu)

在FLEX/ACEX中,一個(gè)LAB包括8個(gè)邏輯單元(LE),每個(gè)LE包括一個(gè)LUT、一個(gè)觸發(fā)器和相關(guān)的控制邏輯。LE是FPGA實(shí)現(xiàn)邏輯功能的最基本結(jié)構(gòu),如圖1-10所示。

圖1-10邏輯單元(LE)內(nèi)部結(jié)構(gòu)

圖1-10中所示的進(jìn)位鏈提供了LE之間非??斓南蚯斑M(jìn)位功能。利用進(jìn)位鏈能實(shí)現(xiàn)高速計(jì)數(shù)和任意位數(shù)的加法;利用級(jí)連鏈,可以實(shí)現(xiàn)輸入量很多的邏輯函數(shù),相鄰的LE并行地計(jì)算函數(shù)的各個(gè)部分,然后用級(jí)連鏈把中間結(jié)果串連起來。

快速通道是一系列水平和垂直的連續(xù)式布線通道,采用這種布線結(jié)構(gòu),即使對(duì)于復(fù)雜的設(shè)計(jì)也可預(yù)測(cè)其性能。IOE由一個(gè)雙向I/O緩沖器和一個(gè)輸入輸出寄存器組成。I/O緩沖器可設(shè)定電壓擺率(SlewRate),配置成低噪聲或高速模式,而且每個(gè)引腳還可設(shè)置為集電極開路輸出方式。

綜上所述,可編程邏輯器件的兩種主要類型是現(xiàn)場(chǎng)可編程門陣列(FPGA)和復(fù)雜可編程邏輯器件(CPLD)。在這兩類可編程邏輯器件中,F(xiàn)PGA提供了更高的邏輯密度、更豐富的特性和更高的性能。進(jìn)入21世紀(jì)以來,可編程邏輯器件取得了巨大的技術(shù)進(jìn)步,現(xiàn)在最新的FPGA器件提供的“邏輯門”(相對(duì)邏輯密度)已達(dá)千萬門以上,被廣泛應(yīng)用于從數(shù)據(jù)處理與存儲(chǔ)到儀器儀表、電信和數(shù)字信號(hào)處理等各個(gè)領(lǐng)域,已成為數(shù)字系統(tǒng)解決方案的當(dāng)然之選。

IP核有三種不同的形式:HDL語言形式、網(wǎng)表形式、版圖形式,分別對(duì)應(yīng)于通常所說的三類IP核:軟核、固核和硬核。這種分類主要依據(jù)產(chǎn)品交付的方式,而這三種IP核的實(shí)現(xiàn)方法也各具特色(見圖1-11)。

1.4 IP核

圖1-11知識(shí)產(chǎn)權(quán)核

軟核(SoftCore)是用VHDL等硬件描述語言描述的功能塊,通常與工藝無關(guān),具有寄存器傳輸級(jí)硬件描述語言描述的設(shè)計(jì)代碼,但是并不涉及用什么具體器件實(shí)現(xiàn)這些功能。由于不涉及物理實(shí)現(xiàn),因此軟核為后續(xù)設(shè)計(jì)留有很大的發(fā)揮空間,增加了靈活性和適應(yīng)性,但性能上也不可能獲得全面的優(yōu)化。軟核通過邏輯綜合、時(shí)序仿真等過程就形成了固核(FirmCore)。固核指定了制造工藝,通常以門級(jí)網(wǎng)表的形式呈現(xiàn)。硬核(HardCore)則是設(shè)計(jì)階段的最終產(chǎn)品,對(duì)應(yīng)于特定的工藝形式、物理實(shí)現(xiàn)方式,并對(duì)功秏、尺寸和性能進(jìn)行了優(yōu)化,通常以完成布局布線的網(wǎng)表、特定工藝庫或全定制物理版圖形式呈現(xiàn)。

1.5 JTAG邊界掃描測(cè)試技術(shù)

邊界掃描的基本思想是在芯片的輸入輸出引腳旁增加一個(gè)移位寄存單元,用于對(duì)芯片進(jìn)行檢測(cè)和控制。JTAG標(biāo)準(zhǔn)定義了一個(gè)串行移位寄存器,寄存器的每個(gè)單元分配給芯片的各個(gè)引腳,由于它們分布于芯片四周,故稱為邊界掃描單元(Boundary-ScanCell,BSC)。BSC在芯片內(nèi)部串聯(lián)在一起,構(gòu)成一個(gè)串行移位寄存器,稱為邊界掃描寄存器(Boundary-ScanRegister,BSR)。

當(dāng)芯片處于測(cè)試狀態(tài)時(shí),邊界掃描寄存器被JTAG測(cè)試激活,通過邊界掃描單元和一些附加的邏輯控制,就可以實(shí)現(xiàn)對(duì)芯片內(nèi)部的檢測(cè)和控制。在平時(shí)狀態(tài)下,邊界掃描寄存器對(duì)芯片來說是透明的,對(duì)芯片的正常運(yùn)行沒有任何影響(見圖1-12)。圖1-12

JTAG測(cè)試示意圖

JTAG測(cè)試允許多個(gè)器件通過JTAG接口串聯(lián)在一起,形成一個(gè)JTAG鏈,能實(shí)現(xiàn)對(duì)各個(gè)器件的分別測(cè)試以及對(duì)器件之間的連接的測(cè)試。

JTAG邊界掃描測(cè)試是一種國(guó)際標(biāo)準(zhǔn)測(cè)試協(xié)議(IEEE1149.1—1990),主要用于芯片內(nèi)部測(cè)試及對(duì)系統(tǒng)進(jìn)行仿真、調(diào)試。JTAG測(cè)試是一種嵌入式調(diào)試技術(shù),它在芯片內(nèi)部加入了專門的測(cè)試電路TAP(TestAccessPort,測(cè)試訪問端口),JTAG測(cè)試信號(hào)通過TAP控制邊界掃描寄存器的工作,對(duì)器件內(nèi)部節(jié)點(diǎn)進(jìn)行掃描測(cè)試。如今,大多數(shù)的復(fù)雜器件都支持JTAG協(xié)議,如FPGA/CPLD器件、微處理器、DSP等。

標(biāo)準(zhǔn)的JTAG接口有4線和5線之分:TMS、TCK、TDI、TDO,分別為測(cè)試模式選擇、測(cè)試時(shí)鐘、測(cè)試數(shù)據(jù)輸入和測(cè)試數(shù)據(jù)輸出(見表1-3),支持JTAG協(xié)議的器件都有這些引腳;而TRST(測(cè)試復(fù)位輸入)在IEEE1149.1標(biāo)準(zhǔn)里是可選的,并不是強(qiáng)制要求的。

JTAG接口還可用于對(duì)器件進(jìn)行編程和配置,實(shí)現(xiàn)在系統(tǒng)編程(In-SystemProgrammer,ISP)。傳統(tǒng)生產(chǎn)流程中,要先對(duì)芯片進(jìn)行編程和配置,然后再將其安裝到印制電路板上;而采用ISP方式則可以先將芯片安裝到電路板上,再通過JTAG接口進(jìn)行編程,從而簡(jiǎn)化了工藝流程,大大加快了工程進(jìn)度。

1.6習(xí)題

一、名詞解釋

1.

EDA2.

HDL3.

IEEE4.

PLD5.

FPGA

6.

ASIC7.

SOPC8.

LAB9.

LUT10.?IPCore

11.

ISP

12.

JTAG二、什么是EDA技術(shù)?簡(jiǎn)述其工作流程。

三、根據(jù)可編程邏輯器件的結(jié)構(gòu)和原理,可將其分為基于乘積項(xiàng)和基于查找表兩大類,簡(jiǎn)述這兩類可編程邏輯器件的基本結(jié)構(gòu)和原理。

四、什么是“自頂向下”的設(shè)計(jì)方法?它與傳統(tǒng)的電子設(shè)計(jì)方法有何不同?

五、用硬件描述語言進(jìn)行電子設(shè)計(jì)有哪些優(yōu)點(diǎn)?

六、填空

1.目前使用較多的EDA軟件有________、________、________和________。

2.常用的電子設(shè)計(jì)輸入方式有________、________和________。

3.常用的硬件描述語言有________和________。

4.可編程邏輯器件技術(shù)經(jīng)歷了________、________和________三個(gè)發(fā)展階段。

5.目前市場(chǎng)份額較大的生產(chǎn)可編程邏輯器件的公司有________、________和________。

6.常用的FPGA配置方式有________、________和________。

7.球狀封裝的英文縮寫是________,在系統(tǒng)可編程的英文縮寫是________。

8.傳統(tǒng)的電路設(shè)計(jì)方法采用的是________的系統(tǒng)設(shè)計(jì)方法,而基于EDA技術(shù)的設(shè)計(jì)方法采用的是________的系統(tǒng)設(shè)計(jì)方法。

9.1987年底,VHDL被IEEE和美國(guó)國(guó)防部確認(rèn)為________。具備________描述能力的硬件描述語言是實(shí)現(xiàn)________設(shè)計(jì)方式的基本保證。專家認(rèn)為,VHDL語言與________語言將承擔(dān)起數(shù)字系統(tǒng)的設(shè)計(jì)任務(wù)。

10.基于________結(jié)構(gòu)的PLD通常稱為CPLD,CPLD內(nèi)部分為三塊結(jié)構(gòu):________、________和________;基于________結(jié)構(gòu)的PLD通常稱為FPGA。斷電后數(shù)據(jù)不會(huì)丟失的是________芯片,數(shù)據(jù)會(huì)丟失的是________芯片,因此實(shí)驗(yàn)時(shí)多采用________芯片。通常我們將對(duì)CPLD的下載稱為________,對(duì)FPGA的下載稱為________。

第2章VHDL的結(jié)構(gòu)與要素2.1了解VHDL的基本結(jié)構(gòu)2.2學(xué)習(xí)VHDL的文字規(guī)則和數(shù)據(jù)類型2.3學(xué)習(xí)VHDL的操作符

2.1 了解VHDL的基本結(jié)構(gòu)

2.1.1案例分析多路開關(guān)也稱數(shù)據(jù)選擇器(multiplexer),是一種基本的組合邏輯電路,可以從多個(gè)輸入中選擇一路輸出。下面通過一個(gè)簡(jiǎn)單的2選1多路開關(guān)的設(shè)計(jì)開始對(duì)VHDL的學(xué)習(xí)。

【例2-1】2選1多路開關(guān)的VHDL設(shè)計(jì)。

分析:該電路有兩個(gè)輸入端a、b,一個(gè)輸出端y,一個(gè)選擇信號(hào)s。該電路的功能是通過s來選擇兩個(gè)輸入中的一個(gè)輸出到y(tǒng),s=0時(shí)a輸出到y(tǒng),s?=

1時(shí)b輸出到y(tǒng)(見圖2-1)。

圖2-1

2選1多路開關(guān)符號(hào)圖

我們大致可以看出例2-1的程序主要由三部分組成:

(1)庫(LIBRARY):打開IEEE標(biāo)準(zhǔn)庫中的STD_LOGIC_1164程序包,這個(gè)程序包描述了標(biāo)準(zhǔn)的端口數(shù)據(jù)類型。

(2)實(shí)體(ENTITY):一個(gè)完整的VHDL程序可以看成是對(duì)一個(gè)元件的功能描述,而實(shí)體說明部分主要是描述元件的外觀。它利用PORT語句定義了三個(gè)輸入信號(hào)(a,b,s)和一個(gè)輸出信號(hào)(y),同時(shí)指明它們的數(shù)據(jù)類型都是STD_LOGIC。

(3)結(jié)構(gòu)體(ARCHITECTURE):這部分用來描述元件的內(nèi)部結(jié)構(gòu)和功能。此例的功能描述十分簡(jiǎn)潔,使用了條件賦值語句:

y<=aWHENs=‘0’ELSE

bWHENs=‘1’;

表示當(dāng)條件s?=?'0'?成立時(shí)將a的信號(hào)賦給y,當(dāng)s?=?'1'?成立時(shí)將b的信號(hào)賦給y,其中“<=”是信號(hào)賦值符。

事實(shí)上,一個(gè)完整的VHDL程序通常都是由庫說明部分(LIBRARY)、實(shí)體(ENTITY)和結(jié)構(gòu)體(ARCHITECTURE)三部分組成的,這就是VHDL程序的基本結(jié)構(gòu)。在某些特定情況下,還有其他結(jié)構(gòu)可以根據(jù)需要使用。下面我們對(duì)VHDL程序的結(jié)構(gòu)做進(jìn)一步了解。

2.1.2知識(shí)點(diǎn)

1.實(shí)體(ENTITY)

用VHDL進(jìn)行的設(shè)計(jì),無論簡(jiǎn)單與復(fù)雜都稱為實(shí)體;也可以將其看成一個(gè)元件,它可以是一個(gè)簡(jiǎn)單的反相器,也可以是一個(gè)復(fù)雜的CPU乃至整個(gè)電路系統(tǒng)。VHDL中的實(shí)體部分就是對(duì)這個(gè)實(shí)體和外部電路之間的接口進(jìn)行的描述,可以看成是定義元件的引腳。

實(shí)體部分必須按如下結(jié)構(gòu)書寫:

ENTITY實(shí)體名IS

[GENERIC(類屬表);]

[PORT(端口表);]

ENDENTITY實(shí)體名;

實(shí)體語句以“ENTITY實(shí)體名IS”開始,到“ENDENTITY實(shí)體名;”結(jié)束(在例2-1里,“mux2”就是實(shí)體名),兩句之間是實(shí)體說明部分,其中包括類屬說明語句(GENERIC)和端口說明語句(PORT),但這些內(nèi)容在特定情況下并非都是必需的,在例2-1里就沒有類屬說明語句。

實(shí)體名的具體取名由設(shè)計(jì)者自定,但必須遵守VHDL標(biāo)識(shí)符的有關(guān)規(guī)定。由于實(shí)體名實(shí)際上就是該設(shè)計(jì)電路的器件名,因此實(shí)體名最好根據(jù)電路的功能來取,如4位二進(jìn)制計(jì)數(shù)器可取為COUNTER4B,8位二進(jìn)制加法器可取為ADDER8B,等等。還要注意不要使用EDA工具庫中定義好的器件名作為實(shí)體名,如or2、latch等,以免引起混淆。

2.端口說明語句(PORT)

關(guān)鍵詞PORT引導(dǎo)的端口表是對(duì)設(shè)計(jì)實(shí)體外部端口的說明,包括對(duì)端口的名稱、端口模式和數(shù)據(jù)類型進(jìn)行定義。PORT語句的書寫格式如下:

PORT(端口名:端口模式數(shù)據(jù)類型;

端口名:端口模式數(shù)據(jù)類型);

其中,端口名是設(shè)計(jì)者為實(shí)體的每一個(gè)對(duì)外通道所取的名字,端口模式是指這些通道上數(shù)據(jù)的流動(dòng)方式,而數(shù)據(jù)類型是指端口上流動(dòng)的數(shù)據(jù)的表達(dá)格式或取值類型。VHDL要求只有相同數(shù)據(jù)類型的端口信號(hào)和操作數(shù)才能相互作用。端口類似于器件的管腳,一個(gè)設(shè)計(jì)實(shí)體通常有多個(gè)端口,設(shè)計(jì)實(shí)體與外部交流的信息必須通過端口流入或流出。

端口模式有四種,它們分別是IN、OUT、INOUT和BUFFER,用于定義端口上數(shù)據(jù)流動(dòng)的方向和方式:

(1)

IN模式:定義端口為輸入端口,并規(guī)定為單向只讀模式。只能通過此端口將數(shù)據(jù)讀入設(shè)計(jì)實(shí)體中。IN模式也是VHDL默認(rèn)的端口模式。

(2)

OUT模式:定義端口為輸出端口,并規(guī)定為單向輸出模式。只能通過此端口將數(shù)據(jù)輸出,或者說可以在設(shè)計(jì)實(shí)體中向此端口賦值。

(3)

INOUT模式:定義端口為輸入輸出雙向端口,既可以對(duì)此端口賦值,也可以通過此端口讀入外部的信息,如RAM的數(shù)據(jù)端口、單片機(jī)的I/O口等。

(4)BUFFER模式:定義端口為具有數(shù)據(jù)讀入功能的輸出端口,即可以將輸出至端口的信號(hào)回讀。從本質(zhì)上看BUFFER模式仍是OUT模式,它與雙向模式的區(qū)別在于BUFFER模式回讀的信號(hào)不是外部輸入的,而是由內(nèi)部產(chǎn)生并保存的。

3.結(jié)構(gòu)體(ARCHITECTURE)

如前所述,實(shí)體部分可以看成是描述元件的引腳,而結(jié)構(gòu)體則是描述元件內(nèi)部的結(jié)構(gòu)和邏輯功能。結(jié)構(gòu)體可以由以下部分組成:

(1)對(duì)數(shù)據(jù)類型、常數(shù)、信號(hào)、子程序及元件等元素的說明。

(2)對(duì)實(shí)體邏輯功能的描述,包括各種形式的順序描述語句和并行描述語句。

(3)用元件例化語句對(duì)外部元件(設(shè)計(jì)實(shí)體)端口間的連接方式的說明。

可見,結(jié)構(gòu)體是設(shè)計(jì)實(shí)體的具體實(shí)現(xiàn)。一個(gè)實(shí)體通常只有一個(gè)結(jié)構(gòu)體,但VHDL也允許一個(gè)實(shí)體有多個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體對(duì)應(yīng)著實(shí)體不同的結(jié)構(gòu)和算法實(shí)現(xiàn)方案,但必須用配置語句(CONFIGURATION)指明用于綜合和仿真的結(jié)構(gòu)體,即在最終的硬件實(shí)現(xiàn)中,一個(gè)實(shí)體只能對(duì)應(yīng)于一個(gè)結(jié)構(gòu)體。

結(jié)構(gòu)體語句書寫格式如下:

ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS

[說明語句]

BEGIN

[功能描述語句]

ENDARCHITECTURE結(jié)構(gòu)體名;

其中,實(shí)體名必須是該結(jié)構(gòu)體所對(duì)應(yīng)的實(shí)體的名字,而結(jié)構(gòu)體名可以由設(shè)計(jì)者自己選擇。

需要注意的是,說明語句不是必需的,在例2-1中就沒有說明語句。另外,在一個(gè)結(jié)構(gòu)體中說明的數(shù)據(jù)類型、常數(shù)、元件、函數(shù)和過程只在這個(gè)結(jié)構(gòu)體中有效,如果希望這些說明也能用于其他實(shí)體或結(jié)構(gòu)體,則需要將其作為程序包來處理。

功能描述語句可以含有多種不同類型的以并行方式工作的語句,而每一語句結(jié)構(gòu)內(nèi)部可以含有并行運(yùn)行的描述語句或順序運(yùn)行的描述語句。

可見,結(jié)構(gòu)體(ARCHITECTURE)是對(duì)設(shè)計(jì)功能進(jìn)行描述的主要部分,一般認(rèn)為硬件描述語言可以在三個(gè)層次上對(duì)電路進(jìn)行描述,即行為級(jí)、RTL級(jí)和門電路級(jí),而VHDL的特點(diǎn)決定了它更適合行為級(jí)(也包括RTL級(jí))的描述,因此有人將VHDL稱為行為描述語言。具備行為描述能力的硬件描述語言是實(shí)現(xiàn)“自頂向下”設(shè)計(jì)方式的基本保證。

4.庫(LIBRARY)

在利用VHDL進(jìn)行設(shè)計(jì)時(shí),為了提高設(shè)計(jì)效率以及使設(shè)計(jì)符合某些語言標(biāo)準(zhǔn)或數(shù)據(jù)格式,有必要將一些有用的信息匯集在一個(gè)或幾個(gè)庫中以供調(diào)用。這些信息可以是預(yù)先定義好的數(shù)據(jù)類型、子程序以及預(yù)先設(shè)計(jì)好的設(shè)計(jì)實(shí)體等。因此,可以把庫看成是用來存放預(yù)先完成的各種數(shù)據(jù)類型、子程序以及元件的倉庫。

在VHDL程序中,庫說明語句總是放在實(shí)體語句前面,一個(gè)設(shè)計(jì)實(shí)體可以同時(shí)打開多個(gè)不同的庫;庫實(shí)際是程序包的集合,程序中調(diào)用的是程序包中的內(nèi)容,因此,在庫語句中,除了指明使用的庫外,還要用USE語句指明庫中的程序包。

庫說明語句的格式如下:

LIBRARY庫名;

USE

庫名.程序包名.項(xiàng)目名;

例如:

“LIBRARY IEEE;”表示打開IEEE庫。

“USEIEEE.STD_LOGIC_1164.ALL”表示打開IEEE庫中的STD_LOGIC_1164程序包,關(guān)鍵詞“ALL”表示程序包中的全部項(xiàng)目。

在綜合過程中,當(dāng)綜合器在VHDL的源文件中遇到庫語句時(shí),就將庫語句指定的內(nèi)容讀入,并參與綜合。

VHDL程序設(shè)計(jì)中常用的庫有以下幾種:

(1)IEEE庫。這是VHDL設(shè)計(jì)中最常用的庫,其中包括符合IEEE標(biāo)準(zhǔn)的程序包STD_LOGIC_1164,大部分?jǐn)?shù)字系統(tǒng)設(shè)計(jì)都是以此程序包中設(shè)定的標(biāo)準(zhǔn)為基礎(chǔ)的。此外,還有一些程序包雖非IEEE標(biāo)準(zhǔn),但已成為事實(shí)上的工業(yè)標(biāo)準(zhǔn),也都包括在IEEE庫中,其中最常用的有STD_LOGIC_ARITH、STD_LOGIC_SIGNED、STD_LOGIC_UNSIGNED等。一般基于FPGA/CPLD的數(shù)字系統(tǒng)設(shè)計(jì),上述4個(gè)程序包已足夠使用。

(2)STD庫。VHDL定義了兩個(gè)標(biāo)準(zhǔn)程序包,即STANDARD和TEXTIO程序包,它們都收入在STD庫中,在VHDL的每一項(xiàng)設(shè)計(jì)中都自動(dòng)將STD庫打開了。由于STD庫符合VHDL標(biāo)準(zhǔn),只要在VHDL的應(yīng)用環(huán)境中就可以隨時(shí)調(diào)用其中的所有內(nèi)容,所以在使用中不必像使用IEEE庫那樣用顯式表達(dá)出來,即以下的庫語句是不必要的:

LIBRARY

STD;

USE

STD.STANDARD.ALL;

(3)WORK庫。WORK庫是VHDL設(shè)計(jì)的現(xiàn)行工作庫,用于存放用戶設(shè)計(jì)和定義的一些設(shè)計(jì)單元和程序包,可以看成是用戶的臨時(shí)倉庫。WORK庫自動(dòng)滿足VHDL標(biāo)準(zhǔn),而VHDL標(biāo)準(zhǔn)規(guī)定WORK庫總是可見的,所以在實(shí)際使用中也不需要以顯式說明。

基于WORK庫的基本概念,使用VHDL進(jìn)行設(shè)計(jì)時(shí),不允許將設(shè)計(jì)文件保存在根目錄下,而是必須為設(shè)計(jì)項(xiàng)目建立一個(gè)文件夾,VHDL綜合器將此目錄默認(rèn)為WORK庫。

2.1.3相關(guān)知識(shí)

除了上面介紹的基本結(jié)構(gòu)外,VHDL程序還可以包含一些其他的結(jié)構(gòu),這些結(jié)構(gòu)通常不是必需的,可根據(jù)實(shí)際情況選用。

1.類屬(GENERIC)

類屬是一種端口界面常數(shù),通常放在實(shí)體的說明部分,為所說明的環(huán)境提供一種靜態(tài)信息。通過類屬參數(shù)的設(shè)置,設(shè)計(jì)者可以方便地改變電路的結(jié)構(gòu)和規(guī)模。

例如:

ENTITYchip1IS

GENERIC(n:INTEGER:=16);

PORT(add_bus:OUTSTD_LOGIC_VECTOR(n-1DOWNTO0)…);

在這里,通過類屬參數(shù)n來設(shè)定地址總線(add_bus)的寬度,將n的值設(shè)為16,則輸出端口add_bus的寬度為16位。

STD_LOGIC_VECTOR(n-1DOWNTO0)表示端口add_bus是16位的標(biāo)準(zhǔn)邏輯矢量,對(duì)應(yīng)于實(shí)體元件的16個(gè)引腳,它們的序號(hào)是從n-1降序排到0,顯然,改變n的值,就改變了電路的結(jié)構(gòu)和規(guī)模。

在這種情況下,類屬的作用相當(dāng)于常數(shù),但與常數(shù)不同的是,類屬可以從實(shí)體外部動(dòng)態(tài)地接受賦值,例如在層次化設(shè)計(jì)中,可以通過類屬參數(shù)對(duì)例化元件進(jìn)行定制,從而方便地改變電路的結(jié)構(gòu)和規(guī)模。

2.程序包(PACKAGE)

程序包由以下四種基本結(jié)構(gòu)組成,或者說一個(gè)程序包至少應(yīng)包含以下內(nèi)容中的一種。

(1)常數(shù)說明:在程序包中可以預(yù)定義一些常數(shù),如系統(tǒng)的數(shù)據(jù)總線寬度等。

(2)數(shù)據(jù)類型說明:可以在程序包中定義一些在整個(gè)設(shè)計(jì)中通用的數(shù)據(jù)類型。

(3)元件定義:主要是說明在VHDL程序設(shè)計(jì)中參與例化的元件對(duì)外的接口界面。

(4)子程序:并入程序包的子程序有利于在設(shè)計(jì)中方便地進(jìn)行調(diào)用。

程序包中的內(nèi)容應(yīng)具有良好的適用性和獨(dú)立性,以提供給不同的設(shè)計(jì)實(shí)體訪問和共享。除了標(biāo)準(zhǔn)的程序包外,我們也可以自己定義程序包,程序包的結(jié)構(gòu)由程序包的說明部分(稱為程序包首)和程序包的內(nèi)容即程序包體兩部分組成。

在程序包結(jié)構(gòu)中,程序包首可以單獨(dú)定義和使用,程序包體并非總是必需的。在上面的例子里,如果僅僅是定義數(shù)據(jù)類型和定義信號(hào)、變量等內(nèi)容,則程序包體是不必要的,程序包首可以單獨(dú)使用;但在程序包中有元件或函數(shù)的說明時(shí),則必須有對(duì)應(yīng)的程序包體,元件和函數(shù)的具體內(nèi)容應(yīng)放在程序包體中。

3.配置(CONFIGURATION)

配置也是VHDL程序中的一個(gè)基本單元,正如“配置”一詞本身的含義一樣,可以用配置語句為一個(gè)設(shè)計(jì)實(shí)體配置不同的結(jié)構(gòu)體,以使設(shè)計(jì)者能夠比較不同結(jié)構(gòu)體的性能差別,或者為例化的元件實(shí)體配置指定的結(jié)構(gòu)體,從而形成一個(gè)層次化的設(shè)計(jì)實(shí)體,還可以用配置語句對(duì)元件端口的連接進(jìn)行重新安排等。

通常情況下,配置是用來為較大規(guī)模的系統(tǒng)設(shè)計(jì)提供管理和組織的,主要用于VHDL的仿真。配置語句只能在頂層設(shè)計(jì)文件中使用。

配置語句的格式如下:

CONFIGURATION配置名OF實(shí)體名IS

配置說明

END配置名;

如前所述,一個(gè)設(shè)計(jì)實(shí)體可以擁有多個(gè)不同的結(jié)構(gòu)體,在這種情況下,可以用配置語句為這個(gè)實(shí)體指定一個(gè)結(jié)構(gòu)體,

【例2-3】與非門。

在例2-3里,設(shè)計(jì)實(shí)體MYNAND有兩個(gè)結(jié)構(gòu)體one和two,它們的描述方式不同,但實(shí)現(xiàn)的邏輯功能是相同的,后面的配置語句為實(shí)體指定了一個(gè)結(jié)構(gòu)體。

如果把程序中的配置語句全部刪去,就可以將這個(gè)有兩個(gè)結(jié)構(gòu)體的實(shí)體MYNAND作為一個(gè)元件,然后在一個(gè)頂層文件中調(diào)用這個(gè)元件,并用配置語句為這個(gè)元件指定一個(gè)結(jié)構(gòu)體,如下例。

這是一個(gè)頂層文件,程序中將例2-3中設(shè)計(jì)好的與非門MYNAND作為元件進(jìn)行例化,用兩個(gè)與非門構(gòu)成一個(gè)RS觸發(fā)器,并用配置語句指定實(shí)體MYNAND的第二個(gè)結(jié)構(gòu)體two作為MYNAND的結(jié)構(gòu)體(見圖2-2)。例2-4提到的元件例化是一種層次化的設(shè)計(jì)方法,將在第4章中詳述。

圖2-2例2-4描述的RS觸發(fā)器

綜上所述,VHDL程序的基本結(jié)構(gòu)如圖2-3所示,其中“實(shí)體”和“結(jié)構(gòu)體”是最基本的兩個(gè)部分,其余各部分在特定情況下都不是必需的。

圖2-3

VHDL程序的基本結(jié)構(gòu)

2.1.4練習(xí)與測(cè)評(píng)

一、填空題

1.

VHDL的庫可以分為_______、_______和_______。

2.VHDL程序包括五大結(jié)構(gòu),分別是________、________、________、________和________。其中________和________是必需的,而________、________和________可根據(jù)需要選用。

3.

VHDL程序設(shè)計(jì)中IEEE庫的使用必須用顯式_________表達(dá)出來,而________庫是用戶工作庫,用于存放用戶設(shè)計(jì)和定義的設(shè)計(jì)單元及程序包,在實(shí)際調(diào)用中,無需顯式說明。

4.程序包可以由四種基本結(jié)構(gòu)組成,分別是________、________、________和________,一個(gè)程序包至少應(yīng)包含以上結(jié)構(gòu)中的一種。

5.IEEE庫中最常用程序包是________。

6.標(biāo)準(zhǔn)程序包中定義的常用端口模式有________種,分別是________、________、________和________。VHDL對(duì)端口的讀寫規(guī)則是:在端口模式為________、________或________時(shí),才能從該端口讀數(shù)據(jù);在端口模式為________、________或________時(shí),才能向該端口寫數(shù)據(jù)。其中具有數(shù)據(jù)讀入功能的輸出端口模式是________。如果端口模式被省略,則該端口的默認(rèn)模式是________。

7.VHDL允許一個(gè)實(shí)體有________個(gè)或________個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體對(duì)應(yīng)實(shí)體不同結(jié)構(gòu)的算法實(shí)現(xiàn)方案,在綜合和仿真時(shí)可以用________語句為這個(gè)實(shí)體指定一個(gè)結(jié)構(gòu)體。

8.以下是2選1多路開關(guān)的VHDL程序,請(qǐng)?jiān)跈M線處填入適當(dāng)內(nèi)容。

二、簡(jiǎn)答題

1.簡(jiǎn)述實(shí)體、結(jié)構(gòu)體的概念和語句格式。

2.畫出下列實(shí)體語句描述的元件符號(hào):

(1)??ENTITYBUF3SIS

PORT(INPUT:INSTD_LOGIC_VECTOR(7DOWNTO0);

ENABLE:INSTD_LOGIC;

OUTPUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDBUF3S;

(2)??ENTITYMUX41IS

PORT(IN1,IN2,IN3,IN4:INSTD_LOGIC;

SEL:INSTD_LOGIC_VECTOR(1DOWNTO0);

OUTPUT:OUTSTD_LOGIC);

ENDMUX41;

3.說明端口模式INOUT和BUFFER有何異同點(diǎn)。

2.2 學(xué)習(xí)VHDL的文字規(guī)則和數(shù)據(jù)類型

2.2.1案例分析鎖存器(Latch)是一種基本的存儲(chǔ)單元電路,它利用en端電平控制數(shù)據(jù)的傳輸,把d端輸入的數(shù)據(jù)傳輸?shù)絨端并維持不變,從而起到數(shù)據(jù)保存的作用。下面通過一個(gè)一位鎖存器(見圖2-4)的設(shè)計(jì)來學(xué)習(xí)VHDL的數(shù)據(jù)類型。圖2-4一位鎖存器符號(hào)圖

【例2-5】一位鎖存器的VHDL設(shè)計(jì)。

例2-5的實(shí)體部分定義了兩個(gè)輸入信號(hào)d、en和一個(gè)輸出信號(hào)q,它們的數(shù)據(jù)類型都是STD_LOGIC。結(jié)構(gòu)體的說明語句部分用SIGNAL語句定義了一個(gè)內(nèi)部信號(hào)sig,數(shù)據(jù)類型也是STD_LOGIC。功能描述語句部分使用了一個(gè)進(jìn)程(PROCESS),這是時(shí)序邏輯特有的結(jié)構(gòu),進(jìn)程中使用了IF語句,表示當(dāng)en為高電平時(shí),將輸入端d的值傳給sig,然后結(jié)束IF語句,將sig的值傳給輸出端q;若en為低電平,則直接結(jié)束IF語句,將sig傳給q,即q保持原值不變,可見這是一個(gè)鎖存器。關(guān)于PROCESS和IF語句的內(nèi)容,將在第3章中詳述。例2-5中的端口和信號(hào)均指定了數(shù)據(jù)類型STD_LOGIC,這是VHDL中最常用的一種數(shù)據(jù)類型。下面我們就對(duì)VHDL的文字規(guī)則和數(shù)據(jù)類型做進(jìn)一步了解。

2.2.2知識(shí)點(diǎn)

1.VHDL的文字規(guī)則

和其他編程語言一樣,VHDL也有自己的文字規(guī)則和表達(dá)方式,除了具備和軟件編程語言類似的文字規(guī)則外,還包含許多特有的文字規(guī)則和表達(dá)方式,在使用中必須認(rèn)真遵守。

這里所說的文字(Literal)主要包括數(shù)值型文字和標(biāo)識(shí)符。數(shù)值型文字又包括數(shù)字型、字符串型、數(shù)位串型等。下面將分別進(jìn)行介紹。

1)數(shù)字型文字

數(shù)字型文字有多種表達(dá)方式,列舉如下:

(1)整數(shù)型文字。

整數(shù)型文字都是十進(jìn)制的數(shù),以下都是合法的表達(dá)方式:

567,143E2(=14300), 56_234_697(=56234697)

數(shù)字間的下劃線只是為了改善可讀性,沒有其他意義,也不影響文字本身。

(2)實(shí)數(shù)型文字。

實(shí)數(shù)型文字也是十進(jìn)制的數(shù),但必須帶小數(shù)點(diǎn),以下都是實(shí)數(shù)型文字合法的表達(dá)方式:

1.35,45.69E-2(=0.4569),670_551.324(=670551.324)

(3)其他數(shù)制表示的數(shù)。

用這種方式表達(dá)的數(shù)由五個(gè)部分組成:第一部分表示數(shù)制基數(shù);第二部分是數(shù)制隔離符“#”;第三部分是數(shù)字;第四部分是指數(shù)隔離符“#”;第五部分是指數(shù)部分,這部分如果是0可以不寫。例如:

16#78#; 表示十六進(jìn)制數(shù)78,等于120

2#1111_1110#;表示二進(jìn)制數(shù)11111110,等于254

8#376#; 表示八進(jìn)制數(shù)376,等于254

16#E#E1; 表示十六進(jìn)制數(shù)E0,等于224

(4)物理量文字。

物理量文字,如:60s(秒)、100m(米)、77A(安培)等,但這類文字是不可綜合的。

2)字符和字符串型文字

字符是用單引號(hào)引起來的ASICII字符,如:‘R’、‘U’、‘2’、‘-’、‘*’等。

字符串是用雙引號(hào)引起來的ASICII字符,如:“ERROR”、“BothAandBequalto1”等。

注意:字符和字符串型文字是區(qū)分大小寫的。

可以用字符來定義一個(gè)新的數(shù)據(jù)類型,如:

TYPEMY_LOGICIS('X','0','1','Z');

3)數(shù)位串型文字

數(shù)位串型文字(字符)也稱位矢量,表示二進(jìn)制、八進(jìn)制或十六進(jìn)制的一維數(shù)組。數(shù)位串型字符的表示首先要有數(shù)制基數(shù),然后把要表示的數(shù)放在雙引號(hào)中。數(shù)制基數(shù)用B、O、X分別代表二進(jìn)制數(shù)、八進(jìn)制數(shù)、十六進(jìn)制數(shù)。

二進(jìn)制數(shù)的每個(gè)數(shù)字表示一位(BIT),八進(jìn)制數(shù)的每個(gè)數(shù)字代表三位,十六進(jìn)制數(shù)的每個(gè)數(shù)字代表四位。

例如:

B“1101_1011”;二進(jìn)制數(shù)數(shù)組,矢量長(zhǎng)度是8位

O“15”; 八進(jìn)制數(shù)數(shù)組,矢量長(zhǎng)度是6位

X“AD0”; 十六進(jìn)制數(shù)數(shù)組,矢量長(zhǎng)度是12位

需要注意的是,在語句中,整數(shù)的表示不加引號(hào),如:1、0、25等;而邏輯位的數(shù)據(jù)必須加引號(hào),單個(gè)位的數(shù)據(jù)用單引號(hào),多位數(shù)據(jù)用雙引號(hào),如:‘1’、‘0’、“101”等。

4)標(biāo)識(shí)符

標(biāo)識(shí)符規(guī)則是VHDL中符號(hào)書寫的基本規(guī)范。VHDL的標(biāo)識(shí)符有關(guān)鍵字(也稱保留字)和自定義標(biāo)識(shí)符兩類,VHDL關(guān)鍵字見附錄A。

自定義標(biāo)識(shí)符即用戶在程序中給信號(hào)、變量、常數(shù)、端口等起的名字。

VHDL的標(biāo)識(shí)符不區(qū)分大小寫,應(yīng)遵守如下規(guī)定:

(1)可以使用26個(gè)大、小寫英文字母、數(shù)字0~9以及下劃線“_”。

(2)必須以英文字母開頭。

(3)下劃線的前后都必須有英文字母或數(shù)字。

(4)不能使用VHDL的關(guān)鍵字。

以下是合法標(biāo)識(shí)符的示例:

Encoder_1,F(xiàn)FT,STATE0

以下是非法標(biāo)識(shí)符的示例:

2FFT; 開頭不是英文字母

N-ACK; 不能用符號(hào)“-”

RST_; 下劃線后沒有字符

RETURN; 關(guān)鍵詞

在VHDL程序中可以用“--”(兩個(gè)相連的減號(hào))來加注釋,即每一行中“--”以后的內(nèi)容都是注釋,對(duì)程序是沒有影響的。

另外,VHDL'93版還支持?jǐn)U展標(biāo)識(shí)符,擴(kuò)展標(biāo)識(shí)符用反斜杠“\”界定,區(qū)分大小寫且不受上述規(guī)定的限制,如:\FUNCTION\、\#END#\都是合法的擴(kuò)展標(biāo)識(shí)符。

5)下標(biāo)名和段名

下標(biāo)名用于表示數(shù)組型變量或信號(hào)的某一個(gè)元素,格式如下:

標(biāo)識(shí)符(表達(dá)式)

其中,標(biāo)識(shí)符必須是數(shù)組型變量或信號(hào)的名字,表達(dá)式所代表的值必須在數(shù)組下標(biāo)范圍內(nèi)。

如:X(3)表示數(shù)組X中下標(biāo)為3的元素。

段名即多個(gè)下標(biāo)名的組合,對(duì)應(yīng)于數(shù)組中某一段元素,格式如下:

標(biāo)識(shí)符(表達(dá)式方向 表達(dá)式)

如:X(3downto0),表示數(shù)組X中下標(biāo)從3到0的4個(gè)元素。

這里的標(biāo)識(shí)符必須是數(shù)組型變量或信號(hào)的名字,表達(dá)式所代表的值必須在數(shù)組下標(biāo)范圍內(nèi),并且只能是可計(jì)算的(立即數(shù))。方向用TO或DOWNTO來表示,TO表示下標(biāo)序列由低到高,DOWNTO表示數(shù)組下標(biāo)序列由高到低。

例如:

SIGNALA:BIT_VECTOR(0TO3);

SIGNALB:BIT_VECTOR(3DOWNTO0);

SIGNALM:INTEGERRANGE0TO3;

SIGNALY,Z:BIT;

Y<=A(M);--不可計(jì)算的下標(biāo)

Z<=B(3);--可計(jì)算的下標(biāo)

2.數(shù)據(jù)對(duì)象

數(shù)據(jù)對(duì)象是指可以接受賦值的目標(biāo)。VHDL中的數(shù)據(jù)對(duì)象主要有三類,即信號(hào)(SIGNAL)、變量(VARIABLE)和常量(CONSTANT)。從硬件角度看,信號(hào)和變量大致相當(dāng)于電路中的連線及連線上的信號(hào),常量則相當(dāng)于電路中的恒定值,如VCC或GND。

定義信號(hào)的語法格式如下:

SIGNAL信號(hào)名:[數(shù)據(jù)類型?:=初始值];

如語句“SIGNALSIG:BIT_VECTOR(3DOWNTO0);”是定義一個(gè)名為SIG的信號(hào),數(shù)據(jù)類型是位矢量(BIT_VECTOR),位數(shù)是4位。

定義變量的語法格式如下:

VARIABLE變量名:數(shù)據(jù)類型[:=初始值];

如語句“VARIABLETMP:BIT_VECTOR(3DOWNTO0);”是定義一個(gè)名為TMP的變量,數(shù)據(jù)類型是位矢量(BIT_VECTOR),位數(shù)是4位。

通常變量只能在進(jìn)程和子程序中定義和使用,其適用范圍也僅限于定義了變量的進(jìn)程或子程序中。

定義常量的語法格式如下:

CONSTANT常量名:數(shù)據(jù)類型[:=初始值];

如語句“CONSTANTWID:INTEGER:=7;”是定義一個(gè)名為WID的常量,數(shù)據(jù)類型是整數(shù)(INTEGER),值為7。

注意:盡管VHDL允許給信號(hào)和變量設(shè)置初始值,但初始值的設(shè)置不是必需的,且初始值僅在仿真時(shí)有效,在綜合時(shí)是沒有意義的。

3.VHDL的預(yù)定義數(shù)據(jù)類型

VHDL的預(yù)定義數(shù)據(jù)類型是在標(biāo)準(zhǔn)程序包STANDARD中定義的,自動(dòng)包含在VHDL的源文件中,因此不必用庫說明語句調(diào)用。

1)布爾(BOOLEAN)數(shù)據(jù)類型

布爾數(shù)據(jù)類型實(shí)際上是一個(gè)二值枚舉型數(shù)據(jù),取值為FALSE(偽)和TRUE(真)兩種。例如當(dāng)A大于B時(shí),表達(dá)式(A>B)的結(jié)果是布爾量TRUE,綜合器會(huì)將其轉(zhuǎn)換為1或0信號(hào)值。

2)位(BIT)數(shù)據(jù)類型

位數(shù)據(jù)類型也屬于枚舉型,取值只能是1或0,可以參與邏輯運(yùn)算,運(yùn)算結(jié)果仍是位數(shù)據(jù)類型。

3)位矢量(BIT_VECTOR)數(shù)據(jù)類型

位矢量就是一組位數(shù)據(jù),使用位矢量必須注明寬度,即數(shù)組中位的個(gè)數(shù)和排列。例如:

SIGNALA:BIT_VECTOR(7DOWNTO0);

表示將信號(hào)A定義為一個(gè)8位的矢量,最左位是A(7),最右位是A(0)。

4)整數(shù)(INTEGER)數(shù)據(jù)類型

在使用整數(shù)時(shí),要用RANGE子句定義取值范圍,以便綜合器決定表示此信號(hào)或變量的二進(jìn)制數(shù)的位數(shù)。例如:

SIGNALNUM:INTEGERRANGE0TO15;

定義一個(gè)整數(shù)型信號(hào)NUM,取值范圍是0~15,可用4位二進(jìn)制數(shù)表示,因此NUM將被綜合成4條信號(hào)線構(gòu)成的總線形式。

5)字符(CHARACTER)數(shù)據(jù)類型

字符數(shù)據(jù)類型要用單引號(hào)括起來,如‘A’。字符數(shù)據(jù)類型是區(qū)分大小寫的,即‘A’和‘a(chǎn)’是不同的。

6)字符串(STRING)數(shù)據(jù)類型

字符串?dāng)?shù)據(jù)類型是字符數(shù)據(jù)類型的一個(gè)非約束型數(shù)組,要用雙引號(hào)標(biāo)明。例如:

string_var:="abcd";

7)自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)數(shù)據(jù)類型

自然數(shù)是整數(shù)的一個(gè)子類型,即零和正整數(shù);正整數(shù)也是整數(shù)的一個(gè)子類型,即非零的自然數(shù)。

8)實(shí)數(shù)(REAL)數(shù)據(jù)類型

VHDL中的實(shí)數(shù)類似于數(shù)學(xué)上的實(shí)數(shù),取值范圍為-1.0E38~1.0E38,實(shí)數(shù)類型一般只能在仿真器中使用,綜合器不支持實(shí)數(shù),是因?yàn)閷?shí)數(shù)在電路上實(shí)現(xiàn)起來非常復(fù)雜。

9)時(shí)間(TIME)數(shù)據(jù)類型

時(shí)間數(shù)據(jù)類型是一個(gè)物理類型,包括整數(shù)和單位兩部分,之間至少留一個(gè)空格,如20ns。時(shí)間數(shù)據(jù)類型也只能用于仿真,綜合器不支持。

10)錯(cuò)誤等級(jí)(SEVERITYLEVEL)

錯(cuò)誤等級(jí)是用來表示系統(tǒng)狀態(tài)的數(shù)據(jù)類型,共有四種取值:NOTE(注意)、WARNING(警告)、ERROR(錯(cuò)誤)、FAILURE(失敗)。

注意:例2-6中沒有庫說明語句,這是因?yàn)槌绦蛑惺褂玫臄?shù)據(jù)類型是BIT和BIT_VECTOR,它們都是VHDL的預(yù)定義數(shù)據(jù)類型,自動(dòng)包含在VHDL的源文件中,因此不必用庫語句調(diào)用。

4.IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位和矢量

在IEEE庫的程序包STD_LOGIC_1164中定義了兩個(gè)非常重要的數(shù)據(jù)類型,即標(biāo)準(zhǔn)邏輯位STD_LOGIC和標(biāo)準(zhǔn)邏輯矢量STD_LOGIC_VECTOR。

1)標(biāo)準(zhǔn)邏輯位(STD_LOGIC)數(shù)據(jù)類型

STD_LOGIC數(shù)據(jù)類型共定義了9種值:U(未初始化的)、X(強(qiáng)未知的)、0(強(qiáng)0)、1(強(qiáng)1)、Z(高阻態(tài))、W(弱未知的)、L(弱0)、H(弱1)、-(忽略)。

可見,數(shù)據(jù)類型是STD_LOGIC的數(shù)據(jù)對(duì)象,其可能的取值并非只有0和1兩種,而是有九種可能的取值,這使設(shè)計(jì)者可以精確地模擬一些未知的和高阻態(tài)的電路情況。對(duì)綜合器而言,能夠在數(shù)字器件中實(shí)現(xiàn)的只有四種值,即-(或X)、0、1和Z,但這并不表示其余5種值不存在,這九種值對(duì)VHDL的行為仿真都有重要意義。

2)標(biāo)準(zhǔn)邏輯矢量(STD_LOGIC_VECTOR)數(shù)據(jù)類型

STD_LOGIC_VECTOR是STD_LOGIC_1164中定義的標(biāo)準(zhǔn)一維數(shù)組,數(shù)組中每個(gè)元素的數(shù)據(jù)類型都是標(biāo)準(zhǔn)邏輯位STD_LOGIC。實(shí)際使用中應(yīng)注意數(shù)組的位寬,只有同位寬、同數(shù)據(jù)類型的矢量之間才能進(jìn)行賦值。

在使用這些數(shù)據(jù)類型時(shí),要打開IEEE庫中相應(yīng)的程序包,即

LIBRARYEEE;

USEIEEE.STD_LOGIC_1164.ALL;

3)其他預(yù)定義數(shù)據(jù)類型

以上介紹的數(shù)據(jù)類型是VHDL中最常用的數(shù)據(jù)類型,此外還有多種數(shù)據(jù)類型可供使用。如無符號(hào)型(UNSIGNED)、有符號(hào)型(SIGNED)等,可以用來設(shè)計(jì)可綜合的數(shù)學(xué)運(yùn)算電路。

UNSIGNED類型代表無符號(hào)的數(shù)值,在綜合時(shí)被解釋為一個(gè)二進(jìn)制數(shù);SIGNED表示一個(gè)有符號(hào)的數(shù)值,在綜合時(shí)被解釋為補(bǔ)碼。

如果需要使用這些數(shù)據(jù)類型,需要打開相應(yīng)的程序包,即

LIBRARYIEEE;

USEIEEE.STD_LOGIC_ARITH.ALL;

2.2.3相關(guān)知識(shí)

1.自定義數(shù)據(jù)類型

除了上述一些標(biāo)準(zhǔn)的預(yù)定義數(shù)據(jù)類型外,VHDL還允許用戶自定義新的數(shù)據(jù)類型。可由用戶自定義的數(shù)據(jù)類型有多種,如枚舉類型(ENUMERATIONTYPES)、數(shù)組類型(ARRAYTYPES)等。用戶自定義數(shù)據(jù)類型要用類型定義語句TYPE或子類型定義語句SUBTYPE。

TYPE語句的語法格式如下:

TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義OF基本數(shù)據(jù)類型;

或TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義;

例如:

TYPESZ1ISARRAY(0TO15)OF

STD_LOGIC_VECTOR(7DOWNTO0);

TYPESTATESIS(ST0,ST1,ST2,ST3);

TYPEBYTISSTD_LOGIC(0TO7);--錯(cuò)誤

SUBTYPE的語法格式如下:

SUBTYPE子類型名IS基本數(shù)據(jù)類型RANGE約束范圍;

子類型的定義只是在基本數(shù)據(jù)類型上作一些約束,并沒有定義新的數(shù)據(jù)類型,這是它與TYPE語句最大的不同之處。

例如:

SUBTYPEDIGITSISINTEGERRANGE0TO9;

SUBTYPEDIG1ISARRAY(7DOWNTO0)OF

STD_LOGIC;--錯(cuò)誤

2.數(shù)據(jù)類型的轉(zhuǎn)換

VHDL是一種強(qiáng)類型語言,不同類型的數(shù)據(jù)對(duì)象在相互操作時(shí)必須進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換。數(shù)據(jù)類型的轉(zhuǎn)換有多種方式,如調(diào)用算符重載函數(shù)、調(diào)用預(yù)定義類型轉(zhuǎn)換函數(shù)、自定義轉(zhuǎn)換函數(shù)等。

VHDL的標(biāo)準(zhǔn)程序包中提供了一些常用的轉(zhuǎn)換函數(shù),使用這些現(xiàn)成的類型轉(zhuǎn)換函數(shù)實(shí)現(xiàn)數(shù)據(jù)類型的轉(zhuǎn)換是最方便的。

下面是兩個(gè)調(diào)用現(xiàn)成的類型轉(zhuǎn)換函數(shù)的示例。

例2-7中的RISING_EDGE(cp)是上升沿檢測(cè)函數(shù),即當(dāng)cp的上

溫馨提示

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

評(píng)論

0/150

提交評(píng)論