




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)字邏輯1n硬件描述語言(hardware description language,hdl)是一種用于數(shù)字系統(tǒng)設(shè)計(jì)的高級(jí)語言,具有很強(qiáng)的電路描述和建模能力,大大簡化了硬件設(shè)計(jì)任務(wù),提高設(shè)計(jì)的效率和可靠性。以hdl語言設(shè)計(jì),以cpld/fpga為硬件實(shí)現(xiàn)載體,eda軟件為開發(fā)環(huán)境的現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)方法已經(jīng)被廣泛采用。n本章將介紹常用硬件描述語言vhdl的基本知識(shí),包括eda、vhdl簡介,基于vhdl的數(shù)字系統(tǒng)設(shè)計(jì)流程;vhdl語言的基本結(jié)構(gòu),數(shù)據(jù)對(duì)象、數(shù)據(jù)類型、運(yùn)算符和表達(dá)式;順序語句,并行語句;vhdl庫和程序包等。 數(shù)字邏輯2 數(shù)字邏輯3數(shù)字邏輯4188)(nmiiioo數(shù)字邏輯5n硬件
2、描述語言(硬件描述語言(hdl: hardware description language)是一種)是一種用形式化方法來描述數(shù)字電路和設(shè)計(jì)數(shù)字邏輯系統(tǒng)的語言,是用形式化方法來描述數(shù)字電路和設(shè)計(jì)數(shù)字邏輯系統(tǒng)的語言,是eda技術(shù)的重要組成部分。技術(shù)的重要組成部分。n20世紀(jì)世紀(jì)70年代末和年代末和80年代初,面對(duì)各個(gè)電子系統(tǒng)承包商技術(shù)線路不年代初,面對(duì)各個(gè)電子系統(tǒng)承包商技術(shù)線路不一致,使得產(chǎn)品不兼容,采用各自的設(shè)計(jì)語言,信息交換和維護(hù)困一致,使得產(chǎn)品不兼容,采用各自的設(shè)計(jì)語言,信息交換和維護(hù)困難,設(shè)計(jì)不能重復(fù)利用等情況,由美國國防部牽頭,來自難,設(shè)計(jì)不能重復(fù)利用等情況,由美國國防部牽頭,來自ib
3、m、texas instruments和和intermetrics公司的專家組成公司的專家組成vhdl(very high speed integrated circuit hdl)工作組,提出了新的硬件描)工作組,提出了新的硬件描述語言版本和開發(fā)環(huán)境。述語言版本和開發(fā)環(huán)境。ieee標(biāo)準(zhǔn)化組織進(jìn)一步發(fā)展,經(jīng)過反復(fù)的標(biāo)準(zhǔn)化組織進(jìn)一步發(fā)展,經(jīng)過反復(fù)的修改與擴(kuò)充,在修改與擴(kuò)充,在1987年宣布了年宣布了vhdl語言標(biāo)準(zhǔn)版本,即語言標(biāo)準(zhǔn)版本,即ieee std 1076-1987標(biāo)準(zhǔn)。標(biāo)準(zhǔn)。1993年,年,vhdl-87標(biāo)準(zhǔn)被重新修訂,更新為標(biāo)準(zhǔn)被重新修訂,更新為ieee std 1076-1993標(biāo)
4、準(zhǔn)?,F(xiàn)在公布的最新版本是標(biāo)準(zhǔn)。現(xiàn)在公布的最新版本是ieee std 1076-2002。數(shù)字邏輯6數(shù)字邏輯7以cpld/fpga為硬件載體,采用vhdl語言的eda軟件進(jìn)行數(shù)字系統(tǒng)設(shè)計(jì)的的完整流程包括設(shè)計(jì)方案制定、設(shè)計(jì)輸入、邏輯綜合、布局布線、仿真測試、編程下載等。其他硬件描述語言的設(shè)計(jì)過程也是類似。設(shè)計(jì)流程圖如圖3-1所示。圖3-1 設(shè)計(jì)流程圖數(shù)字邏輯8n采用自頂向下、模塊化設(shè)計(jì)的設(shè)計(jì)方式,確定整個(gè)系統(tǒng)的設(shè)計(jì)方案,劃分系統(tǒng)的各個(gè)邏輯模塊,確定各個(gè)模塊的功能,以及采用的設(shè)計(jì)方式。n利用eda軟件中的文本編輯器將系統(tǒng)功能或結(jié)構(gòu)用vhdl語言描述出來,保存問vhdl文件格式,為后面的綜合優(yōu)化做準(zhǔn)備
5、。數(shù)字邏輯9n現(xiàn)代大多數(shù)eda軟件除了可以使用hdl語言設(shè)計(jì)輸入以外,通常還支持類似傳統(tǒng)電子系統(tǒng)設(shè)計(jì)的原理圖輸入方式。原理圖輸入方式中使用的邏輯模塊或符號(hào),可以使用eda軟件庫中預(yù)制的功能模塊,也可以使用vhdl語言設(shè)計(jì)的模塊或原件。實(shí)際上,圖形輸入方式除了原理圖輸入外還有狀態(tài)圖輸入和波形輸入等常用方式。n采用模塊化設(shè)計(jì)方式,完成各個(gè)功能模塊設(shè)計(jì)后,將各個(gè)模塊組合在一起,即完成對(duì)整個(gè)系統(tǒng)的設(shè)計(jì)。數(shù)字邏輯10數(shù)字邏輯11數(shù)字邏輯12n仿真是仿真是eda設(shè)計(jì)過程中的重要步驟,通常設(shè)計(jì)過程中的重要步驟,通常eda軟件中會(huì)軟件中會(huì)提供仿真工具,也可以使用第三方的專業(yè)仿真工具。根提供仿真工具,也可以使用
6、第三方的專業(yè)仿真工具。根據(jù)不同的實(shí)施階段,分為功能仿真和時(shí)序仿真:據(jù)不同的實(shí)施階段,分為功能仿真和時(shí)序仿真:n功能仿真:在采用不同方式完成設(shè)計(jì)輸入后,即可進(jìn)行功能仿真:在采用不同方式完成設(shè)計(jì)輸入后,即可進(jìn)行邏輯功能的仿真測試,以了解功能是否滿足設(shè)計(jì)要求。邏輯功能的仿真測試,以了解功能是否滿足設(shè)計(jì)要求。這個(gè)階段的仿真測試不涉及具體的硬件結(jié)構(gòu)、特性。這個(gè)階段的仿真測試不涉及具體的硬件結(jié)構(gòu)、特性。n時(shí)序仿真:又稱后仿真,是最接近硬件真實(shí)運(yùn)行的仿真。時(shí)序仿真:又稱后仿真,是最接近硬件真實(shí)運(yùn)行的仿真。利用布局布線后生成的包含硬件特性參數(shù)的仿真文件,利用布局布線后生成的包含硬件特性參數(shù)的仿真文件,對(duì)系統(tǒng)和
7、各個(gè)模塊進(jìn)行時(shí)序仿真,分析其時(shí)序關(guān)系和延對(duì)系統(tǒng)和各個(gè)模塊進(jìn)行時(shí)序仿真,分析其時(shí)序關(guān)系和延遲信息。遲信息。數(shù)字邏輯13n將適配后生成的下載或配置文件,通過編程器或?qū)⑦m配后生成的下載或配置文件,通過編程器或下載線纜下載到目標(biāo)器件中。一般將對(duì)下載線纜下載到目標(biāo)器件中。一般將對(duì)cpld的的下載稱為編程,對(duì)下載稱為編程,對(duì)fpga的下載稱為配置。最后的下載稱為配置。最后將整個(gè)系統(tǒng)進(jìn)行統(tǒng)一的測試,驗(yàn)證設(shè)計(jì)在目標(biāo)系將整個(gè)系統(tǒng)進(jìn)行統(tǒng)一的測試,驗(yàn)證設(shè)計(jì)在目標(biāo)系統(tǒng)上的實(shí)際工作情況。統(tǒng)上的實(shí)際工作情況。數(shù)字邏輯14nvhdl程序是由庫(1ibrary)、程序包(package)、實(shí)體(entity declarat
8、ion)、結(jié)構(gòu)體(architecture body)、配置(configuration)五部分組成。設(shè)計(jì)實(shí)體結(jié)構(gòu)結(jié)構(gòu)圖如圖3-2所示,其中設(shè)計(jì)實(shí)體必須有實(shí)體和結(jié)構(gòu)體,其它部分根據(jù)設(shè)計(jì)需要來添加。圖3-2 設(shè)計(jì)實(shí)體結(jié)構(gòu)圖數(shù)字邏輯15n實(shí)體是實(shí)體是vhdl程序的基本單元,類似原理圖設(shè)計(jì)程序的基本單元,類似原理圖設(shè)計(jì)中的而一個(gè)元件符號(hào)。其中實(shí)體說明部分規(guī)定了中的而一個(gè)元件符號(hào)。其中實(shí)體說明部分規(guī)定了其與外界通信的引腳或接口信號(hào)。在實(shí)體內(nèi)部有其與外界通信的引腳或接口信號(hào)。在實(shí)體內(nèi)部有一個(gè)或多個(gè)結(jié)構(gòu)體,用來描述設(shè)計(jì)的邏輯結(jié)構(gòu)或一個(gè)或多個(gè)結(jié)構(gòu)體,用來描述設(shè)計(jì)的邏輯結(jié)構(gòu)或功能。功能。數(shù)字邏輯16n【例【例
9、3-1】 vhdl程序基本結(jié)構(gòu)程序基本結(jié)構(gòu)library ieee; 庫說明部分庫說明部分use ieee. .std_logic_1164. .all; 程序程序包說明部分包說明部分entity nand2 is 實(shí)體說明部分實(shí)體說明部分port ( a,b:in std_logic; y:out std_logic);end nand2;數(shù)字邏輯17architecture arch_name of nand2 is 結(jié)構(gòu)體描述部分beginprocess (a , b) variable comb : std_logic_vector ( 1 downto 0 ) ; begin com
10、b : = a & b ; case comb is when 00 = y y y y y = 0 ; end case ; end process ;end arch_name ;數(shù)字邏輯18n實(shí)體說明部分的一般結(jié)構(gòu):nentity 實(shí)體名 isngeneric (類屬表);nport (端口表);nend entity 實(shí)體名;數(shù)字邏輯19數(shù)字邏輯20數(shù)字邏輯21數(shù)字邏輯22數(shù)字邏輯23數(shù)字邏輯24數(shù)字邏輯25數(shù)字邏輯26 數(shù)字邏輯27圖3-3 半加器及其邏輯電路數(shù)字邏輯28narchitecture alg_ha of half_adder isnbeginnprocess(a
11、,b)n beginn if a = 0 and b = 0 thenn c = 0;ns = 0;n elsif a = 1 and b= 1 thenn c = 1;ns = 0;n elsen c = 0;ns = 1;n end if;nend processnend alg_ha;數(shù)字邏輯29數(shù)字邏輯30數(shù)字邏輯31n結(jié)構(gòu)化描述給出了實(shí)體內(nèi)部結(jié)構(gòu)組織,所包含的模塊或元件及其互連關(guān)系。n結(jié)構(gòu)化描述通常用于層次化結(jié)構(gòu)設(shè)計(jì)。對(duì)于一個(gè)復(fù)雜的電子系統(tǒng),將其分解成許多子系統(tǒng),子系統(tǒng)再分解成各個(gè)功能模塊。多層次設(shè)計(jì)的每個(gè)層次都可以作為一個(gè)元件,再構(gòu)成一個(gè)模塊或構(gòu)成一個(gè)系統(tǒng),每個(gè)元件分別仿真,然后再
12、整體調(diào)試。 n圖3-3(a)所示的半加器可以用圖3-3(b)所示的邏輯電路加以實(shí)現(xiàn)。對(duì)該電路結(jié)構(gòu)采用結(jié)構(gòu)化描述法的程序如下:數(shù)字邏輯32narchitecture struct_ha of half_adder isncomponent and_gate nport (a1,a2:in bit;na3:out bit );nend component;ncomponent xor_gate nport (x1,x2:in bit;nx3:out bit );nend component;nbeginngl:and_gate port map (a,b,c );n g2:xor_gate por
13、t map (a,b,s );nend struct_ha;數(shù)字邏輯33n在在vhdl語言中可以賦值的客體叫做數(shù)據(jù)對(duì)象。語言中可以賦值的客體叫做數(shù)據(jù)對(duì)象。每一種數(shù)據(jù)對(duì)象代表的物理含義和使用規(guī)則,允每一種數(shù)據(jù)對(duì)象代表的物理含義和使用規(guī)則,允許賦值的數(shù)據(jù)類型,可以參與的運(yùn)算等都有嚴(yán)格許賦值的數(shù)據(jù)類型,可以參與的運(yùn)算等都有嚴(yán)格的規(guī)定。的規(guī)定。nvhdl語言的基本數(shù)據(jù)對(duì)象有語言的基本數(shù)據(jù)對(duì)象有3種:常量、變量和種:常量、變量和信號(hào)。變量、常量和其它高級(jí)語言中相應(yīng)類型類信號(hào)。變量、常量和其它高級(jí)語言中相應(yīng)類型類似,信號(hào)則是硬件描述語言中特有的,它帶有硬似,信號(hào)則是硬件描述語言中特有的,它帶有硬件特征。從
14、硬件電路的角度來看,信號(hào)和變量相件特征。從硬件電路的角度來看,信號(hào)和變量相當(dāng)于電路之間的連線或連線上的信號(hào)值,常量則當(dāng)于電路之間的連線或連線上的信號(hào)值,常量則相當(dāng)于電源(相當(dāng)于電源(vcc)、地()、地(gnd)等。)等。數(shù)字邏輯34n常量是設(shè)計(jì)者在實(shí)體中給某一常量名定義數(shù)據(jù)類型和賦值,在程序中試圖多次給常量賦值是錯(cuò)誤的。常量定義的一般格式如下:nconstant 常量名 :數(shù)據(jù)類型 := 表達(dá)式 ;n其中表達(dá)式的數(shù)據(jù)類型必須和定義的常量數(shù)據(jù)類型一致。n常量定義一般包含在實(shí)體、結(jié)構(gòu)體、程序包、進(jìn)程、函數(shù)、過程等設(shè)計(jì)單元中。n例如:constant vcc :real : = 3.3 ;數(shù)字邏輯
15、35constant abus :bit_vector : = 11000101 ;常量abus的數(shù)據(jù)類型是bit_vector,被賦初值為11000101,在程序中被做為某一器件的固定地址。數(shù)字邏輯36n變量是個(gè)局部量,做為一個(gè)臨時(shí)的數(shù)據(jù)存儲(chǔ)單元,只能在進(jìn)程、函數(shù)、過程等結(jié)構(gòu)中使用,不能將信息帶出它定義所在的當(dāng)前結(jié)構(gòu)。變量賦值是立即生效的,不存在延時(shí)。變量定義的一般格式如下:nvariable 變量名 :數(shù)據(jù)類型 : = 表達(dá)式;n其中表達(dá)式的數(shù)據(jù)類型必須和定義的變量數(shù)據(jù)類型一致。n例如:variable a :std_logic : = 1 ;定義標(biāo)準(zhǔn)邏輯位類型變量a,初始值為 1 var
16、iable count:integer range 0 to 255 ;定義整數(shù)類型變量count,取值范圍為0到255數(shù)字邏輯37n在變量定義語句中可以給出和變量相同數(shù)據(jù)類型的初始值,但這不是必須的。由于硬件電路上電后的隨機(jī)性,很多綜合器并不支持初始值設(shè)定,這樣可以在程序中通過賦值語句來賦予變量一個(gè)值。變量賦值的方式如下:n變量名 : = 表達(dá)式;n變量在賦值時(shí)不能產(chǎn)生附加延時(shí)。例如,tmp1、tmp2是變量,那么下式產(chǎn)生延時(shí)的方式是不合法的:tmp1 : = tmp2 after 10 ns;數(shù)字邏輯38n信號(hào)硬件系統(tǒng)描述中的基本數(shù)據(jù)類型,類似電路內(nèi)部的連接線,實(shí)現(xiàn)實(shí)體和實(shí)體間、元件和元件
17、間的連接。信號(hào)具有全局性特征,不但可以在一個(gè)設(shè)計(jì)實(shí)體內(nèi)部各個(gè)單元間傳遞數(shù)據(jù),還可以做為實(shí)體中并行語句模塊間的信息通道,不需注明信息的流動(dòng)方向。信號(hào)通常在實(shí)體、結(jié)構(gòu)體、包集合中定義說明。注意不允許在進(jìn)程和過程的順序語句中定義信號(hào)。信號(hào)定義的格式如下:nsignal 信號(hào)名 :數(shù)據(jù)類型 : = 表達(dá)式;n例如:signal bus_enable :bit : = 1 ; 定義bit類型信號(hào),初始值為 1 signal data_bus :std_logic_vector 7 downto 0 ;定義8位寬度的數(shù)據(jù)總線數(shù)字邏輯39n在給出信號(hào)的完整定義后,就可對(duì)信號(hào)賦值。信在給出信號(hào)的完整定義后,就
18、可對(duì)信號(hào)賦值。信號(hào)賦值語句如下:號(hào)賦值語句如下:n信號(hào)名信號(hào)名 = 表達(dá)式表達(dá)式 after 時(shí)間量;時(shí)間量;nafter 時(shí)間量,表示數(shù)據(jù)信號(hào)的傳入需延時(shí)給時(shí)間量,表示數(shù)據(jù)信號(hào)的傳入需延時(shí)給定的時(shí)間量,這與實(shí)際器件的硬件特征是吻合的。定的時(shí)間量,這與實(shí)際器件的硬件特征是吻合的。數(shù)字邏輯40數(shù)字邏輯41nvhdl語言的標(biāo)準(zhǔn)數(shù)據(jù)類型共有語言的標(biāo)準(zhǔn)數(shù)據(jù)類型共有10種,如表種,如表3-1所示。所示。數(shù)字邏輯42variable a :integer ranger 128 to 128 ;數(shù)字邏輯43nvhdl語言的實(shí)數(shù)類似于數(shù)學(xué)上的實(shí)數(shù),實(shí)數(shù)值的范圍為1.0e+38+1.0e+38。實(shí)數(shù)有正負(fù)數(shù),書
19、寫時(shí)一定要有小數(shù)點(diǎn)。例如:1.0,+2.5,1.0e38,n有些數(shù)可以用整數(shù)表示也可以用實(shí)數(shù)表示。例如,數(shù)字1的整數(shù)表示為1,而用實(shí)數(shù)表示則為1.0。兩個(gè)數(shù)的值是一樣的,但數(shù)據(jù)類型卻不一樣。n大多數(shù)eda工具只能在仿真器中使用實(shí)數(shù)類型數(shù)據(jù),綜合器則不支持實(shí)數(shù),這是因?yàn)関hdl語言適用于硬件系統(tǒng)設(shè)計(jì)與開發(fā)的語言,實(shí)數(shù)類型的實(shí)現(xiàn)太復(fù)雜,電路規(guī)模上難以承受。數(shù)字邏輯44n實(shí)數(shù)常量的書寫方式舉例如下:n2#11001011# 二進(jìn)制浮點(diǎn)數(shù)n1.0 十進(jìn)制浮點(diǎn)數(shù)n 0.0 十進(jìn)制浮點(diǎn)數(shù)n 65971.333333 十進(jìn)制浮點(diǎn)數(shù)n 65_971.333_3333 與上一行等價(jià)n 8#43.6#e+4 八進(jìn)
20、制浮點(diǎn)數(shù)n 43.6e 4 十進(jìn)制浮點(diǎn)數(shù)數(shù)字邏輯45n在數(shù)字系統(tǒng)中,信號(hào)值通常用一個(gè)位來表示。位值的表示方法是用字符0或者1 (將值放在單引號(hào)中)來表示。位與整數(shù)中的1和0不同,1和0僅僅表示一個(gè)位的兩種取值。n在程序包standard中的定義源代碼是:type bit is ( 0 , 1 );數(shù)字邏輯46n位矢量基于bit數(shù)據(jù)類型的數(shù)字,在程序包standard中的定義源代碼是:ntype bit_vector is array (natural ranger ) of bit;n使用位矢量時(shí)必須指明數(shù)據(jù)寬度,即數(shù)組元素個(gè)數(shù)和排列順序,賦值是雙引號(hào)括起來的一組位數(shù)據(jù)。例如:variable
21、 a :bit_vector( 7 downto 0 ) : = 00110011數(shù)字邏輯47n布爾量是二值枚舉量,具有兩種狀態(tài):“真”或者“假”。布爾量位不同,沒有數(shù)值的含義,也不能進(jìn)行算術(shù)運(yùn)算,只能進(jìn)行關(guān)系運(yùn)算。例如在if語句中被測試,測試結(jié)果產(chǎn)生一個(gè)布爾量值,true或者false。n如果某個(gè)信號(hào)或者變量被定義為布爾量,那么在仿真中將自動(dòng)地對(duì)其賦值進(jìn)行核查。一般這布爾量數(shù)據(jù)的初始值為false。n在程序包standard中的定義源代碼是:type boolean is (false , true );數(shù)字邏輯48數(shù)字邏輯49n字符串是用雙引號(hào)括起來的一個(gè)字符序列,也稱字符串是用雙引號(hào)括起
22、來的一個(gè)字符序列,也稱字符矢量或字符串?dāng)?shù)組,。例如:字符矢量或字符串?dāng)?shù)組,。例如:integer range,字符串一般用于提示和說明。,字符串一般用于提示和說明。n例如:例如:variable string_var :string( 1 to 7 );string_var : = a b c d數(shù)字邏輯50n錯(cuò)誤等級(jí)(錯(cuò)誤等級(jí)(severity level)n錯(cuò)誤等級(jí)類型數(shù)據(jù)通常用來表征電子系統(tǒng)的狀態(tài),分為note(注意)、warning(警告)、error(出錯(cuò))、failure(失敗)4個(gè)等級(jí)。n在系統(tǒng)仿真過程中用這4種狀態(tài)來表示系統(tǒng)當(dāng)前的工作情況,使開發(fā)者隨時(shí)了解當(dāng)前系統(tǒng)工作的情況,以
23、采取相應(yīng)的對(duì)策。n自然數(shù)(自然數(shù)(natural)和正整數(shù)()和正整數(shù)(positive)n這兩類數(shù)據(jù)都是整數(shù)的子類,自然數(shù)類類數(shù)據(jù)取值0和0以上的正整數(shù),正整數(shù)類型數(shù)據(jù)為大于0的整數(shù)。babaacabcababcbaabcbcaab)(數(shù)字邏輯51n時(shí)間(時(shí)間(time)n時(shí)間類型也稱為物理類型(physical type)。時(shí)間類型數(shù)據(jù)的范圍是整數(shù)定義的范圍,完整的時(shí)間量數(shù)據(jù)包含整數(shù)和單位兩部分,整數(shù)和單位之間至少留一個(gè)空格,例如:n16 ns,25 ms,3 sec,162 min n在程序包standard中給出了時(shí)間的類型定義:type time is ranger -2147483
24、647 to 2147483647unitsfs ; 飛秒,vhdl語言中的最小時(shí)間單位ps = 1000 fs ; 皮秒ns = 1000 ps ; 納秒us = 1000 ns ; 微妙ms = 1000 us ; 毫秒sec = 1000 ms ; 秒min = 60 sec ; 分hr = 60 min ; 時(shí)end units ;數(shù)字邏輯52n事件類型一般用于仿真,vhdl綜合器不支持時(shí)間類型。在系統(tǒng)仿真時(shí),用時(shí)間類型數(shù)據(jù)可以表示信號(hào)的延時(shí),從而使模型系統(tǒng)能更接近實(shí)際的硬件特性。n在ieee庫的程序包 std_logic_1164中定義了兩個(gè)非常重要的數(shù)據(jù)類型:標(biāo)準(zhǔn)邏輯位std_lo
25、gic和標(biāo)準(zhǔn)邏輯矢量 std_logic_vector。n在程序中使用這兩類數(shù)據(jù)類型時(shí),必須在程序的開始部分加入下面的語句:library ieee;use ieee.std_loigc_1164. .all;數(shù)字邏輯53n標(biāo)準(zhǔn)邏輯位標(biāo)準(zhǔn)邏輯位std_logicnieee的std_logic標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型是設(shè)計(jì)中常用的數(shù)據(jù)類型,在std_logic_1164程序包中定義了該數(shù)據(jù)類型的9種取值。而傳統(tǒng)的bit類型只有0和1兩種取值,因此較少使用。在ieee庫程序包std_logic_1164中std_logic數(shù)據(jù)類型的定義如下所示:type std_logic is ( u - 未初始化的
26、 x - 強(qiáng)未知的 0 - 強(qiáng)0 1 - 強(qiáng)1 z - 高阻態(tài) w - 弱未知的 l - 弱0 h - 弱1 - - 忽略 ) ;數(shù)字邏輯54n標(biāo)準(zhǔn)邏輯矢量標(biāo)準(zhǔn)邏輯矢量 std_logic_vectorn在ieee庫程序包std_logic_1164中std_logic_vector類型的定義如下所 type std_logic_vector is array ( natural range ) of std_logic;可見,std_logic_vector類型是在std_logic_1164程序包中定義的標(biāo)準(zhǔn)一維數(shù)組,數(shù)組中的每一個(gè)元素的數(shù)據(jù)類型都是標(biāo)準(zhǔn)邏輯位std_logic類型。向標(biāo)準(zhǔn)
27、邏輯矢量 std_logic_vector類型的數(shù)據(jù)對(duì)象賦值的方式與普通的一維數(shù)組 array數(shù)據(jù)對(duì)象賦值的方式是一樣的,同位寬、同數(shù)據(jù)類型的矢量間才能進(jìn)行賦值。數(shù)字邏輯55n vhdl語言也允許用戶根據(jù)自己設(shè)計(jì)的需要自己定義數(shù)據(jù)類型,用戶定義數(shù)據(jù)類型的一般格式為:ntype 數(shù)據(jù)類型名,數(shù)據(jù)類型名 數(shù)據(jù)類型定義;n用戶定義數(shù)據(jù)類型可以有多種類型,如枚舉(enumerated)類型、整數(shù)(integer)類型、實(shí)數(shù)(real)類型、浮點(diǎn)數(shù)(floating)類型、數(shù)組(array)類型、記錄(recode)類型、存取(access)類型、文件(file)類型等,下面介紹幾種常用的用戶定義數(shù)據(jù)類
28、型。數(shù)字邏輯56n枚舉枚舉(enumerated)類型類型n枚舉類型就是將類型中的所有元素都列出來。枚舉類型定義的格式為:ntype 數(shù)據(jù)類型名 is (元素,元素,);type my_state is ( state1 state2 state3 state4 state5 ) ;數(shù)字邏輯57n但是,在邏輯電路中所有的數(shù)據(jù)都只能用0和1來表示,所以在綜合過程中用符號(hào)名表示的元素都將被轉(zhuǎn)化為二進(jìn)制編碼。枚舉類型元素的編碼是自動(dòng)的,編碼順序是默認(rèn)的,一般第一個(gè)枚舉元素編碼為0,以后的依次加1。n綜合器在編碼過程中自動(dòng)將每一枚舉元素轉(zhuǎn)變成位矢量,位矢的長度將取所需表達(dá)的所有枚舉元素的最小值。n在前
29、面地舉例中,用于表達(dá)五個(gè)狀態(tài)的位矢長度應(yīng)該為3,編碼默認(rèn)值為如下方式:nstate1 = 000; state2 = 001; state3 = 010; state4 = 011; state5 = 100;數(shù)字邏輯58n在前面的基本類型中可以看到,整數(shù)和實(shí)數(shù)類型在標(biāo)準(zhǔn)程序包中已經(jīng)定義過。但在實(shí)際應(yīng)用中,這兩種數(shù)據(jù)類型的取值范圍太大,綜合其無法進(jìn)行綜合。因此,用戶經(jīng)常根據(jù)實(shí)際的需要重新定義,限定其取值范圍。例如:type my_num is range 100 to 100 ;可見,整數(shù)或?qū)崝?shù)用戶定義數(shù)據(jù)類型的格式如下:type 數(shù)據(jù)類型名 is 數(shù)據(jù)類型定義約束范圍;數(shù)字邏輯59n數(shù)組類型
30、就是將相同類型的數(shù)據(jù)集合在一起所形成的新的數(shù)據(jù)類型。數(shù)組可以是一維的,也可以是二維或多維。n數(shù)組類型定義的格式如下:ntype 數(shù)據(jù)類型名 is 范圍 of 原數(shù)據(jù)類型名;n“范圍”這一項(xiàng)默認(rèn)是整數(shù),例如:type word is array (integer 1 to 8) of std_logic;type d_bus is array ( 0 to 9) of std_logic;type instruction is (add,sub,inc,srl,srf,lda,ldb,xfr);subtype digit is integer 0 to 9;type insflag is arr
31、ay (instruction add to srf) of digit;數(shù)字邏輯60n多維數(shù)組需要用兩個(gè)以上的范圍來描述,而且多維數(shù)組不能生成邏輯電路,因此只能用于生成仿真圖形及硬件的抽象模型。例如:type memarray is array (0 to 5,7 downto 0) of std_logic;constant romdata :memarray : =( 0,0,0,0,0,0,0,0 ),( 0,1,1,0,0,0,0,1 ),( 0,0,0,0,0,0,0,0 ),( 1,0,1,0,1,0,1,0 ),( 1,1,0,1,1,1,1,0 ),( 1,1,1,1,1,1
32、,1,1 );signal data_bit :std_logic;data_bit = romdata( 3,7);數(shù)字邏輯61n在代入初值時(shí),各范圍最左邊所說明的值為數(shù)組的初始位腳標(biāo)。在上例中(0,7)是起始位,接下去右側(cè)范圍向右移一位變?yōu)?0,6),以后順序?yàn)?0,5),(0,4)直至(0,0)。然后,左側(cè)范圍向右移一位變?yōu)?1,7),此后按此規(guī)律移動(dòng)得到最后一位(5,0)。數(shù)字邏輯62n由不同類型的數(shù)據(jù)組織在一起形成的數(shù)據(jù)類型叫記錄類型。記錄類型定義的格式如下:ntype 數(shù)據(jù)類型名 is recoden 元素名:數(shù)據(jù)類型名;n 元素名:數(shù)據(jù)類型名;n nend record;n從記錄
33、類型中提取元素的數(shù)據(jù)類型時(shí)應(yīng)使用“”。舉例如下:數(shù)字邏輯63type bank is recordaddr0:std_logic_vector(7 downto o);addrl:std_logic_vector(7 downto o);r0:integer;inat:instruction;end record;signal addbusl,addbus2:std_logic vector(31 downto 0);signal result:1nteger;signal alu_code:instruction;signal r_bank:bank : = ( 00000000,00000
34、000,0,add);addbusl = r_bank. addrl;r_bank. inst = alu_code;數(shù)字邏輯64n用戶定義的子類型是用戶對(duì)已定義的數(shù)據(jù)類型,做一些范圍限制而形成的一種新的數(shù)據(jù)類型。子類型的名稱通常采用用戶較易理解的名字。子類型定義的格式為:n subtype 子類型名 數(shù)據(jù)類型名 范圍;n例如,在“std_logic_vector”基礎(chǔ)上所形成的子類:subtype a_bus is std_logic_vector ( 7 downto 0);subtype digit is integer range 0 to 9;數(shù)字邏輯65n子類型可以對(duì)原數(shù)據(jù)類型指定
35、范圍而形成,也可以完全和原數(shù)據(jù)類型范圍一致。例如:subtype abus is std_logic_vector (7 downto 0);signal aio:std_logic_vector (7 downto 0);signal bio:std_logic_vector (15 downto o);signal cio:abvs;aio = cio;正確操作bio = cio;錯(cuò)誤操作新構(gòu)造的數(shù)據(jù)類型及子類型通常在包集合中定義,再由use語句裝載到描述語句中。數(shù)字邏輯66nvhdl語言有4種運(yùn)算符,分別是邏輯運(yùn)算符、算術(shù)運(yùn)算符、關(guān)系運(yùn)算符和并置運(yùn)算符。對(duì)于vhdl中的操作符與操作數(shù)間的
36、運(yùn)算有兩點(diǎn)需要特別注意:n嚴(yán)格遵循在基本操作符間操作數(shù)是同數(shù)據(jù)類型的規(guī)則;n嚴(yán)格遵循操作數(shù)的數(shù)據(jù)類型必須與操作符所要求的數(shù)據(jù)類型完全一致 數(shù)字邏輯67n邏輯運(yùn)算符邏輯運(yùn)算符nvhdl中共有7種邏輯運(yùn)算,它們分別是:nnot 邏輯非;nand 邏輯與;nnand 邏輯與非;nor 邏輯或;nnor 或非;nxor 異或;nxnor 異或非。n邏輯運(yùn)算符適用的數(shù)據(jù)類型是bit、std_logic、boolean、bit_vector以及std_logic_vector。如果運(yùn)算符兩邊的值的類型是數(shù)組,則數(shù)組的尺寸,即位寬要相等。數(shù)字邏輯68n在7種邏輯運(yùn)算符中,運(yùn)算符not的優(yōu)先級(jí)最高,而其他6種
37、運(yùn)算符則具有相同的優(yōu)先級(jí)。在高級(jí)編程語言中的邏輯運(yùn)算符有自左向右或是自右向左的優(yōu)先級(jí)順序,但是vhdl語言的邏輯運(yùn)算符則沒有左右優(yōu)先級(jí)差別,設(shè)計(jì)人員經(jīng)常采用加括號(hào)的方法來解決邏輯表達(dá)式中沒有左右優(yōu)先級(jí)差別的問題。例如:q = a and b or not c and d;數(shù)字邏輯69n在編譯時(shí)將會(huì)給出語法出錯(cuò)的信息。對(duì)于這種情況,這里可以采用加括號(hào)的方法來解決,可以將其修改為:q = (a and b) or (not c and d);通常情況下,對(duì)于邏輯表達(dá)式中只有and或or或xor的情況下可以不加括號(hào),因?yàn)閷?duì)于這三種邏輯運(yùn)算來說,改變運(yùn)算順序并不會(huì)改變結(jié)果的邏輯。例如:q = a an
38、d b and c and d;q = a or b or c or d;q = a xor b xor c xor d;數(shù)字邏輯70n在vhdl語言中,算術(shù)運(yùn)算符主要包括16種,其中只有+(加)、一(減)和*(乘)能夠被eda開發(fā)工具綜合為對(duì)應(yīng)的邏輯電路,其余算術(shù)運(yùn)算綜合成邏輯電路將會(huì)很困難,甚至是完全不可能的。vhdl中的16種算術(shù)運(yùn)算符如下所示:n+ 加;n 減;n* 乘;n 除;nmod 取模;nrem 取余;n* 乘方;nabs 取絕對(duì)值;n+ 正號(hào);n 負(fù)號(hào);nsll 邏輯左移;nsrl 邏輯右移;nsla 算術(shù)左移;nsra 算術(shù)右移;nrol 邏輯循環(huán)左移;nror 邏輯循環(huán)右
39、移。數(shù)字邏輯71n算術(shù)運(yùn)算符的使用規(guī)則如下:n+(加)、(減)、+(正號(hào))、-(負(fù)號(hào))四種運(yùn)算符的操作與日常數(shù)值運(yùn)算相同,可以用于整數(shù)、實(shí)數(shù)和物理類型。n*(乘)、(除)運(yùn)算符的操作數(shù)可以為整數(shù)、實(shí)數(shù)。同時(shí),物理類型可以被整數(shù)或?qū)崝?shù)相乘或相除,結(jié)果仍為物理類型;物理類型除以物理類型的結(jié)果是一個(gè)整數(shù)。nmod(取模)和rem(取余)運(yùn)算符只能用于整數(shù)類型。nabs(取絕對(duì)值)運(yùn)算符可以用于任何數(shù)據(jù)類型。n*(乘方)運(yùn)算符的左操作數(shù)可以是整數(shù)或是實(shí)數(shù),而右操作數(shù)必須是整數(shù)。只有在左操作數(shù)為實(shí)數(shù)時(shí),其右操作數(shù)才可以是負(fù)整數(shù)。nsll(邏輯左移)、srl(邏輯右移)、sla(算術(shù)左移)、sra(算術(shù)右
40、移)、rol(邏輯循環(huán)左移)和ror(邏輯循環(huán)右移)六種算術(shù)運(yùn)算符為二元運(yùn)算符,它們只能定義在一維數(shù)組上,并且其元素必須是bit和boolean型,左操作數(shù)必須為這種類型,而右操作數(shù)必須是整數(shù)類型。數(shù)字邏輯72n下面是幾個(gè)整數(shù)rem(取余)和mod(取模)的小例子。通過這些例子,讀者能夠掌握rem和mod運(yùn)算的規(guī)則:n7 rem 2 = 1, 7 rem (2 ) = 1, 7 rem 2 = 1, 7 rem (2) = 1n7 mod 2 = 1, 7 mod (2) = 1, 7 mod 2 = 1, 7 mod (2) = 1數(shù)字邏輯73nvhdl語言的關(guān)系運(yùn)算符如下所示:n 相等;n
41、 不等于;n 大于;n 大于等于。數(shù)字邏輯74n關(guān)系運(yùn)算符有如下規(guī)則:n關(guān)系運(yùn)算符兩邊數(shù)據(jù)類型必須一致(除、);n(等于)、(不等于)適用于所有數(shù)據(jù)類型對(duì)象之間的比較;n(大于)、(大于等于)和(小于等于)適用于整數(shù)、實(shí)數(shù)、位矢量及數(shù)組之間的比較;n兩個(gè)矢量比較時(shí),自左向右,按位比較。數(shù)字邏輯75n關(guān)系運(yùn)算符應(yīng)用舉例:process(num1,num2)signal a:std_logic_vector(4 downto 0);signal b:std_logic_vector(4 downto o);signal c:std_logic;begina num 1; 賦值運(yùn)算b num 2;
42、賦值運(yùn)算if (a b) then 關(guān)系運(yùn)算c 1; 賦值運(yùn)算elsec 0; 賦值運(yùn)算endif;end process;數(shù)字邏輯76n并置運(yùn)算符“”用于位的連接。并置運(yùn)算的規(guī)則如下:n并置運(yùn)算可用于位的連接,形成位適量;n并置運(yùn)算可用于矢量的連接,形成新的矢量,例如,兩個(gè)4位的矢量并置運(yùn)算后,可以構(gòu)成8位矢量;n并置運(yùn)算可用于位和矢量的連接,形成新的矢量,例如,位和一個(gè)4位的矢量并置運(yùn)算后,可以構(gòu)成5位矢量。n下面是一個(gè)使用了并置運(yùn)算符的小例子,可見并置運(yùn)算符的使用方法:signal a,b :std_logic_vector( 3 downto 0);signal q :std_logi
43、c_vector( 7 downto 0);q ab;數(shù)字邏輯77n在上面的小例子中,3條程序語句的作用是將兩個(gè)4位長度的位矢量a和b連接成一個(gè)8位長度的位矢量并將其賦給信號(hào)q。n位的連接可以有不同的表示方法,下面進(jìn)行介紹。先來看用并置運(yùn)算符來連接4個(gè)std_logic類型的信號(hào)a、b、c、d,然看將連接后形成的位矢量賦給位矢量q。signal a,b,c,d :std_logic;signal q :std_logic_vector( 3 downto 0);q abcd;數(shù)字邏輯78n在vhdl語言中中,邏輯運(yùn)算、關(guān)系運(yùn)算、算術(shù)運(yùn)算、并置運(yùn)算優(yōu)先級(jí)是不相同的,各種運(yùn)算的操作不可能放在一個(gè)程
44、序語句中,所以把各種運(yùn)算符排成統(tǒng)一的優(yōu)先順序表意義不明顯。其次,vhdl語言的結(jié)構(gòu)化描述,在綜合過程中,程序是并行的,沒有先后順序之分,寫在不同程序行的硬件描述程序同時(shí)并行工作。vhdl語言程序設(shè)計(jì)者不要理解程序是逐行執(zhí)行,運(yùn)算是有先后順序的,這樣是不利于vhdl程序的設(shè)計(jì)。運(yùn)算符的優(yōu)先順序僅在同一行的情況下有順序、有優(yōu)先,不同行的程序是同時(shí)的。各個(gè)運(yùn)算符的優(yōu)先級(jí)別見下表3-2:數(shù)字邏輯79數(shù)字邏輯80nvhdl語言中的表達(dá)式與其他高級(jí)程序設(shè)計(jì)語言非常相似,同樣是由運(yùn)算符將基本元素連接起來的式子。要稱為一個(gè)表達(dá)式,需要有兩個(gè)要素:運(yùn)算符和基本元素?;驹匕▽?duì)象名、文字、函數(shù)調(diào)用及括起來的表
45、達(dá)式。例如:ab,b (6)b (5)b (4),(ab)*b+(a rem b),7 rem (2)等。數(shù)字邏輯81n并行語句和順序語句是vhdl語言中的兩種基本描述語句,它們完整描述了數(shù)字系統(tǒng)的硬件結(jié)構(gòu)和邏輯功能。n順序語句的特點(diǎn)是按照書寫的先后次序來執(zhí)行,它們只能出現(xiàn)在進(jìn)程、塊和子程序中,子程序包括函數(shù)(function)和過程(procedure)。數(shù)字邏輯82n順序語句有兩類:一類是只能作為順序語句使用;另一類是既可以做順序語句也可以做并行語句,這類語句放在進(jìn)程、子程序以外是并行語句,放在進(jìn)程、子程序內(nèi)是順序語句。nvhdl語言有6類基本順序語句:賦值語句、流程控制語句、等待語句、子
46、程序調(diào)用語句、返回語句和空操作語句。 數(shù)字邏輯83nvhdl語言中的賦值語句是指將一個(gè)值或一個(gè)表達(dá)式的運(yùn)算結(jié)果傳遞給某一個(gè)數(shù)據(jù)對(duì)象,如信號(hào)或變量。在設(shè)計(jì)實(shí)體中,數(shù)據(jù)的傳輸以及對(duì)端口外部數(shù)據(jù)的讀取都是通過賦值語句實(shí)現(xiàn)的。n信號(hào)賦值語句信號(hào)賦值語句n信號(hào)的說明要放在vhdl語言程序的并行部分進(jìn)行,但可以在vhdl語言程序的并行部分和順序部分同時(shí)使用。信號(hào)賦值語句的書寫格式如下:n目標(biāo)信號(hào) = 表達(dá)式;n該語句表示,將右邊信號(hào)量表達(dá)式的值賦予左邊的目的信號(hào)量。例如:a = b;數(shù)字邏輯84n變量賦值語句變量賦值語句n在vhdl語言中,變量的說明和賦值語句只能在vhdl語言程序的順序部分進(jìn)行說明和使用
47、,即只能出現(xiàn)在進(jìn)程、過程和函數(shù)中。變量賦值語句的書寫格式為:n目標(biāo)變量 := 表達(dá)式;n例如:count : = 10; 向變量count賦值10數(shù)字邏輯85nif語句是根據(jù)指定的條件確定執(zhí)行哪條語句。if語句的條件判斷輸出是布爾量,即是“真”(true)或“假”(false)。因此在if語句的條件表達(dá)式中只能使用關(guān)系運(yùn)算操作(=,一,=)及邏輯運(yùn)算操作的組合表達(dá)式。nif語句共有3種類型:數(shù)字邏輯86nif_then語句語句n這種類型的語句書寫格式如下:nif 條件 thenn順序處理語句nend if;n執(zhí)行到if語句時(shí),判斷指定條件是否成立。如果條件成立,則執(zhí)行順序處理語句部分;如果條件
48、不成立,則跳過順序處理語句部分,向下執(zhí)行if語句后面的語句。數(shù)字邏輯87nif_then_else語句語句n這種類型的語句書寫格式如下:nif 條件 thenn順序處理語句1;nelsen順序處理語句2;nend if;數(shù)字邏輯88n在這種格式的if語句中,當(dāng)if語句所指定的條件成立時(shí),將執(zhí)行順序處理語句1部分;當(dāng)if語句所指定的條件不成立時(shí),將執(zhí)行順序處理語句2部分。也就是說,用條件來選擇兩條不同程序執(zhí)行的路徑。n這種描述的典型邏輯電路實(shí)例是二選一電路。例如,二選一電路的輸入為a和b,選擇控制端為sel,輸出端為c。用if語句來描述該電路行為的程序如例3-2所示。數(shù)字邏輯89n【例【例3-2
49、】 if_then_else語句示例architecture rtl of mux2 isbeginprocess( a,b,sel)beginif ( sel = 1) thenc = a;elsec = b;end if;end process; end rtl;數(shù)字邏輯90nif_then_elseif_else語句語句nif語句的多選擇控制又稱if語句的嵌套,在這種情況下,它的書寫格式為:nif 條件1 thenn順序處理語句1;nelsif 條件2 thenn順序處理語句2;nnelsie 條件n thenn順序處理語句n;nelsen順序處理語句n+1;nend if;數(shù)字邏輯91
50、n【例【例3-3】 四選一電路示例library ieee;use ieee.std_logic_1164all;entity mux4 isport(input:in std_logic_vector(3 downto 0); sel:in std_logic_vector(1 downto 0); y:out std_logic);end mux4;architecture rtl of mux4 isbeginprocess(input,sel)beginif(sel = 00 ) theny = input(0 );elsif( sel = 01 ) theny = input(1 )
51、;elsif(sel=10) theny = input(2 );elsey 順序處理語句;nend case;數(shù)字邏輯93n當(dāng)case和is之間的表達(dá)式的取值滿足指定的條件表達(dá)式的值時(shí),程序?qū)?zhí)行緊接著的,由符號(hào)=所指的順序處理語句。條件表達(dá)式的值有如下的4種不同的表示形式:nwhen值 = 順序處理語句;nwhen值|值|值|值 = 順序處理語句;nwhen值 to 值 = 順序處理語句;nwhen others = 順序處理語句;數(shù)字邏輯94nloop語句與其它高級(jí)語句中的循環(huán)語句一樣,使它所包含的順序處理語句被循環(huán)執(zhí)行,循環(huán)執(zhí)行的次數(shù)由循環(huán)變量的取值范圍決定。在vhdl語言中常用來描述
52、位片邏輯及迭代電路的行為。nloop語句的書寫格式一般有兩種:數(shù)字邏輯95nfor_loop語句語句n這種loop語句的書寫格式如下:n標(biāo)號(hào):for 循環(huán)變量 in 離散范圍 loopn順序處理語句;nend loop標(biāo)號(hào);nloop語句中的循環(huán)變量的值在每次循環(huán)中都將發(fā)生變化,而in后跟的離散范圍則表示循環(huán)變量在循環(huán)過程中依次取值的范圍。例如:asum:for i in 1 to 9 loopsum = i + sum; sum初始值為0end loop asum;數(shù)字邏輯96n【例【例3-5】 8位的奇偶校驗(yàn)電路的實(shí)例:library ieee;use ieee.std_logic_116
53、4.all;entity parity_check isport(a:in std_logic_vector(7 downto 0);y:out std_logic);end parity_check isarchitecture rtl of parity_check isbeginprocess (a)variable tmp:std_logic;beglntmp : = 0;for i in 0 to 7 looptmp : = tmp xor a(i );end loop;y = tmp;end process,end rtl;數(shù)字邏輯97nwhile_loop語句語句n這種loop語
54、句的書寫格式如下:n標(biāo)號(hào):while 條件 loopn順序處理語句;nend loop標(biāo)號(hào);n在該loop語句中,如果條件為“真”,則進(jìn)行循環(huán);如果條件為“假”,則結(jié)束循環(huán)。n例如:i : = 1;sum : = 0;sbcd:while (i10) loopsum : = i + sum; i : = i + 1;end loop sbcd;數(shù)字邏輯98nnext語句是loop語句的內(nèi)部循環(huán)控制語句,用來在loop語句中進(jìn)行有條件或無條件的跳轉(zhuǎn)控制。它的3種書寫格式為:nnext;nnext loop 標(biāo)號(hào);nnext loop 標(biāo)號(hào) when 條件表達(dá)式;數(shù)字邏輯99n第一種格式,當(dāng)loo
55、p語句內(nèi)部的順序處理語句執(zhí)行到next處時(shí),無條件終止本次循環(huán),跳回到本次循環(huán)loop語句處,開始下一次循環(huán)操作。n第二種格式,該格式的功能和第一種類似,只是當(dāng)有多重loop語句嵌套時(shí),跳轉(zhuǎn)到指定標(biāo)號(hào)的loop語句處,開始執(zhí)行下一次循環(huán)操作。n第三種格式,當(dāng)when后的條件表達(dá)式的值為true時(shí),執(zhí)行next語句,否則繼續(xù)向下執(zhí)行。 數(shù)字邏輯100l1:while i10 loopl2:while j20 loopnext l1 when i = j;endloop l2;end loop l1;n當(dāng)i = j時(shí),next語句被執(zhí)行,程序?qū)膬?nèi)循環(huán)跳出,跳轉(zhuǎn)到標(biāo)號(hào)l1處,開始下一次循環(huán)操作。數(shù)
56、字邏輯101nexit語句也是loop語句的內(nèi)部循環(huán)控制語句,書寫格式和跳轉(zhuǎn)功能都和next語句很類似。不過exit語句是跳轉(zhuǎn)到loop標(biāo)號(hào)指定的loop循環(huán)語句的結(jié)束處,即跳出loop循環(huán)語句。exit語句的書寫格式也有3種:nexit;nexit loop 標(biāo)號(hào);nexit loop 標(biāo)號(hào) when 條件表達(dá)式;數(shù)字邏輯102n【例【例3-6】 exit語句實(shí)示例:n在該例中int_a通常代入大于0的正數(shù)值。如果int_a的取值為負(fù)值或零將出現(xiàn)錯(cuò)誤狀態(tài),算式就不能計(jì)算。也就是說int_a小于或等于0時(shí),if語句將返回“真”值,exit語句得到執(zhí)行,loop語句執(zhí)行結(jié)束。程序?qū)⑾蛳聢?zhí)行l(wèi)oo
57、p語句后繼的語句。process(n)variable int_a:integer;beginint_a : = a;for i in 0 to max_limit loopif (int_a =0 )thenexit;elseint_a : = int_a1;q (i) = 3.1416real(a*i);endif;end loop;y = q;end process;數(shù)字邏輯103n進(jìn)程在仿真運(yùn)行中總是處于兩種狀態(tài)之一:執(zhí)行狀態(tài)和等待狀態(tài)。進(jìn)程狀態(tài)的變化受wait語句的控制,當(dāng)進(jìn)程執(zhí)行到wait語句時(shí),就將被掛起,直到滿足此語句設(shè)置的結(jié)束條件后,才能重新開始執(zhí)行。wait語句可以設(shè)置4種
58、不同的條件:無限等待、時(shí)間到、條件滿足以及敏感信號(hào)量變化,這幾類條件可以混用,其書寫格式為:nwait 無限等待nwait on 信號(hào)表 敏感信號(hào)量變化nwait until 條件表達(dá)式 條件滿足nwait for 時(shí)間表達(dá)式 時(shí)間到數(shù)字邏輯104n例如:wait on a,b;信號(hào)a或信號(hào)b發(fā)生變化,進(jìn)程將結(jié)束掛起狀態(tài),而繼續(xù)執(zhí)行wait on語句后繼的語句。wait until (x*10) tmp : = rega and regb;when 101 = tmp : = rega or regb;when 110 = tmp : = not rega;when others = null
59、;end case;數(shù)字邏輯107nvhdl語言是并行執(zhí)行的語言,這是和其它高級(jí)程序設(shè)計(jì)語言不同的地方,也是符合硬件運(yùn)行特點(diǎn)的。n在vhdl語言中有多種并行語句,各種并行語句間的執(zhí)行是同步的,它們的執(zhí)行順序與書寫順序無關(guān)。在并行語句執(zhí)行時(shí),并行語句間可以有信息的往來,也可以是獨(dú)立、互不相關(guān)的。每一種并行語句內(nèi)部的語句運(yùn)行方式也是有并行執(zhí)行方式(如塊語句)和順序執(zhí)行方式(如進(jìn)程語句)兩種。n在vhdl語言中能進(jìn)行并行處理的語句有:進(jìn)程語句、并行賦值語句、塊語句、條件信號(hào)賦值語句、元件例化語句、生成語句、并行過程調(diào)用語句、參數(shù)傳遞映射語句、端口說明語句、并行斷言語句等。下面介紹一些常用的并行語句,
60、其它并行語句請(qǐng)讀者查閱其它相關(guān)資料。數(shù)字邏輯108n進(jìn)程語句在前面的例子中已多次見到,它是vhdl語言程序中使用最頻繁,最能體現(xiàn)vhdl語言特點(diǎn)的語句。在一個(gè)結(jié)構(gòu)體中可以有多個(gè)進(jìn)程語句同時(shí)并行執(zhí)行,而進(jìn)程語句內(nèi)部則是由順序語句組成的。進(jìn)程語句與結(jié)構(gòu)體中其它并行語句通過信號(hào)進(jìn)行信息交流。進(jìn)程語句有敏感信號(hào)表,當(dāng)敏感信號(hào)表中任意信號(hào)發(fā)生變化時(shí)將啟動(dòng)進(jìn)程語句執(zhí)行內(nèi)部的順序語句。數(shù)字邏輯109n進(jìn)程語句process的一般書寫格式如下:n進(jìn)程名: process 敏感信號(hào)表n變量說明語句;nbeginnn順序處理語句;nnend process 進(jìn)程名;n可見,進(jìn)程語句實(shí)際上是一段程序,在這段程序中從進(jìn)程標(biāo)識(shí)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度解除勞動(dòng)合同經(jīng)濟(jì)補(bǔ)償及社會(huì)保險(xiǎn)銜接協(xié)議
- 二零二五年度能源互聯(lián)網(wǎng)合同管理制度及智能調(diào)度流程
- 二零二五年度鐵路運(yùn)輸安全責(zé)任協(xié)議書
- 2025年度汽車維修店汽車美容裝潢業(yè)務(wù)轉(zhuǎn)讓合同
- 2025年度美甲店轉(zhuǎn)讓合同含店鋪裝修升級(jí)及開業(yè)慶典策劃
- 《睡谷的傳說》THE LEGEND OF SLEEPY HOLLOW小說英文原版電子版
- 2025年杭州駕校考試貨運(yùn)從業(yè)資格證考試題庫
- 2025年新余道路運(yùn)輸從業(yè)資格證考試內(nèi)容是什么
- 感謝領(lǐng)導(dǎo)發(fā)言稿
- 2025年宣城道路運(yùn)輸從業(yè)人員資格考試內(nèi)容有哪些
- 低血糖急救護(hù)理課件
- 學(xué)做小小按摩師(課件)全國通用三年級(jí)上冊(cè)綜合實(shí)踐活動(dòng)
- 陰道鏡檢查臨床醫(yī)學(xué)知識(shí)及操作方法講解培訓(xùn)PPT
- 出險(xiǎn)車輛維修確認(rèn)書范本
- “教學(xué)評(píng)一體化”指導(dǎo)的語文教學(xué)設(shè)計(jì)以統(tǒng)編版語文四年級(jí)上冊(cè)《蟋蟀的住宅》為例
- AI09人工智能-多智能體
- 學(xué)習(xí)英模事跡,傳承紅色基因
- 石墨烯商業(yè)計(jì)劃書
- 放射源基本知識(shí)培訓(xùn)課件
- 【革命歷史題材舞蹈創(chuàng)作手法及思考案例-以紅船為例9400字(論文)】
- 腦血管造影術(shù)后病人的護(hù)理查房
評(píng)論
0/150
提交評(píng)論