版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
6.1VHDL語言設計概述6.2VHDL可編譯源設計單元6.3VHDL語言基礎知識6.4時序語句與行為描述6.5信號與信號賦值6.6并發(fā)行為性語句與數(shù)據(jù)流描述6.7元件層次與結(jié)構(gòu)描述6.8VHDL設計舉例6.9課程設計復習第6章VHDL系統(tǒng)設計語言
6.1VHDL語言設計概述
6.1.1簡介
1962年,Iverson首先提出硬件描述語言(HDL)的概念。經(jīng)過淘汰選擇,本書介紹的VHDL和VerilogHDL已經(jīng)成為被普遍接受的硬件設計語言標準。電子設計手段的更新?lián)Q代歷經(jīng)了一次否定之否定的螺旋式前進歷程:從計算機早期階段的文本輸入,發(fā)展到圖形輸入,又發(fā)展到現(xiàn)在的文本描述與圖形輸入并存的局面。
屬于文本形式類的新型硬件設計語言還有SystemC、SystemVerilog;另一種屬于圖形類的便捷設計輸入方式則是采用高層原理方框圖的圖形描述技術。
1.VHDL名稱與功能
VHDL(VHSIC硬件描述語言,VHSICHardwareDescriptionLanguage)是一種電子工程設計師用來設計硬件系統(tǒng)與電路的高級語言。其中,VHSIC是指美國國防部(DOD)1978年制定的總預算為2.1億美元的七年超高速集成電路(VeryHighSpeedIntegratedCircuit)發(fā)展計劃。該計劃要求1986年美國的VHSIC實現(xiàn)亞微米工藝,芯片規(guī)模大于25萬門,速度提高100倍以上。1981年成立VHDL工作組;1983年由IBM、TI、Intermetrics等公司組成VHDL開發(fā)組。1986年IEEE標準化組織開始審定VHDL標準。美國最初制定VHDL語言標準的初衷是提供一種描述電子硬件系統(tǒng)的手段,用于復雜電子產(chǎn)品開發(fā)、技術交流和文件歸檔。其目的是加速VHSIC器件和電子系統(tǒng)的研制。
目前,VHDL已經(jīng)發(fā)展成為設計師實現(xiàn)設計創(chuàng)建描述(輸入—歸檔—交流—修改)、設計模擬仿真(驗證)、設計綜合、設計測試等貫穿設計全過程四種功能的標準語言。它已經(jīng)得到EDA及ASIC廠商的普遍支持。
采用VHDL進行設計,可以立刻得到新方案的仿真結(jié)論。但是,VHDL并不是全部可綜合的,可以被綜合的只是一個子集。
2.VHDL的標準化歷程
VHDL從問世起,就一直以標準系列的載體形式記錄著它的發(fā)展和逐漸成熟的歷程。下面按照時間順序列出一些典型的相關標準。
(1)早在1987年12月,VHDL被確定為標準的最初版本IEEEStd1076-1987。本書中簡寫為IEEE-1076-1987,或IEEE-1076。
(2)?VHDL同時也是美國軍方的MilStd-454L標準。
(3)經(jīng)過對最初版本的使用和修訂之后,1993年美國國家標準局(ANSI)和IEEE給出VHDL的新版本ANSI/IEEEStd1076-1993。2002年IEEE設計自動化委員會又推出IEEEStd1076-2002新版本(詳見參考文獻IEEEStandardVHDLLanguageReferenceManual.2002及附錄1)。
(4)其中可綜合的子集部分被匯編成標準文本IEEE-1076.6/D2.0。
(5)多值邏輯系統(tǒng)集合包于1993年被確定為與VHDL主標準相配套的IEEE-1164-1993標準。
(6)標準數(shù)學運算集合包,包括Math_real和Math_complex兩個集合包,于1996年被確定為附屬標準IEEE-1076.2。
(7)?VITAL(VHDLInitiativeTowardsASICLibraries)是ASIC仿真時的延遲參數(shù)格式標準,用于建立庫參數(shù)模型(LPM,LibraryParameterModel),于1995年被確定為附屬標準IEEE-1076.4。
(8)根據(jù)IEEE-1076-1993,1995年國家技術監(jiān)督局推薦VHDL為我國EDA硬件描述語言的國家標準。之后,在2001年制定了國內(nèi)的電子設計硬件描述語言VHDL標準SJ20777-2000。
3.VHDL的優(yōu)點
采用VHDL語言進行硬件系統(tǒng)與電路設計,具有如下一些優(yōu)點。
1)支持多種設計方法和技術
VHDL支持多種設計方法和技術,已經(jīng)得到EDA廠商的廣泛支持。所支持的設計方法包括:自上而下的設計和基于庫的設計。所支持的設計技術包括:同步設計和異步設計等。
2)支持高復雜度的描述與設計
VHDL支持各種規(guī)模級別復雜度、行為和邏輯結(jié)構(gòu)兩個層次描述的設計,可以包括從系統(tǒng)級描述(行為或結(jié)構(gòu))到寄存器轉(zhuǎn)移級(RTL)描述,再到門級邏輯網(wǎng)表結(jié)構(gòu)詳細描述。它是SOC系統(tǒng)集成設計的得力工具。利用元件這一抽象機制,VHDL支持并行開發(fā)策略,支持多層次的混合仿真。
3)設計活動具有獨立性
VHDL獨立于EDA軟件工具之外,便于學習。但這個語言標準又得到了所有EDA廠商的廣泛有力支持。
4)與制造工藝獨立
VHDL不針對物理結(jié)構(gòu)進行描述,它與制造工藝技術相對獨立,但設計師可以用VHDL編寫部分工藝信息。
5)標準化的一次成功實踐
VHDL完全是人為制造出來的一種設計語言標準,已經(jīng)使得設計活動中的各種銜接關系得到改善和簡化。它的采用推動了電子設計的交流、存檔和復用。
VHDL提供的復用手段包括:集合包、配置、子程序、元件、一個實體號對應多個構(gòu)造體等。6.1.2設計單元和庫
1.四種源設計單元
VHDL中有以下四種可編譯的源設計單元:
(1)實體號(EntityDeclaration)。
(2)構(gòu)造體(ArchitectureBody)。
(3)集合包(Package,分為包說明Declaration和包體Body兩部分)。
(4)配置(ConfigurationDeclaration)。
2.庫內(nèi)容
采用VHDL進行設計活動時,需要用到庫(Library)。庫不是VHDL的源設計單元,它是存放源設計單元的場所,其存放的內(nèi)容分為以下幾類:
(1)當前設計的上述四種源設計單元。
(2)已有的用戶設計庫。
(3)集合包STANDARD、TEXTIO等。
(4)?ASIC廠商提供的庫。
(5)?EDA廠商提供的庫。
這里所列五類庫的內(nèi)容(1)、(2)、(3)、(4)、(5)與設計活動的關系如圖6-1所示。圖6-1VHDL設計中庫的作用6.1.3表現(xiàn)手法
VHDL表現(xiàn)電路設計的手法主要有兩種:電路邏輯結(jié)構(gòu)網(wǎng)表和電路功能行為描述。VHDL為了能在系統(tǒng)行為層次表現(xiàn)算法,擴展了實數(shù)數(shù)據(jù)類型。
我們在表1-1的基礎上加以修改,將VHDL語言的表達能力用表6-1表示。下面分別做一介紹。
1.表征電路結(jié)構(gòu)網(wǎng)表
可以用VHDL結(jié)構(gòu)風格中的元件(Component)及實例生成連接關系來描述邏輯電路網(wǎng)表。
2.表征系統(tǒng)行為
也可以用VHDL表征系統(tǒng)的行為,例如用并發(fā)行為性語句
A<=B+Cafter5ns;
給出整數(shù)A、B、C之間的運算關系。
VHDL對大、小寫不加區(qū)別,上述語句與A<=b+cafter5NS;是一樣的。
3.表現(xiàn)實數(shù)域運算算法
VHDL中也定義有實數(shù)(浮點數(shù)),但是它主要是用來描述模擬量和研究算法的。
這樣,在概念設計時可以允許有不同的表征層次,包括:系統(tǒng)、算法行為、寄存器轉(zhuǎn)移結(jié)構(gòu)、單位延遲門和詳細時序門等。在真正硬件實現(xiàn)時,需要再改造為可綜合的設計,包括用定點數(shù)來完成計算等。6.1.4VHDL開發(fā)環(huán)境
目前,幾乎所有的EDA工具都擁有VHDL的開發(fā)環(huán)境。以比較簡單易用的V-System為例,設計開發(fā)的基本步驟如下。
1.編輯編譯
使用編輯(Editor)工具,設計出VHDL的源設計文本。再將源設計文件進行編譯(Compilier),可以得到源程序中語法方面的出錯信息。
2.仿真硬件
V-System(后來發(fā)展為ModelSim)開發(fā)環(huán)境的主體是模擬仿真器(Simulator),用仿真器對編譯好的源設計單元進行模擬仿真。可以用仿真器的命令給出仿真用的激勵,也可以直接用VHDL來編寫激勵。對用VHDL編寫的程序進行仿真,和對用一般軟件語言編寫的程序進行仿真,具有如下的不同之處。
(1)模擬時間——在VHDL中引入“模擬時間”的概念來模擬真實硬件實際運行時所花費的時間;模擬VHDL程序段對應的硬件運行時間。它用時間步長規(guī)定了相對時間、絕對時間等序列。程序按模擬時間運行,互相間的延遲也按模擬時間計算。
(2)并發(fā)性——并發(fā)性是模擬真實硬件運行時的重要概念,這一點也不同于一般的軟件語言程序。如果設計中有幾個加法器,它們將隨著模擬時間的增長并行工作,其中的每個加法器都是在輸入到來后就并行運行。這與硬件電路實際工作情況是一致的。
3.結(jié)構(gòu)化關系
所謂結(jié)構(gòu)層次化設計,主要是指結(jié)構(gòu)描述手法。VHDL用實例生成(Instantiation)完成在構(gòu)造體中對元件的調(diào)用和裝配。
類比于一般軟件程序語言設計中的主程序與子程序的關系,VHDL語言則體現(xiàn)在構(gòu)造體設計中的實例生成與元件的關系。
4.配置手段
可以用不同的配置形成不同的設計版本;模擬用的不同模型也以不同配置的形式出現(xiàn),詳見參考文獻——薛宏熙等著《數(shù)字系統(tǒng)設計自動化》。
6.2VHDL可編譯源設計單元
前面介紹過的四種可編譯源設計單元,也可以將其稱之為VHDL中的四大構(gòu)件(Construct)。它們的基本功能是:
(1)實體號——描述設計的信號接口界面(即子設計元件或總設計的I/O界面)。
(2)構(gòu)造體——指定設計的真實行為性能和結(jié)構(gòu)。
(3)集合包——將常用的數(shù)據(jù)類型、常數(shù)、說明這一類約定和子程序等設計模塊集中存放。這樣,對于其他設計而言,它們是可見的和可共享的。
(4)配置——用于從庫中選取單元來搭配組合成不同的設計版本,是通過指派來建造新設計體的一種手段。
此外還有庫,它本身不是源設計單元,它用來存放源設計單元,它是設計時的倉庫。
下面先給出VHDL設計文件示例mine.vhd。
packagemy_defsis--實際上包標題應該已經(jīng)設計好并事先放入freds_library中
constantunit_delay:time:=1ns;
endmy_defs;
entityCOMPAREis
port(a,b:inbit;
c:outbit);
endCOMPARE;
libraryfreds_library;
Usefreds_library.my_defs.all;
architectureflowofCOMPAREis
begin
C<=NOT(axorb)afterunit_delay; --“同或門”
構(gòu)成
endflow; --等值比較器集合包my_defs給出了可以共享的常數(shù)。
實體號COMPARE為設計和信號端口命名。
構(gòu)造體flow給出了設計細節(jié)。
按默認的規(guī)定,最新編譯的構(gòu)造體就是當前的默認配置,所以COMPARE的一個配置就是flow。備注:
所有的VHDL源文件文本都可以采用--…做為注釋方法!它由兩個連字符--開頭組成一個注釋內(nèi)容為…的注釋行。若一行寫不下,可以再用兩個連字符--增加一行注釋行。中英文都行,注釋并不影響程序的編譯和仿真。
在本章關于VHDL的句法描述中,用定義符::=表示定義符左邊的項由右邊的表達式來定義;用豎杠符號∣分隔多個選項;用[…]表明方括弧內(nèi)的項是可選項;用{…}表明花括弧內(nèi)的項可以重復0次或多次。
另外,VHDL語法認為源文件中的大小寫字母是一樣的,例如not與NOT是相同的。
為了醒目起見,在設計舉例中,我們將四種源設計單元中用于起始、結(jié)束的字符和其他所有的保留字都用黑體表示。6.2.1庫
1.分類
如前所述,庫(Library)是放置源設計單元的倉庫。庫中的內(nèi)容包括:
(1)通用集合包庫——標準集合包STANDARD,文本I/O函數(shù)TEXTIO集合包。為了提高生命力,標準化組織已經(jīng)擴展了不少集合包。
(2)用戶庫WORK——用戶設計源文件,包含集合包,由用戶自己不斷充實完善。
(3)?ASIC廠商庫——這里是經(jīng)過驗證的設計,包括門電路等都是庫中的元件。
(4)?EDA廠商庫——有函數(shù)集合包,例如求平方根等。
2.庫規(guī)則解釋
(1)?VHDL編譯的結(jié)果存放在某一個用戶庫中,庫可以包括上述四種源設計單元。
(2)?VHDL不支持庫之間的包含結(jié)構(gòu),即,盡管庫可以有許多個,但庫之間不能嵌套。
(3)兩個內(nèi)建(Built-in)庫:其名稱為WORK和STD。
(4)需要從庫中調(diào)出設計單元用于設計時,則庫說明部分的句法如下所述,即
librarylibrary_name;
再用Use子句打開,然后才能起作用。打開庫時最多有三個層次,格式如下:
uselibrary_name.package_name.item_name;
或者是兩層:
uselibrary_name.item_name;
舉例:
Usefreds_library.my_defs.unit_delay;
其中集合包my_defs必須先編譯;Use后面給出的即為打開的庫層次。被打開的項unit_delay在下面的語句及隨后的其他語句中才可以使用。
C<=NOT(axorb)afterunit_delay;而默認庫WORK是不需說明的特殊庫。對于WORK庫中的內(nèi)容,在Use字句中可以不出現(xiàn)庫名而直接出現(xiàn)庫中下兩層的內(nèi)容:
usepackage_name.item_name;或者useitem_name;
(5)庫中各單元的名稱應該各不相同(實體號和集合包的名稱應該不同,同一個設計實體號的各構(gòu)造體名字也應該各不相同)。6.2.2集合包
1.簡介
集合包(Package)是一個可共享、可編譯的VHDL源設計單元,它又是庫中的一個層次。集合包由集合包說明(PackageDeclaration)和集合包體(PackageBody)兩部分構(gòu)成。
用Use語句將集合包打開,但STD庫中的STANDARD集合包中的調(diào)用不需要Use語句。Use語句中的all是指其中的所有項;Use實現(xiàn)將庫打開的效果,該庫內(nèi)容將被應用于其后的那個設計單元。
2.功能和構(gòu)成
這里,對集合包中的有關功能先做一簡要解釋。
(1)先編譯的集合包說明(PackageDeclaration,又稱標題,Header)包括:
類型說明、元件說明、信號說明、子程序說明、常數(shù)說明或推遲說明。
(2)后編譯的集合包體(PackageBody)是一可選項,將給出進一步的有關細節(jié),包括:子程序體、推遲說明的常數(shù)值等。
將包說明與包體加以分離,有助于隔離和孤立日后的設計變動。注意:一個包說明最多只有一個包體,也可以沒有包體;包說明和包體可以不放在一處。
本節(jié)開始時給出一個VHDL設計文件示例mine.vhd,該處的集合包my_defs就沒有包體。此種情況下如果想改變常數(shù)就比較困難,而下例則比較方便。
3.格式舉例
packagemathis
Mean_Value:REAL;
ENDmath;
PACKAGEBODYmathis
CONSTANTMean_Value:REAL:=110.0;
ENDmath;
需要改變時,最好只對此段集合包體程序進行單獨編譯。為達到這一目的,需要將集合包說明和集合包體分別放在不同的設計文件中。這時,最好把不再改動的集合包標題部分放在公用的庫中不動。6.2.3實體號
1.釋義
在VHDL中,用來描述硬件的主體是設計實體(DesignEntity,稱作Entity)。完整的實體由實體號(EntityDeclaration)和構(gòu)造體(ArchitectureBody)兩部分組成。實體號經(jīng)常被簡稱為Entity,構(gòu)造體被簡稱為Architecture。
VHDL將實體號與構(gòu)造體分開是一個比較明智的策略。實體號定義了一個新的元件名,編譯并經(jīng)過模擬仿真后放入庫中。這樣在另外的設計中加以說明,就可以作為元件使用。要說明的內(nèi)容有元件的輸入/輸出連接關系以及一些有關的參數(shù);要說清楚元件的外部接口以及連接用信號的類型和方向。根據(jù)如圖
6-2所示的示例框圖,可以進一步理解VHDL中實體號的作用。2.格式
entityentity_nameis--這里的entity_name為實體號名稱
〔generics〕 --entity標題之一的類屬子句
〔ports〕 --entity標題之二的端口子句
〔declarations{constants,types,signals}〕--declarations為說明
〔begin--常數(shù)類型信號
entity_statements〕--這里的實體號語句通常不用
endentity_name;在實體號中,如果出現(xiàn)begin,則begin后的實體號語句不是動態(tài)的動作。它只是被動的核查與認定,例如觸發(fā)器置位和復位端是否同時為0等。
3.舉例
下面給出實體號設計的三個示例——例(1)、例(2)、例(3)。在了解它們共性的基礎上,請進一步注意它們之間的差別。
例(1)
entityCOMPAREis
port(A,B:inbit;
C:outbit);
endCOMPARE;
例(1)中的entity和is都是VHDL的保留字;A、B是類型為Bit的輸入信號;C是類型為Bit的輸出信號。實體號的名稱是COMPARE,并不等價于它代表真實的功能。這個實體號可能是一個比較器,但也可能不是。設計的輸入輸出關系如圖6-2所示,讀者可以望文生義,暫且先把它想像成比較器,留待后面構(gòu)造體中的語句功能再加以驗證。圖6-2VHDL實體號對應的框圖例(2)
entityCOMPARE_digitis
port(A,B:inintegerrange0to9:=0;--區(qū)間約束
C:outboolean);
endCOMPARE_digit;
例(2)的設計明顯與上面的例(1)不同,port說明中的integer為整數(shù),:=0表示初值,boolean量的初值為false,增加了一些約束來指定端口的位數(shù)、區(qū)間及初值。例(3)
entityCOMPARE_digit1is
port(A,B:inintegerrange0to9:=big_number
C:outboolean);
endCOMPARE_digit1;
在例(3)的設計中,初值的設置更加靈活。但是,句法要求其中的big_number應在集合包中說明過。
編譯后的實體號可以作為一個元件使用和對待,使用時不需要知道細節(jié),而且也不需要重新編譯。6.2.4構(gòu)造體
1.概述
構(gòu)造體(ArchitectureBody)與實體號(EntityDeclaration)一起構(gòu)成一個完整的實體(Entity)。根據(jù)實體號所確定的前提,設計師用構(gòu)造體來具體指定實體的行為、元件(結(jié)構(gòu))以及內(nèi)部連接關系,定義出設計實體的真實功能。
設計師在設計活動中需要先編譯Entity,然后再編譯Architecture。一旦重新編譯了Entity,則相應地需要再重新編譯Architecture。設計構(gòu)造體時,可以從下述兩個方面去詮釋和描述實體號:既可以采用不同的抽象層次(例如用系統(tǒng)行為功能的方框模型,或者是電路邏輯結(jié)構(gòu)模型);也可以采用不同的實現(xiàn)方式(例如加法器可以是串行脈動進位,或者是并行超前進位)。
關于實體的實質(zhì)性描述最終是由構(gòu)造體給出。即使對應于同一個實體號,不同的構(gòu)造體描述可能會使得整個實體的功能面目全非。采用不同設計風格進行設計時,關注的對象和核心是不同的。概括起來,行為風格核心是數(shù)據(jù)變換和定時;數(shù)據(jù)流風格核心是激勵—響應模型;結(jié)構(gòu)風格核心是元件、端口和信號?,F(xiàn)在已經(jīng)有編譯器和綜合工具支持混合風格描述。一般,一個設計可以采用上述某種或全部描述風格,這要根據(jù)抽象層次及細節(jié)描述的需要而定。
2.Architecture格式
architecturearchitecture_nameofentity_nameis
〔declarations〕
begin
〔concurrent_statements〕
end〔architecture_name〕;
此段中architecture_name為構(gòu)造體名,entity_name為實體號名;declarations說明本構(gòu)造體內(nèi)用的項:類型、子程序、常數(shù)、信號、元件等;concurrent_statements泛指包括元件實例生成在內(nèi)的廣義并發(fā)語句。一個Entity(下例中為compare)可以對應不同的Architectures。如果對應的構(gòu)造體有a、b、c三種,則每一個都可以理解為其中之一,即oneofcompare的關系。
在編寫Architecture時,出現(xiàn)在構(gòu)造體首行的形式為
…aofcompare…
…bofcompare…
…cofcompare…
在編寫配置說明時,又往往寫成如下的關系形式:
…compare(a)…
…compare(b)…
…compare(c)…這些構(gòu)造體的接口關系都相同(由實體號完成定義),但它們各自的名字不同(功能也允許不同,但一般避免這樣做)。以后再通過配置手段,可以在不同的版本中選擇不同的速度和規(guī)模。不同的構(gòu)造體可以分別編譯,這樣修改其中的一個并不影響另一個。
構(gòu)造體可以采用行為、數(shù)據(jù)流(有人稱作定時)、結(jié)構(gòu)三種表達方式來描述。我們以同一個加法器設計為例,分別給出三種描述中的關鍵語句。
行為描述——定義出按時序描述的進程(Process),對應著時序語句。
如果用進程描述加法器行為,則形如:
...Process....a<=b+c;endprocess;....--這里的b、c、a定義為算術運算中的整數(shù)。
數(shù)據(jù)流描述—基本上是一種行為描述,又隱含著寄存器傳輸級(RTL,RegisterTransferLevel,更確切地應該稱其為寄存器轉(zhuǎn)移級)一級的邏輯結(jié)構(gòu)描述,對應并發(fā)行為性語句。
此處用直接的邏輯表達式描述加法器的RTL級數(shù)據(jù)流:
...Sum<=bxorc;Carry<=bandc;....--這里是邏輯運算,b、c、Sum、Carry定義為Bit量。
當然,作為上述進程的例子也同樣可以縮寫為數(shù)據(jù)流描述。一般而言,進程比簡單的并發(fā)語句能夠描述更復雜的功能。
結(jié)構(gòu)描述——定義了元件的內(nèi)部連接關系,對應著結(jié)構(gòu)VHDL。
現(xiàn)在,用門級網(wǎng)表來描述加法器的結(jié)構(gòu):
...U0:XR2portmap(b,c,sum);...--這里是元件的結(jié)構(gòu)映射。
用結(jié)構(gòu)描述(元件及互連網(wǎng)表)風格的優(yōu)點是便于實現(xiàn)層次化設計。
3.行為風格構(gòu)造體
行為風格(BehavioralStyle)適用于描述算法。下面舉例解釋,用行為風格、數(shù)據(jù)流風格和結(jié)構(gòu)風格設計同一個等值比較器COMPARE,它比一般的大小比較器要簡單。
它的實體號為
entityCOMPAREis
port(A,B:inbit;
C:outbit);
endCOMPARE;舉例之一:行為風格構(gòu)造體——采用進程設計
architectureAXW1ofCOMPAREis
begin
process(A,B)
begin
if(A=B)then
C<=‘1’after1ns;
else
C<=‘0’after2ns;
endif;
endprocess;
endAXW1;上述構(gòu)造體中包含一個進程。進程也是一種并發(fā)語句,只不過表達能力更強。在上述進程中采用了信號賦值語句。
模擬時間是為了用計算機的EDA軟件模擬VHDL固有的并發(fā)特點而引入的概念,用以模擬真實硬件系統(tǒng)中事件發(fā)生的時刻。構(gòu)造體中的各進程在模擬器的模擬時間刻度上并發(fā)運行,例如1ns、2ns等,這樣地向前計時推進。
各進程的地位是相互獨立的,某一進程的運行可以與其他進程有關。進程間需要由信號進行通信,信號用來傳送數(shù)據(jù)。進程內(nèi)部可以有變量,但只限于局部變量、局部存儲,不能用來向外傳出信息。1993版本的VHDL標準擴展了共享變量,但一定要慎重使用。
上述process(A,B)中的A,B稱為敏感信號列表,進程等待著輸入信號A、B的觸發(fā)。只要A或B變化,進程就被激活;之后C又可能激活其他進程n。
各進程在行為描述中的信號變換關系如圖6-3所示。在設計行為風格構(gòu)造體時,需要注意的核心問題是(信號的)數(shù)據(jù)變換和定時。數(shù)據(jù)變換是指信號上的數(shù)據(jù)變換,定時是指信號間的時序。這些信號包括進程間和進程內(nèi)的信號。在自上而下設計的前期階段,適宜于采用這種行為風格來“抽象”行為。圖6-3行為描述中的變換和定時
4.數(shù)據(jù)流風格構(gòu)造體
數(shù)據(jù)流風格(DataflowStyle)構(gòu)造體,按邏輯函數(shù)隨時間而變的信息或數(shù)據(jù)流行為建立模型寫成并發(fā)行為性語句(以并發(fā)信號賦值語句為主),例如實現(xiàn)加法器、比較器、譯碼器和基本邏輯門等??梢哉J為,數(shù)據(jù)流風格是行為風格派生的。進程可以完全取代這里的并發(fā)行為性語句來實現(xiàn)其并發(fā)性,所以說,并發(fā)行為性語句可以認為是進程的縮寫,但又隱含著RTL結(jié)構(gòu)描述。舉例之二:數(shù)據(jù)流風格構(gòu)造體
采用同或門設計
architectureASJL2ofCOMPAREis
begin
C<=not(AxorB)after1ns;--括弧中xor要先執(zhí)行(數(shù)據(jù)流順序約定)
endASJL2;
后面的結(jié)構(gòu)風格中將要用到許多底層元件,都可以用這種數(shù)據(jù)流風格設計出來。為此,以底層元件異或門XR2和反相器INV的設計為例加以解釋。
底層元件異或門XR2設計:
entityXR2is
generic(m:time:=1.0ns);
port(X,Y:inbit;
Z:outbit);
endXR2;
architectureDATAFLOWofXR2is
begin
Z<=XxorYafterm;
endDATAFLOW;
底層元件反相器INV設計:
INVport(X:inbit;Z:outbit)請讀者參照上例自己編寫。
采用數(shù)據(jù)流風格進行設計的核心問題是更直接的(信號)激勵—響應模型,分清每個信號擔負的激勵和響應角色;注意事件間的并發(fā)性和連環(huán)激勵的特點。
5.結(jié)構(gòu)風格構(gòu)造體
舉例之三:結(jié)構(gòu)風格構(gòu)造體
采用元件設計
architectureAJG3ofCOMPAREis
signalI:bit;
componentXR2port(X,Y:inbit;Z:outbit);
endcomponent;
componentINVport(X:inbit;Z:outbit);
endcomponent;
begin
U0:XR2portmap(A,B,I);
U1:INVportmap(I,C);
endAJG3;
其原理方框圖如圖6-4所示。圖6-4結(jié)構(gòu)描述中的元件和信號采用結(jié)構(gòu)風格進行設計的核心問題是元件、端口和信號,這與電路的結(jié)構(gòu)網(wǎng)表直接對應。設計時以元件為紐帶,每個元件都有端口,而端口本身也是信號,同時它還要與其他的信號相連接,這就是網(wǎng)表概念的真諦——元件及其網(wǎng)絡連接。
上例中的元件有異或門XR2、反相器INV。信號線I將兩元件相連,在構(gòu)造體內(nèi)被說明為局部信號。此處構(gòu)造體中的元件說明也可以挪到集合包中,到這里再用Use語句打開。上面實例生成中的portmap指出端口映射關系。根據(jù)句法約定,這里還隱含地指出XR2、INV的設計實體放在庫WORK中。6.2.5配置說明
1.設計層次
如果XR2、INV編譯入庫,則它們在設計COMPARE時可以被當作元件使用。依此類推,在COMPARE的設計完成之后,COMPARE又可以被當作元件用于更大規(guī)模的后續(xù)ALU的設計之中。舉例如下:entityALUis
port(opcode:...)
endALU;
architecturefirstofALUis
componentCOMPARE
port(a,b:inbit;
c:outbit);
endcomponent;
...
forU0:COMPAREuseentitywork.COMPARE(AJG3);
begin
U0:COMPAREportmap(s,d,q);
...
endfirst;上述component部分為元件COMPARE的元件說明,實例生成U0時,用(s,d,q)對端口a、b、c進行信號的port映射。
理解VHDL的設計層次(DesignHierarchy)是正確使用配置手段的基礎。這里,我們用兩種表達方式來表示設計的層次關系。
(1)用樹狀結(jié)構(gòu)圖示法給出構(gòu)造體和元件間的層次。如圖6-5的樹狀結(jié)構(gòu),同時給出并列的構(gòu)造體及其中合成用的不同元件。圖6-5構(gòu)造體及元件的樹狀結(jié)構(gòu)圖圖6-5中第二行的各構(gòu)造體之間是同質(zhì)可替代的并列候選候補關系;第三行的各元件(與實體號對應)之間是不可替代的有機異質(zhì)合成關系;第四行又是不同的構(gòu)造體;第五行又是元件……。記住,VHDL中的多層次主要是結(jié)構(gòu)關系的描述!
(2)用括弧嵌套給出元件間的層次。如:
{CPU(ALU(COPMARE<XR2,INV>))
注意,這里每一層次的元件實體號ALU、COMPARE、XR2、INV都可以對應多個構(gòu)造體。
2.配置格式
在VHDL中,用配置說明(ConfigurationDeclaration)來選定不同的硬件設計組合。配置說明又被簡稱為配置(Configuration)。實現(xiàn)選配的前提是一個實體號可能對應有幾個構(gòu)造體,配置這一手段被用來搭配選取不同的構(gòu)造體以構(gòu)成不同的設計。一般,顯式配置總是從某一個庫中為某個實體號選配一個特定的構(gòu)造體。配置的句法格式為設同一實體號COMPARE有三個不同構(gòu)造體AXW1、ASJL2、AJG3,則配置可以選取其中之一,比如COMPARE(ASJL2)。
多個構(gòu)造體可以反映算法的不同或者是抽象的層次不同。例如:
configurationFast_OneofALUis
Forfirst --為ALU選定構(gòu)造體first,并進一步配置
forU0:COMPAREuseentityWORK.COMPARE
(ASJL2);
endfor; --對其中U0的COMPARE進行配置
EndFor;
endFast_One;上例給出實體號ALU的一種配置,取名為FAST_ONE。也可以說,本配置為實體號ALU配置了構(gòu)造體first,又為其中U0的元件COMPARE配置了ASJL2這一構(gòu)造體。
這里的Use子句,它識別庫的層次為:某個庫→某個實體號(元件,例如COMPARE)→某個對應的構(gòu)造體。
配置主要用來進行版本控制。上例中通過配置,獲得設計單元ALU的新版本FAST_ONE。上例為顯式配置,VHDL規(guī)定的默認配置為最新編譯的構(gòu)造體。例如,如果在設計中要配置74系列,首要的是建造VHDL的各種元件庫,包括S、LS等。配置主要用于結(jié)構(gòu)描述風格的設計當中!6.2.6課程設計與練習
1.課堂練習題之A
設計一個一位全加器Full_adder.vhd,其模型框圖如圖6-6。圖6-6全加器模型框圖entityFull_adderis
generic(ts:time:=1.2ns;tc:time:=1.0ns);
port(x,y,Cin:inbit;Cout,Sum:outbit);
endFull_adder;
architectureBehaveofFull_adderis
begin
Sum<=xxoryxorCinafterts;
Cout<=(xandy)or(xandCin)or(yandCin)
aftertc;
end;附:一位全加器仿真批處理命令文件Full_adder.do。
wave/*
force/x10,025-r50
force/y10,050,1100,0300
force/Cin10,0200,1250,0350,1400,0600
run3000
viewwaveform
2.課堂練習題之B
用練習題之A的全加器做為元件,設計八位脈動進位加法器Adder8.vhd。八位加法器的外部接口模型框圖如圖6-7所示。圖6-7一般八位加法器模型entityAdder8is
port(A,B:inbit_vector(7downto0);
Cin:inbit;Cout:outbit;
Sum:outbit_vector(7downto0));
endAdder8;
architecturestructureofAdder8is
componentFull_adder
port(x,y,Cin:inbit;
Cout,Sum:outbit);
endcomponent;
signalC:bit_vector(7downto0);
begin
stages:foriin7downto0generateLowbit:ifi=0generate
Fa:Full_adderportmap(A(0),B(0),Cin,C(0),Sum(0));
endgenerate;
Otherbits:ifi/=0generate
Fa:Full_adderportmap(A(i),B(i),C(i-1),C(i),Sum(i));
endgenerate;
endgenerate;
Cout<=C(7);
end;附:八位脈動進位加法器命令文件Adder8.do。
wave/*
force/A16#340,16#4625-r50
force/B16#400,16#2050,16#30100,16#44300
force/Cin10,0200,1250,0350,1400,0600
run3000
viewwaveform
八位加法器脈動進位鏈如圖6-8所示。圖6-8八位加法器脈動進位鏈
6.3VHDL語言基礎知識
VHDL有以下幾種基本數(shù)據(jù)類型(參見附錄1)。
1.標量(Scalar)類型
標量數(shù)據(jù)是一個集合的概念。標量型集合中的數(shù)據(jù),只具有單一值,該值無法再分解,包括實數(shù)、整數(shù)等。
2.復合(Composite)類型
復合型數(shù)據(jù)是由標量組成的數(shù)組或記錄。這里的一個數(shù)據(jù)可以含有多個標量值。
3.尋址(Access)類型
通過分配符(allocator)返回存取值來實現(xiàn)尋址。實際中這一類很少用。
4.文件(File)類型
VHDL中的文件存放在主機的系統(tǒng)當中,文件類型實質(zhì)是定義出文件中所包含值的類型。
此外,還有子類型應歸為相應數(shù)據(jù)類型的附屬類型。下面,我們主要介紹標量型和復合型兩種。
VHDL是強類型語言:整數(shù)1、實數(shù)1.0、位?'1'?的概念不一樣;40bit與8bit的總線不能相連;字符也不能相加等等。編譯器中的分析器將對設計文件進行數(shù)據(jù)類型分析,指出設計中的語法錯誤信息。6.3.1標量類型數(shù)據(jù)
在定義數(shù)據(jù)類型時,VHDL用不同的文字(Literal)來作為數(shù)據(jù)的標識符號(非操作符)。下面給出各種標量類型數(shù)據(jù)(ScalarType)的定義并加以解釋。
1.字符(Character)
最基本的標量類型是字符(Character),它是一種預定義枚舉量。表示字符時要用單引號括起來,例如?'x'。只在這種表示字符的情況下,VHDL才對大寫小寫加以區(qū)別,這時?'a'?不同于'A'。字符可以是a~z中的字母;0~9中的數(shù)字;空白;特殊字符,如?'、$、@、%等,詳見IEEE-1076的集合包STANDARD。
2.Bit量(Bit)
Bit量(Bit)也是一種預定義枚舉量,包括?‘0’、‘1’?兩個數(shù)據(jù)。顯式說明為bit‘(’1‘)。
它可以用來描述總線中的一位,其初值為?’0‘。
Bit量可以組成復合型的位矢量,例如,用雙引號括起來的?"001100"?可以稱作是位矢量的一個聚集(Aggregate)或?qū)崿F(xiàn)樣本。
注:X代表十六進制,O代表八進制,B代表二進制。這只是書寫形式而已,可以邏輯運算。
3.布爾量(Boolean)
布爾量(Boolean)包括True(真)和False(假)兩個數(shù)據(jù),它是一個預定義二值枚舉量。
它可以在IF語句中被測試,關系操作?=、<=、>=、/=?都將產(chǎn)生布爾量結(jié)果。
信號或變量可以定義為布爾量,它與Bit量無關,有的EDA工具可以轉(zhuǎn)換。
4.一般枚舉量(Enumeration)
把集合中的所有數(shù)據(jù)量窮舉出來,定義出一種新的數(shù)據(jù)類型,這種量稱之為枚舉量。前面的字符、Bit量(位)、布爾量均為一般枚舉量(EnumeratedType)的某種特例,稱之為預定義枚舉量類型,在IEEE-1076的STANDARD集合包中有完整的介紹。枚舉文字由字符或標識符組成。字符、標識符都是符號,不是數(shù)值。一般枚舉類型需要枚舉說明,其句法格式為
typeidentifieris(enumeration_literal{,enumeration_literal});
例如:
typeTLLis(‘0’,‘1’);--字符
typeFLLis(‘x’,‘0’,‘1’,‘z’);
typetoolsis(hammer,saw,drill,wrench);--標識符
5.整數(shù)量(Integer)
預定義整數(shù)量(Integer)與數(shù)學中的定義相同。在大多數(shù)VHDL實現(xiàn)中,機器內(nèi)部是用32位二進制數(shù)來表示十進制數(shù),可以表示的數(shù)值區(qū)間為
-(2**31-1)~(2**31-1)=-2147483647~+2147483647
在實際設計中直接書寫為十進制數(shù),例如:+1,862,
-257,+15,…。
整數(shù)不同于位矢量,它不能按位去訪問;表示整數(shù)不用加雙引號。不能進行邏輯運算;但可以進行算術運算。需要進行按位操作時,先要進行類型轉(zhuǎn)換。自然數(shù)和正整數(shù)都是整數(shù)的子集。整數(shù)類型說明舉例:
typeword_indexisrange31downto0;
6.實數(shù)量(Real)
在大多數(shù)VHDL實現(xiàn)中,實數(shù)量(Real)的區(qū)間為(-1.0E+38)~(+1.0E+38)。實數(shù)量又稱為浮點數(shù)(FloatingPointType)。
預定義實數(shù)量可以有正數(shù)、負數(shù)、小數(shù)點及指數(shù)表示,例如:-1.0,+2.35,36.0,-1.0E+28。
實數(shù)量可進行四則運算,用于算法研究或方案實驗比較方便。但是在算法研究和設計仿真完成之后,正式綜合之前需要再改用定點進行四則運算。注:VHDL句法中也采用了巴科斯范式(BNF-BackusNaurForm,一種用來定義程序語言句法的事實上的標準)表示法。以數(shù)的表示為例,可以選擇二進制到十六進制中的一種。在各種基中,十進制是默認的,表示形式上可以省略。其余,還有2、4、8、16等。每種進制對應一個基,例如十進制的基就是10,代表一位與附近的一位是10倍的關系,二進制的基就是2。注意,這里表示不同的基本身是用十進制表示的。整數(shù)和實數(shù)的BNF表示如下:
以基表示的整數(shù)、實數(shù)::=基#基于基的整數(shù)[.基于基的整數(shù)]#[指數(shù)]
上式中還有指數(shù)。指數(shù)部分可以繼續(xù)展開為
指數(shù)::=E[+]整數(shù)|E-整數(shù)
其中的整數(shù)用十進制表示。
例如:
整數(shù)255可以表示為2#1111--_1111#或者16#FF#。這里數(shù)字間所加的下劃線“_”是為了閱讀的方便。
實數(shù)4095.0可以表示為16#F.FF#E+2或者2#1.1111_1111_111#E11。整數(shù)和實數(shù)之間可以用類型標記的方法進行轉(zhuǎn)換。例如:
variablei:integer;
variabler:real;
則下列的賦值語句可以實現(xiàn)轉(zhuǎn)換:
i:=integer(r);
r:=real(i);
7.物理量(Physical)
物理量(Physical)是某一種物理測量值的度量,它始終是某一物理單位量的整數(shù)倍。例如,預定義時間物理量:
1sec,60sec,1min
時間單位有fs、ps、ns、us、ms、sec、min、h。例如:
10ns,100μs,6.3ns
其中10是整數(shù);6.3是實數(shù)。在大多數(shù)VHDL實現(xiàn)中,時間的區(qū)間為
-(2**31-1)~(2**31-1)=-2147483647~+2147483647
除了時間物理量之外,允許自定義其他物理量,例如電流。
實數(shù)、整數(shù)、物理量又統(tǒng)稱為數(shù)值型,它們都可以進行四則運算。
8.區(qū)間約束(RangeConstraint)
采用VHDL進行設計時,經(jīng)常需要對作用范圍進行限定,這就是區(qū)間約束(RangeConstraint)。
其句法為
rangelow_valtohigh_val或高值downto低值
例如:
integerrange10downto1
realrange1.0to10.0若對整數(shù)integer的區(qū)間需要推遲到以后再確定,則采用符號<>,寫作如下形式:
integerrange<>
備注:這里主要針對整數(shù)、實數(shù)這種開放式結(jié)構(gòu)型數(shù)據(jù)而言。所謂開放,就是指這里事先對區(qū)間沒有約束,允許以后重新定義。
9.子類型(Subtype)說明
子類型(Subtype)說明給出某數(shù)據(jù)類型的一個子集,并再起一個名字。例如:
subtypeRegisterisbit_vector(7downto0);6.3.2復合類型數(shù)據(jù)
復合(Composite)類型數(shù)據(jù)包括數(shù)組(矢量,Array——同種復合型)以及記錄(Record——異種復合型)兩種。
1.數(shù)組(Array)
數(shù)組(Array)可以組成線性空間,一維、二維或多維,位矢量就是一維數(shù)組。可以定義實數(shù)數(shù)組和整數(shù)數(shù)組;也可以有約束(給出定界)或未約束(區(qū)間及走向待定<>)。
數(shù)組說明用type語句,句法為
typearray_nameisarray[index_constraint]ofelement_type;
上述index_constraint就是對下標的約束。例如:
typeword8isarray(1to8)ofbit;
typewordisarray(integerrange<>)ofbit;
說明之后就可以用于變量或信號說明。例如:
variablemystuff:word8;
variableyourstuff:word(1to10);
前述的<>表示推遲約束,推遲到word(1to10)才說明。
內(nèi)建的STANDARD中預定義未約束數(shù)組位矢量,將來由用戶再給出約束:
typebit_vectorisarray(naturalrange<>)ofbit;
當用戶使用時,則可以寫成:
variablec:bit_vector(0to3);
比如,c:=“1010”;(此時c(1)=‘0’)
將上述數(shù)組用于描述總線很方便。字符可以組成一維數(shù)組,稱之為字符數(shù)組,是復合型數(shù)據(jù)的一種。使用較多的字符串及標識符,可以認為是一維字符數(shù)組某一個特定的實現(xiàn)樣本,在此做進一步注釋:
(1)字符數(shù)組的實現(xiàn)樣本稱為字符串,可用雙引號括起來。例如:“holdtimeoutofrange”。一般的字符串屬于復合型數(shù)據(jù)中一維數(shù)組的一種實現(xiàn)樣本。
(2)標識符是為了設計方便設計師自編的一種特殊專用字符串,它被作為VHDL中源設計單元或客體等項目命名用的符號。其編制規(guī)定如下:①標識符中第一個字符為字母。
②其余字符可以是字母或數(shù)字。
③標識符中可以加有下劃線,但不能有兩個連著的下劃線。
④標識符中不能有空格。
⑤?VHDL對標識符不區(qū)分大小寫。
⑥標識符不加引號。
2.記錄(Record)
對于記錄(Record)的概念,下面以記錄“指令”為例加以說明。
枚舉型指令碼∪整數(shù)地址→其并集定義一個記錄“指令”;而指令又可以用來定義“寄存器組”。例如:
typeOpcodeis--Opcode(枚舉量)和Address(整數(shù))是異種標量
(add,add_with_carry,......);
typeAddressisrange16#0000#to16#FFFF#;這兩個type語句用來先說明所用標量數(shù)據(jù)類型。
typeInstructionis
record--Instruction是復合型(異種數(shù)據(jù))
Opcode_field:Opcode;
Operand_1:Address;
Operand_2:Address;
endrecord;6.3.3客體
1.簡介
在VHDL中,凡是可以擁有數(shù)據(jù)的某載體就稱之為客體(Object,對象)。它所荷載的數(shù)據(jù)類型決定了該客體所能參與的運算??腕w主要有三種:信號(Signal)、變量(Variable)、常數(shù)(Constant)。
(1)信號——按模擬時間對信號進行賦值,它對應于硬件互連線,需要到某一時刻才獲得真實的當前值。
(2)常數(shù)——屬于一次性賦值,例如電源、地。
(3)變量——可以立即獲得真實當前值,與對應硬件不直接對應,是一種局部量(也可以不斷變化)。
其他從屬的客體有:端口信號、傳遞環(huán)境信息的類屬(比較特殊的常數(shù))、參數(shù)(在子程序中說明,其中函數(shù)中的參數(shù)是常數(shù),過程(Procedure)中的參數(shù)可以是任一客體等)、下標(循環(huán)或生成語句中的次數(shù))等。
2.客體類型說明
在使用客體之前,對于客體類型要先行說明,包括:
1)常數(shù)說明(ConstantDeclaration)
其句法為
constantidentifier:type_indication[:=expression];
名稱類型數(shù)值例如:
constantVCC:real:=4.5;
名稱類型數(shù)值
其中constant為保留字。
它可以在實體號、集合包或子程序中說明,原則是誰用誰說明,即在說明時要考慮常數(shù)的使用場所。
2)變量說明
變量用于賦給進程中變化的值,賦值立即生效。
變量使用前必須先說明,其句法為
variableidentifier:type_indication[constraint][:=expression];
例如:
variableCOUNT:integerrange0to99:=0;
名稱類型區(qū)間初值
變量可以是標量或數(shù)組,只能在進程或子程序中加以說明。
在模擬時作為局部數(shù)據(jù)記憶單元對待;變量不能在進程間通信。
3)信號說明
信號是物理硬件互連線或總線的抽象,可以在實體號、構(gòu)造體、集合包中說明,可用于全局通信。
信號說明的句法為
signalidentifier:type_indication[constraint][:=expression];
例如:
signalS:bit:=‘1’;
名稱類型初值
signalxyz:bit;
xyz<='1'after5ns;
其中<=表示是信號賦值。
(1)在進程中不能說明信號,在進程中可以使用信號。
(2)進程中的信號賦值要等待WAIT的執(zhí)行。
當行為風格用到信號概念時強調(diào)的是變化,當結(jié)構(gòu)風格使用信號時強調(diào)的是固定的互連關系。6.3.4操作符與表達式
1.簡介
由操作符、操作數(shù)組成的表達式是實現(xiàn)數(shù)據(jù)變換的武器和工具。
(1)表達式(Expression)——操作符、操作數(shù)組成的數(shù)學式,定義操作處理,例如“A+B”。
(2)操作符(Operator)——指定對操作數(shù)所執(zhí)行的運算,例如式中的“+”。
(3)操作數(shù)(Operand)——被運算的客體數(shù)據(jù),其類型與操作符的要求要一致,例如式中的“A”和“B”。
2.操作符分類(黑體表示的為1993版新增)
(1)邏輯(Logical)——not(一元),and,or,nand,nor,xor,xnor。
(2)關系(Relational)——=,/=,<,<=,>,>=。
(3)移位(Shift)——SLL,SLA,SRL,SRA,ROL,ROR。
(4)算術(Arithmetic)——+,-,abs(一元正、負、絕對值);
+,-(二元);
*,/;
mod(取模),rem(取余),**(指數(shù))。
(5)并置(Concatenation)——&。
當然,從原理上講,算術運算也可以寫在數(shù)據(jù)流風格語句中。但是,在綜合時,這樣的語句離RTL的門級實現(xiàn)可能要更遠一點。
3.操作符解釋
1993年版本VHDL的優(yōu)先級如下(由低到高,黑體表示的為1993版新增):
and,or,nand,nor,xor,xnor;
=,/=,<,<=,>,>=;
SLL,SLA,SRL,SRA,ROL,ROR;
+,-(二元);
+,-(一元);
*,/,mod,rem;
NOT,**,ABS;
&。操作符分為五大級,算術又分四小級,優(yōu)先級由低到高(兩個版本的標準略有不同)。同一級內(nèi)優(yōu)先級相同;可以采用括號來確定優(yōu)先級。二元操作時要求數(shù)據(jù)類型應該相同,它們對數(shù)據(jù)的要求如下:
(1)邏輯——Bit,boolean,及其一維數(shù)組;二元邏輯操作除XOR外都是短路操作。對所謂短路概念,這里需要做一解釋。以或運算“or”為例,只要操作數(shù)有一個1,結(jié)果即可確定。
(2)關系——=,/=的操作數(shù)可以是任一類型;其余關系符的操作數(shù)應是標量,包括枚舉量和整數(shù)量,或一維離散數(shù)組。運算結(jié)果總為布爾量。
(3)移位——SLL,SLA,SRL,SRA,ROL,ROR。其中S…為左右、算術邏輯移,RO…為循環(huán)左右移。
(4)算術——只可以是數(shù)值型(整數(shù)、實數(shù)、物理量)。其中:指數(shù)操作的左操作數(shù)為整數(shù)、實數(shù);右操作數(shù)為整數(shù)。除此之外的所有二元操作其操作數(shù)都要相同。
(5)并置——操作數(shù)是一維數(shù)組或其元素。例如:
constants1:string:=“ABC”;
constants2:string:=“DEF”;
constants3:string:=s1&s2;
其結(jié)果將生成?"ABCDEF"。
4.補充解釋
1)取余(AREMB)定義
余數(shù)應能滿足
AREMB=A-(A/B)*B
其(AREMB)的符號與A相同(節(jié)“余”歸己),其絕對值小于B的絕對值。
例如:
7REM5=2,7REM(-5)=2
2)取模(AMODB)定義
存在某一整數(shù)N,使得
AMODB=A-B*N
其(AMODB)的符號與B相同,其絕對值小于B的絕對值。
例如:
7MOD5=2,7MOD(-5)=-3(可以驗證一下!)6.3.5預定義屬性
預定義屬性(Attribute)主要包括類型、子類型、子程序、客體的屬性。元件、語句標號也可以有屬性。使用屬性的目的通常是按約定返回并獲取有關數(shù)據(jù)。
(1)標量類型屬性:LEFT,RIGHT,LOW,HIGH,Succ,Pred,Leftof,Rightof,LENGTH,Range返回值等;
(2)函數(shù)類屬性:可劃分為類型屬性、數(shù)組屬性和信號屬性三種。
(3)信號屬性:四種主要的(其中?‘Event很有用)信號屬性如下。
S’Active
S‘QuietS’Event
S‘Stable
有事務靜止有事件穩(wěn)定任何一次信號賦值,都將產(chǎn)生一個事務Transcation。這時的S‘Transcation是一個Bit量信號,在每一個模擬循環(huán)后它都將翻轉(zhuǎn)一次。
如果這次信號賦值使信號值發(fā)生變化,那么這又是一次事件,S’Event為真。
其中S'Event、S'Active屬于函數(shù)信號屬性,可用于函數(shù)或過程中。其他的S'Quiet、S'Stable、S'Traqnscation屬于信號類屬性,不能用于子程序內(nèi)部。6.3.6課程設計與練習
全部采用VHDL設計,編制一位全加器、激勵器及測試平臺的完整示例。圖6-9給出了全加器的結(jié)構(gòu)。圖6-9由半加器構(gòu)成全加器
(1)由半加器構(gòu)成全加器的原始設計(OriginalDesign)——
addw1.vhd。
Libraryieee;
Useieee.std_logic_1164.all;
Entityfull_adderis
Generic(tpd:time:=10ns);
Port(x,y,c_in:instd_logic;
sum,c_out:outstd_logic);
Endfull_adder;
Architecturedataflow_viewoffull_adderis
Signals:std_logic;
Begin
s<=xxoryaftertpd;
sum<=sxorc_inaftertpd;
c_out<=(xandy)or(sandc_in)after2*tpd;--sandc_in等效于
Enddataflow_view;--(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 46848.4-2025技術產(chǎn)品文件產(chǎn)品設計數(shù)據(jù)管理要求第4部分:權限管理
- 貨車司機安全生產(chǎn)制度
- 行政復議案件評查制度
- 落實信息工作相關制度
- 雷電預防科普動態(tài)
- 2026廣東佛山順德區(qū)容桂幸福陳占梅小學招聘語文數(shù)學臨聘教師招聘2人備考考試題庫附答案解析
- 2026甘肅嘉峪關市文化館開發(fā)公益性崗位招聘2人備考考試題庫附答案解析
- 2026四川涼山州金陽縣公安局招聘35人備考考試題庫附答案解析
- 2026山東事業(yè)單位統(tǒng)考煙臺萊陽市招聘138人參考考試試題附答案解析
- JIS B 9650-2-2011 食品加工機械安全及衛(wèi)生通.用設計準則.第2部分-衛(wèi)生通.用設計準則
- 交通事故培訓
- 2026年醫(yī)保藥品目錄調(diào)整
- 2026四川雅安市漢源縣審計局招聘編外專業(yè)技術人員2人筆試備考試題及答案解析
- 食品銷售業(yè)務員培訓課件
- 2026年學校意識形態(tài)工作計劃
- 2025年銀行信息科技崗筆試真題及答案
- 山西電化學儲能項目建議書
- GB/T 46392-2025縣域無障礙環(huán)境建設評價規(guī)范
- DB32-T 4285-2022 預應力混凝土空心方樁基礎技術規(guī)程
- 刺殺操課件教學課件
- 福建省廈門市雙十中學2026屆數(shù)學九年級第一學期期末復習檢測模擬試題含解析
評論
0/150
提交評論