




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第3章 vhdl編程基礎(chǔ) 第3章 vhdl編程基礎(chǔ) 3.1 概述概述 3.2 vhdl程序基本結(jié)構(gòu)程序基本結(jié)構(gòu) 3.3 vhdl語言要素語言要素 3.4 vhdl順序語句順序語句 3.5 vhdl并行語句并行語句 3.6 子程序子程序(subprogram) 3.7 庫、程序包及其他庫、程序包及其他 3.8 vhdl描述風(fēng)格描述風(fēng)格 3.9 基本邏輯電路設(shè)計(jì)基本邏輯電路設(shè)計(jì) 3.10 狀態(tài)機(jī)的狀態(tài)機(jī)的vhdl設(shè)計(jì)設(shè)計(jì) 第3章 vhdl編程基礎(chǔ) 3.1 概概 述述 3.1.1 常用硬件描述語言簡介常用硬件描述語言簡介 常用硬件描述語言有vhdl、verilog和abel語言。vhdl起源于美國國
2、防部的vhsic,verilog起源于集成電路的設(shè)計(jì),abel則來源于可編程邏輯器件的設(shè)計(jì)。下面從使用方面將三者進(jìn)行對比。 (1) 邏輯描述層次:一般的硬件描述語言可以在三個(gè)層次上進(jìn)行電路描述,其層次由高到低依次可分為行為級、rtl級和門電路級。vhdl語言是一種高級描述語言,適用于行為級和rtl級的描述,最適于描述電路的行為;verilog語言和abel語言是一種較低級的描述語言,適用于rtl級和門電路級的描述,最適于描述門級電路。 第3章 vhdl編程基礎(chǔ) (2) 設(shè)計(jì)要求:vhdl進(jìn)行電子系統(tǒng)設(shè)計(jì)時(shí)可以不了解電路的結(jié)構(gòu)細(xì)節(jié),設(shè)計(jì)者所做的工作較少;verilog和abel語言進(jìn)行電子系統(tǒng)設(shè)
3、計(jì)時(shí)需了解電路的結(jié)構(gòu)細(xì)節(jié),設(shè)計(jì)者需做大量的工作。 (3) 綜合過程:任何一種語言源程序,最終都要轉(zhuǎn)換成門電路級才能被布線器或適配器所接受。因此,vhdl語言源程序的綜合通常要經(jīng)過行為級rtl級門電路級的轉(zhuǎn)化,vhdl幾乎不能直接控制門電路的生成。而verilog語言和abel語言源程序的綜合過程要稍簡單,即經(jīng)過rtl級門電路級的轉(zhuǎn)化,易于控制電路資源。 第3章 vhdl編程基礎(chǔ) (4) 對綜合器的要求:vhdl描述語言層次較高,不易控制底層電路,因而對綜合器的性能要求較高,verilog和abel對綜合器的性能要求較低。 (5) 支持的eda工具:支持vhdl和verilog的eda工具很多,
4、但支持abel的綜合器僅僅dataio一家。 (6) 國際化程度:vhdl和verilog已成為ieee標(biāo)準(zhǔn),而abel正朝國際化標(biāo)準(zhǔn)努力。 第3章 vhdl編程基礎(chǔ) 3.1.2 vhdl的優(yōu)點(diǎn)的優(yōu)點(diǎn) vhdl的英文全名是very-high-speed integrated circuit hardware description language,誕生于1982年。1987年底, vhdl被ieee ( the institute of electrical and electronics engineers)和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言。自ieee公布了vhdl的標(biāo)準(zhǔn)版本(ieee-
5、1076)之后,各eda公司相繼推出了自己的vhdl設(shè)計(jì)環(huán)境,或宣布自己的設(shè)計(jì)工具可以和vhdl接口。此后vhdl在電子設(shè)計(jì)領(lǐng)域得到了廣泛的接受,并逐步取代了原有的非標(biāo)準(zhǔn)硬件描述語言。1993年,ieee對vhdl進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展vhdl的內(nèi)容,公布了新版本的vhdl,即ieee標(biāo)準(zhǔn)的1076-1993版本?,F(xiàn)在,vhdl和verilog作為ieee的工業(yè)標(biāo)準(zhǔn)硬件描述語言,又得到眾多eda公司的支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語言。有專家認(rèn)為,在新的世紀(jì)中,vhdl與verilog語言將承擔(dān)起幾乎全部的數(shù)字系統(tǒng)設(shè)計(jì)任務(wù)。 第3章 vhdl編程基礎(chǔ)
6、 vhdl主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。除了含有許多具有硬件特征的語句外,vhdl的語言形式和描述風(fēng)格與句法十分類似于一般的計(jì)算機(jī)高級語言。vhdl的程序結(jié)構(gòu)特點(diǎn)是將一項(xiàng)工程設(shè)計(jì),或稱設(shè)計(jì)實(shí)體(可以是一個(gè)元件、一個(gè)電路模塊或一個(gè)系統(tǒng))分成外部(或稱可視部分,即端口)和內(nèi)部(或稱不可視部分),即設(shè)計(jì)實(shí)體的內(nèi)部功能和算法完成部分。在對一個(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進(jìn)行工程設(shè)計(jì)的優(yōu)點(diǎn)是多方面的,具體如下: 第3章 vhdl編程基礎(chǔ) (1) 與其他的硬件描述語
7、言相比,vhdl具有更強(qiáng)的行為描述能力。強(qiáng)大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)的重要保證。就目前流行的eda工具和vhdl綜合器而言,將基于抽象的行為描述風(fēng)格的vhdl程序綜合成為具體的fpga和cpld等目標(biāo)器件的網(wǎng)表文件已不成問題,只是在綜合與優(yōu)化效率上略有差異。 (2) vhdl具有豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早期,就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對系統(tǒng)進(jìn)行仿真模擬,使設(shè)計(jì)者對整個(gè)工程的結(jié)構(gòu)和功能可行性做出判斷。 第3章 vhdl編程基礎(chǔ) (3) vhdl語句的行為描述能力和程序結(jié)構(gòu),決定了它具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的
8、再利用功能。符合市場需求的大規(guī)模系統(tǒng)高效、高速的完成必須有多人甚至多個(gè)開發(fā)組共同并行工作才能實(shí)現(xiàn),vhdl中設(shè)計(jì)實(shí)體的概念、程序包的概念、設(shè)計(jì)庫的概念為設(shè)計(jì)的分解和并行工作提供了有利的支持。 第3章 vhdl編程基礎(chǔ) (4) 用vhdl完成一個(gè)確定的設(shè)計(jì),可以利用eda工具進(jìn)行邏輯綜合和優(yōu)化,并自動(dòng)把vhdl描述設(shè)計(jì)轉(zhuǎn)變成門級網(wǎng)表(根據(jù)不同的實(shí)現(xiàn)芯片)。這種方式突破了門級設(shè)計(jì)的瓶頸,極大地減少了電路設(shè)計(jì)的時(shí)間和可能發(fā)生的錯(cuò)誤,降低了開發(fā)成本。利用eda工具的邏輯優(yōu)化功能,可以自動(dòng)地把一個(gè)綜合后的設(shè)計(jì)變成一個(gè)更小、更高速的電路系統(tǒng)。反過來,設(shè)計(jì)者還可以容易地從綜合和優(yōu)化的電路獲得設(shè)計(jì)信息,返回去
9、更新修改vhdl設(shè)計(jì)描述,使之更加完善。 第3章 vhdl編程基礎(chǔ) (5) vhdl對設(shè)計(jì)的描述具有相對獨(dú)立性。設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必管最終設(shè)計(jì)的目標(biāo)器件是什么,而進(jìn)行獨(dú)立的設(shè)計(jì)。正因?yàn)関hdl的硬件描述與具體的工藝技術(shù)和硬件結(jié)構(gòu)無關(guān),所以vhdl設(shè)計(jì)程序的硬件實(shí)現(xiàn)目標(biāo)器件有廣闊的選擇范圍,其中包括各種系列的cpld、fpga及各種門陣列器件。 (6) 由于vhdl具有類屬描述語句和子程序調(diào)用等功能,對于完成的設(shè)計(jì),在不改變源程序的條件下,只需改變類屬參量或函數(shù),就能輕易地改變設(shè)計(jì)的規(guī)模和結(jié)構(gòu)。 第3章 vhdl編程基礎(chǔ) 3.1.3 vhdl程序設(shè)計(jì)約定程序設(shè)計(jì)約定 為了便于程序的閱
10、讀和調(diào)試,本書對vhdl程序設(shè)計(jì)特作如下約定: (1) 語句結(jié)構(gòu)描述中方括號(hào)“ ”內(nèi)的內(nèi)容為可選內(nèi)容。 (2) 對于vhdl的編譯器和綜合器來說,程序文字的大小寫是不加區(qū)分的。本書一般使用大寫。 (3) 程序中的注釋使用雙橫線“-”。在vhdl程序的任何一行中,雙橫線“-”后的文字都不參加編譯和綜合。 第3章 vhdl編程基礎(chǔ) (4) 為了便于程序的閱讀與調(diào)試,書寫和輸入程序時(shí),使用層次縮進(jìn)格式,同一層次的對齊,低層次的較高層次的縮進(jìn)兩個(gè)字符。 (5) 考慮到max+plusii要求源程序文件的名字與實(shí)體名必須一致,因此為了使同一個(gè)vhdl源程序文件能適應(yīng)各個(gè)eda開發(fā)軟件上的使用要求,建議各
11、個(gè)源程序文件的命名均與其實(shí)體名一致。 第3章 vhdl編程基礎(chǔ) 3.2 vhdl程序基本結(jié)構(gòu)程序基本結(jié)構(gòu) 3.2.1 vhdl程序設(shè)計(jì)舉例程序設(shè)計(jì)舉例 1設(shè)計(jì)思路設(shè)計(jì)思路 全加器可以由兩個(gè)1位的半加器構(gòu)成,而1位半加器可以由如圖3.1所示的門電路構(gòu)成。 1位半加器的端口信號(hào)a 和b分別是2位相加的二進(jìn)制輸入信號(hào),so是相加和的輸出信號(hào),co是進(jìn)位輸出信號(hào),左邊的門電路結(jié)構(gòu)構(gòu)成了右邊的半加器h_adder。在硬件上可以利用半加器構(gòu)成如圖3.2所示的全加器,當(dāng)然還可以將一組這樣的全加器級聯(lián)起來構(gòu)成一個(gè)串行進(jìn)位的加法器。圖3.2中,全加器 f_adder內(nèi)部的功能結(jié)構(gòu)是由3個(gè)邏輯器件構(gòu)成的,即由兩個(gè)
12、半加器u1、u2和一個(gè)或門u3連接而成。 第3章 vhdl編程基礎(chǔ) 圖3.1 1位半加器邏輯原理圖abcosoh_adderabcoso第3章 vhdl編程基礎(chǔ) 圖3.2 1 位全加器邏輯原理圖 abcosoh_adderu1ainbincins2abcosoh_adderu2s1s3abcu3or2coutsumf_adderainbincincoutsum第3章 vhdl編程基礎(chǔ) 2. vhdl源程序源程序1) 或門的邏輯描述- ieee庫的使用說明 library ieee; use ieee.std_logic_1164.all;-實(shí)體or2的說明 entity or2 is port
13、(a,b:in std_logic; c:out std_logic); end entity or2;-實(shí)體or2的結(jié)構(gòu)體art1的說明 architecture art1 of or2 is begin c=a or b; end architecture art1; 第3章 vhdl編程基礎(chǔ) 2) 半加器的邏輯描述- ieee庫的使用說明 library ieee; use ieee.std_logic_1164.all;-實(shí)體h_adder的說明 entity h_adder is prot(a,b:in std_logic; co,so:out std_logic); 第3章 vhd
14、l編程基礎(chǔ) end entity h_adder;- 實(shí)體h_adder的結(jié)構(gòu)體art2的說明 architecture art2 of h_adder is begin so=(a or b) and (a nand b); coain,b=bin,co=d,so=e); u2:h_adder port map(a=e,b=cin,co=f,so=sum); u3:or2 port map(a=d,b=f,c=cout); end architecture art3; 第3章 vhdl編程基礎(chǔ) 3. 說明及分析說明及分析 (1) 整個(gè)設(shè)計(jì)包括三個(gè)設(shè)計(jì)實(shí)體,分別為or2、h_adder和_ad
15、der,其中實(shí)體f_adder為頂層實(shí)體。三個(gè)設(shè)計(jì)實(shí)體均包括三個(gè)組成部分:庫、程序包使用說明,實(shí)體說明和結(jié)構(gòu)體說明。這三個(gè)設(shè)計(jì)實(shí)體既可以作為一個(gè)整體進(jìn)行編譯、綜合與存檔,也可以各自進(jìn)行獨(dú)立編譯、獨(dú)立綜合與存檔,或被其他的電路系統(tǒng)所調(diào)用。 第3章 vhdl編程基礎(chǔ) (2) 實(shí)體 or2定義了或門or2的引腳信號(hào)a、b(輸入)和c(輸出),其對應(yīng)的結(jié)構(gòu)體art1描述了輸入與輸出信號(hào)間的邏輯關(guān)系,即將輸入信號(hào)a、b相或后傳給輸出信號(hào)端c,由此實(shí)體和結(jié)構(gòu)體描述一個(gè)完整的或門元件。 (3) 實(shí)體h_adder及對應(yīng)的結(jié)構(gòu)體art2描述了一個(gè)如圖3.1所示的半加器。由其結(jié)構(gòu)體的描述可以看到,它是由一個(gè)與非
16、門、一個(gè)非門、一個(gè)或門和一個(gè)與門連接而成的,其邏輯關(guān)系來自于半加器真值表。在vhdl中,邏輯算符nand、not、or和and分別代表“與非”、“非”、“或”和“與”4種邏輯運(yùn)算關(guān)系。 第3章 vhdl編程基礎(chǔ) (4) 在全加器接口邏輯vhdl描述中,根據(jù)圖3.2右側(cè)的1位二進(jìn)制全加器f_adder的原理圖,實(shí)體f_adder定義了引腳的端口信號(hào)屬性和數(shù)據(jù)類型。其中,ain和bin分別為兩個(gè)輸入的相加位,cin為低位進(jìn)位輸入,cout 為進(jìn)位輸出,sum為1位和輸出。其對應(yīng)的結(jié)構(gòu)體art3的功能是利用component聲明語句和component例化語句將上面由兩個(gè)實(shí)體or2和h_adder描
17、述的獨(dú)立器件,按照圖3.2全加器內(nèi)部邏輯原理圖中的接線方式連接起來。 第3章 vhdl編程基礎(chǔ) (5) 在結(jié)構(gòu)體在結(jié)構(gòu)體art3中,中,componentend component 語句結(jié)構(gòu)對所要調(diào)用的或門和半加器兩元件作了聲明語句結(jié)構(gòu)對所要調(diào)用的或門和半加器兩元件作了聲明(component declaration),并由,并由signal語句定義了三語句定義了三個(gè)信號(hào)個(gè)信號(hào)d、e和和f,作為中間信號(hào)轉(zhuǎn)存點(diǎn),以利于幾個(gè)器件間的信,作為中間信號(hào)轉(zhuǎn)存點(diǎn),以利于幾個(gè)器件間的信號(hào)連接。接下去的號(hào)連接。接下去的“port map( )”語句稱為元件例化語句語句稱為元件例化語句(component in
18、stantiation)。所謂例化,在電路板上,。所謂例化,在電路板上,相當(dāng)于往上裝配元器件;在邏輯原理圖上,相當(dāng)于從元件庫中取相當(dāng)于往上裝配元器件;在邏輯原理圖上,相當(dāng)于從元件庫中取了一個(gè)元件符號(hào)放在電路原理圖上,并對此符號(hào)的各引腳進(jìn)行連了一個(gè)元件符號(hào)放在電路原理圖上,并對此符號(hào)的各引腳進(jìn)行連線。例化也可理解為元件映射或元件連接,線。例化也可理解為元件映射或元件連接,map是映射的意思。是映射的意思。例如,語句例如,語句“u2:h_adder port map(a=e,b=cin,co=f,so=sum)”表示將實(shí)體表示將實(shí)體h_adder描述的元件描述的元件u2的引的引腳信號(hào)腳信號(hào)a、b、
19、co和和so分別連向外部信號(hào)分別連向外部信號(hào)e、cin、f和和sum。符號(hào)符號(hào)“=”表示信號(hào)連接。表示信號(hào)連接。 第3章 vhdl編程基礎(chǔ) (6) 實(shí)體實(shí)體f_adder引導(dǎo)的邏輯描述也是由三個(gè)主要部分構(gòu)引導(dǎo)的邏輯描述也是由三個(gè)主要部分構(gòu)成的,即庫、實(shí)體和結(jié)構(gòu)體。從表面上看來,庫的部分僅包含成的,即庫、實(shí)體和結(jié)構(gòu)體。從表面上看來,庫的部分僅包含一個(gè)一個(gè)ieee標(biāo)準(zhǔn)庫和打開的標(biāo)準(zhǔn)庫和打開的ieee.std_logic_1164.all程序包。程序包。但實(shí)際上,從結(jié)構(gòu)體的描述中可以看出,其對外部的邏輯有調(diào)但實(shí)際上,從結(jié)構(gòu)體的描述中可以看出,其對外部的邏輯有調(diào)用的操作,這類似于對庫或程序包中的內(nèi)容作
20、了調(diào)用。因此,用的操作,這類似于對庫或程序包中的內(nèi)容作了調(diào)用。因此,庫結(jié)構(gòu)部分還應(yīng)將上面的或門和半加器的庫結(jié)構(gòu)部分還應(yīng)將上面的或門和半加器的vhdl描述包括進(jìn)去,描述包括進(jìn)去,作為工作庫中的兩個(gè)待調(diào)用的元件。由此可見,庫結(jié)構(gòu)也是作為工作庫中的兩個(gè)待調(diào)用的元件。由此可見,庫結(jié)構(gòu)也是vhdl程序的重要組成部分。程序的重要組成部分。 第3章 vhdl編程基礎(chǔ) 3.2.2 vhdl程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu) 從前面的設(shè)計(jì)實(shí)例可以看出,一個(gè)相對完整的vhdl程序(或稱為設(shè)計(jì)實(shí)體)具有如圖3.3所示的比較固定的結(jié)構(gòu)。至少應(yīng)包括三個(gè)基本組成部分:庫、程序包使用說明,實(shí)體說明和實(shí)體對應(yīng)的結(jié)構(gòu)體說明。其中,庫
21、、程序包使用說明用于打開(調(diào)用)本設(shè)計(jì)實(shí)體將要用到的庫、程序包;實(shí)體說明用于描述該設(shè)計(jì)實(shí)體與外界的接口信號(hào)說明,是可視部分;結(jié)構(gòu)體說明用于描述該設(shè)計(jì)實(shí)體內(nèi)部工作的邏輯關(guān)系,是不可視部分。在一個(gè)實(shí)體中,可以含有一個(gè)或一個(gè)以上的結(jié)構(gòu)體,而在每一個(gè)結(jié)構(gòu)體中又可以含有一個(gè)或多個(gè)進(jìn)程以及其他的語句。根據(jù)需要,實(shí)體還可以有配置說明語句。配置說明語句主要用于以層次化的方式對特定的設(shè)計(jì)實(shí)體進(jìn)行元件例化,或是為實(shí)體選定某個(gè)特定的結(jié)構(gòu)體。 第3章 vhdl編程基礎(chǔ) 如何才算一個(gè)完整的vhdl程序(設(shè)計(jì)實(shí)體),并沒有完全一致的結(jié)論,因?yàn)椴煌某绦蛟O(shè)計(jì)目的可以有不同的程序結(jié)構(gòu)。通常認(rèn)為,一個(gè)完整的設(shè)計(jì)實(shí)體的最低要求應(yīng)
22、該能為vhdl綜合器所接受,并能作為一個(gè)獨(dú)立設(shè)計(jì)單元,即以元件的形式存在的vhdl程序。這里所謂的元件,既可以被高層次的系統(tǒng)所調(diào)用,成為該系統(tǒng)的一部分,也可以作為一個(gè)電路功能塊而獨(dú)立存在和獨(dú)立運(yùn)行。 第3章 vhdl編程基礎(chǔ) 圖3.3 vhdl程序設(shè)計(jì)基本結(jié)構(gòu) 庫、程序包使用說明配置(configuration)結(jié)構(gòu)體(architecture)實(shí)體(entity)port端口說明結(jié)構(gòu)體說明generic類屬說明體實(shí)計(jì)設(shè)結(jié)構(gòu)體功能描述第3章 vhdl編程基礎(chǔ) 3.2.3 實(shí)體實(shí)體(entity) 實(shí)體是一個(gè)設(shè)計(jì)實(shí)體的表層設(shè)計(jì)單元,其功能是對這個(gè)設(shè)計(jì)實(shí)體與外部電路進(jìn)行接口描述。它規(guī)定了設(shè)計(jì)單元的
23、輸入輸出接口信號(hào)或引腳,是設(shè)計(jì)實(shí)體經(jīng)封裝后對外的一個(gè)通信界面。 1實(shí)體語句結(jié)構(gòu)實(shí)體語句結(jié)構(gòu)實(shí)體說明單元的常用語句結(jié)構(gòu)如下: entity 實(shí)體名 is generic(類屬表); port(端口表); end entity 實(shí)體名; 第3章 vhdl編程基礎(chǔ) 實(shí)體說明單元必須以語句“entity 實(shí)體名is”開始,以語句“end entity 實(shí)體名;”結(jié)束,其中的實(shí)體名是設(shè)計(jì)者自己給設(shè)計(jì)實(shí)體的命名,可作為其他設(shè)計(jì)實(shí)體對該設(shè)計(jì)實(shí)體進(jìn)行調(diào)用時(shí)用。中間在方括號(hào)內(nèi)的語句描述,在特定的情況下并非是必須的。例如構(gòu)建一個(gè)vhdl仿真測試基準(zhǔn)等情況中可以省去方括號(hào)中的語句。 第3章 vhdl編程基礎(chǔ) 2類屬
24、類屬(generic)說明語句說明語句 類屬(generic)參量是一種端口界面常數(shù),常以一種說明的形式放在實(shí)體或塊結(jié)構(gòu)體前的說明部分。類屬為所說明的環(huán)境提供了一種靜態(tài)信息通道,類屬的值可以由設(shè)計(jì)實(shí)體外部提供。因此,設(shè)計(jì)者可以從外面通過類屬參量的重新設(shè)定而容易地改變一個(gè)設(shè)計(jì)實(shí)體或一個(gè)元件的內(nèi)部電路結(jié)構(gòu)和規(guī)模。 第3章 vhdl編程基礎(chǔ) 類屬說明的一般書寫格式如下: generic(常數(shù)名;數(shù)據(jù)類型:設(shè)定值 ;常數(shù)名:數(shù)據(jù)類型:設(shè)定值 ); 類屬參量以關(guān)鍵詞generic引導(dǎo)一個(gè)類屬參量表,在表中提供時(shí)間參數(shù)或總線寬度等靜態(tài)信息。類屬表說明用于確定設(shè)計(jì)實(shí)體和其外部環(huán)境通信的參數(shù),傳遞靜態(tài)的信息。
25、類屬說明在所定義的環(huán)境中的地位十分接近常數(shù),但卻能從環(huán)境(如設(shè)計(jì)實(shí)體)外部動(dòng)態(tài)地接受賦值,其行為又有點(diǎn)類似于端口port。因此,常如以上的實(shí)體定義語句那樣,將類屬說明放在其中,且放在端口說明語句的前面。 第3章 vhdl編程基礎(chǔ) 在一個(gè)實(shí)體中定義的、可以通過generic參數(shù)類屬的說明,為它創(chuàng)建多個(gè)行為不同的邏輯結(jié)構(gòu)。比較常見的情況是選用類屬來動(dòng)態(tài)規(guī)定一個(gè)實(shí)體端口的大小,或設(shè)計(jì)實(shí)體的物理特性,或結(jié)構(gòu)體中的總線寬度,或設(shè)計(jì)實(shí)體中、底層中同種元件的例化數(shù)量等。一般在結(jié)構(gòu)體中,類屬的應(yīng)用與常數(shù)是一樣的。例如,當(dāng)用實(shí)體例化一個(gè)設(shè)計(jì)實(shí)體的器件時(shí),可以用類屬表中的參數(shù)項(xiàng)定制這個(gè)器件,如可以將一個(gè)實(shí)體的傳輸
26、延時(shí)、上升和下降延時(shí)等參數(shù)加到類屬參數(shù)表中,然后根據(jù)這些參數(shù)進(jìn)行定制,這對于系統(tǒng)仿真控制是十分方便的。類屬中的常數(shù)名是由設(shè)計(jì)者確定的類屬常數(shù)名,數(shù)據(jù)類型通常取integer或time等類型,設(shè)定值即為常數(shù)名所代表的數(shù)值。但需注意,綜合器僅支持?jǐn)?shù)據(jù)類型為整數(shù)的類屬值。 第3章 vhdl編程基礎(chǔ) 【例【例3.2.1】 entity mck is generic(width:integer:=16); port(add_bus:out std_logic_vector(width-1 downto 0) ; . 在這里,generic語句對實(shí)體mck的作為地址總線的端口add_bus的數(shù)據(jù)類型和寬度
27、作了定義,即定義add_bus為一個(gè)16位的位矢量。第3章 vhdl編程基礎(chǔ) 【例【例3.2.2】 2輸入與門的實(shí)體描述。 entity and2 is generic(risew:time:=1 ns; fallw:time:=1 ns); port( a1:in std_logic; a0:in std_logic; z0:out std_logic); end entity and2; 這是一個(gè)準(zhǔn)備作為2輸入與門的設(shè)計(jì)實(shí)體的實(shí)體描述,在類屬說明中定義參數(shù)risew為上沿寬度,fallw為下沿寬度,它們分別為 1 ns,這兩個(gè)參數(shù)用于仿真模塊的設(shè)計(jì)。 第3章 vhdl編程基礎(chǔ) 3port端
28、口說明端口說明 由port引導(dǎo)的端口說明語句是對于一個(gè)設(shè)計(jì)實(shí)體界面的說明。 實(shí)體端口說明的一般書寫格式如下: port(端口名:端口模式 數(shù)據(jù)類型; 端口名:端口模式 數(shù)據(jù)類型); 第3章 vhdl編程基礎(chǔ) 其中,端口名是設(shè)計(jì)者為實(shí)體的每一個(gè)對外通道所取的名字;端口模式是指這些通道上的數(shù)據(jù)流動(dòng)方式,如輸入或輸出等;數(shù)據(jù)類型是指端口上流動(dòng)的數(shù)據(jù)的表達(dá)格式。由于vhdl是一種強(qiáng)類型語言,它對語句中的所有操作數(shù)的數(shù)據(jù)類型都有嚴(yán)格的規(guī)定。一個(gè)實(shí)體通常有一個(gè)或多個(gè)端口,端口類似于原理圖部件符號(hào)上的管腳。實(shí)體與外界交流的信息必須通過端口通道流入或流出。 第3章 vhdl編程基礎(chǔ) ieee 1076標(biāo)準(zhǔn)包中
29、定義了4種常用的端口模式,各端口模式的功能及符號(hào)分別見表3.1和圖3.4。在實(shí)際的數(shù)字集成電路中,in相當(dāng)于只可輸入的引腳,out相當(dāng)于只可輸出的引腳,buffer相當(dāng)于帶輸出緩沖器并可以回讀的引腳(與tri引腳不同),而inout相當(dāng)于雙向引腳(即bidir引腳)。由圖3.4的inout電路可見,此模式的端口是普通輸出端口(out)加入三態(tài)輸出緩沖器和輸入緩沖器構(gòu)成的。 在實(shí)用中,端口描述中的數(shù)據(jù)類型主要有兩類:位(bit)和位矢量(bit_vector)。若端口的數(shù)據(jù)類型定義為bit,則其信號(hào)值是一個(gè)1位的二進(jìn)制數(shù),取值只能是0或1;若端口數(shù)據(jù)類型定義為bit_vector,則其信號(hào)值是一
30、組二進(jìn)制。 第3章 vhdl編程基礎(chǔ) 表表3.1 端口模式說明端口模式說明端口模式 端口模式說明(以設(shè)計(jì)實(shí)體為主體) in 輸入,只讀模式,將變量或信號(hào)信息通過該端口讀入 out 輸出,單向賦值模式,將信號(hào)通過該端口輸出 buffer 具有讀功能的輸出模式,可以讀或?qū)?,只能有一個(gè)驅(qū)動(dòng)源 inout 雙向,可以通過該端口讀入或?qū)懗鲂畔?第3章 vhdl編程基礎(chǔ) 圖3.4 端口模式符號(hào)圖inoutbufferinout第3章 vhdl編程基礎(chǔ) 3.2.4 結(jié)構(gòu)體結(jié)構(gòu)體(architecture) 結(jié)構(gòu)體是用于描述設(shè)計(jì)實(shí)體的內(nèi)部結(jié)構(gòu)以及實(shí)體端口間的邏輯關(guān)系。結(jié)構(gòu)體內(nèi)部構(gòu)造的描述層次和描述內(nèi)容一般可以
31、用圖3.5來說明。一般地,一個(gè)完整的結(jié)構(gòu)體由兩個(gè)基本層次組成: 對數(shù)據(jù)類型、常數(shù)、信號(hào)、子程序和元件等元素的說明部分。 描述實(shí)體邏輯行為的,以各種不同的描述風(fēng)格表達(dá)的功能描述語句。第3章 vhdl編程基礎(chǔ) 圖3.5 結(jié)構(gòu)體構(gòu)造圖進(jìn)程語句塊語句體結(jié)構(gòu)明說體構(gòu)結(jié)述能描功體構(gòu)結(jié)元件例化語句子程序調(diào)用語句信號(hào)賦值語句常數(shù)說明數(shù)據(jù)類型說明信號(hào)說明例化元件說明子程序說明第3章 vhdl編程基礎(chǔ) 結(jié)構(gòu)體將具體實(shí)現(xiàn)一個(gè)實(shí)體。每個(gè)實(shí)體可以有多個(gè)結(jié)構(gòu)體,每個(gè)結(jié)構(gòu)體對應(yīng)著實(shí)體不同結(jié)構(gòu)和算法實(shí)現(xiàn)方案,其間的各個(gè)結(jié)構(gòu)體的地位是同等的,它們完整地實(shí)現(xiàn)了實(shí)體的行為,但同一結(jié)構(gòu)體不能為不同的實(shí)體所擁有。結(jié)構(gòu)體不能單獨(dú)存在,它
32、必須有一個(gè)界面說明,即一個(gè)實(shí)體。對于具有多個(gè)結(jié)構(gòu)體的實(shí)體,必須用configuration配置語句指明用于綜合的結(jié)構(gòu)體和用于仿真的結(jié)構(gòu)體,即在綜合后的可映射于硬件電路的設(shè)計(jì)實(shí)體中,一個(gè)實(shí)體只對應(yīng)一個(gè)結(jié)構(gòu)體。在電路中,如果實(shí)體代表一個(gè)器件符號(hào),則結(jié)構(gòu)體描述了這個(gè)符號(hào)的內(nèi)部行為。當(dāng)把這個(gè)符號(hào)例化成一個(gè)實(shí)際的器件安裝到電路上時(shí),則需配置語句為這個(gè)例化的器件指定一個(gè)結(jié)構(gòu)體(即指定一種實(shí)現(xiàn)方案),或由編譯器自動(dòng)選一個(gè)結(jié)構(gòu)體。第3章 vhdl編程基礎(chǔ) 1. 結(jié)構(gòu)體的一般語句格式結(jié)構(gòu)體的一般語句格式 結(jié)構(gòu)體的語句格式如下: architecture 結(jié)構(gòu)體名 of 實(shí)體名 is 說明語句 begin 功能描
33、述語句 end architecture 結(jié)構(gòu)體名;其中,實(shí)體名必須是所在設(shè)計(jì)實(shí)體的名字,而結(jié)構(gòu)體名可以由設(shè)計(jì)者自己選擇,但當(dāng)一個(gè)實(shí)體具有多個(gè)結(jié)構(gòu)體時(shí),結(jié)構(gòu)體的取名不可重復(fù)。第3章 vhdl編程基礎(chǔ) 2結(jié)構(gòu)體說明語句結(jié)構(gòu)體說明語句 結(jié)構(gòu)體中的說明語句是對結(jié)構(gòu)體的功能描述語句中將要用到的信號(hào)(signal)、數(shù)據(jù)類型(type)、常數(shù)(constant)、元件(component)、函數(shù)(function)和過程(procedure)等加以說明的語句。但在一個(gè)結(jié)構(gòu)體中說明和定義的數(shù)據(jù)類型、常數(shù)、元件、函數(shù)和過程只能用于這個(gè)結(jié)構(gòu)體中,若希望其能用于其他的實(shí)體或結(jié)構(gòu)體中,則需要將其作為程序包來處理。
34、第3章 vhdl編程基礎(chǔ) 3功能描述語句結(jié)構(gòu)功能描述語句結(jié)構(gòu) 如圖3.5所示的功能描述語句結(jié)構(gòu)可以含有五種不同類型的,以并行方式工作的語句結(jié)構(gòu)。而在每一語句結(jié)構(gòu)的內(nèi)部可能含有并行運(yùn)行的邏輯描述語句或順序運(yùn)行的邏輯描述語句。各語句結(jié)構(gòu)的基本組成和功能分別是: (1) 塊語句是由一系列并行執(zhí)行語句構(gòu)成的組合體,它的功能是將結(jié)構(gòu)體中的并行語句組成一個(gè)或多個(gè)模塊。 第3章 vhdl編程基礎(chǔ) (2) 進(jìn)程語句定義順序語句模塊,用以將從外部獲得的信號(hào)值,或內(nèi)部的運(yùn)算數(shù)據(jù)向其他的信號(hào)進(jìn)行賦值。 (3) 信號(hào)賦值語句將設(shè)計(jì)實(shí)體內(nèi)的處理結(jié)果向定義的信號(hào)或界面端口進(jìn)行賦值。 (4) 子程序調(diào)用語句用于調(diào)用一個(gè)已設(shè)
35、計(jì)好的子程序。 (5) 元件例化語句對其他的設(shè)計(jì)實(shí)體作元件調(diào)用說明,并將此元件的端口與其他的元件、信號(hào)或高層次實(shí)體的界面端口進(jìn)行連接。 第3章 vhdl編程基礎(chǔ) 3.3 vhdl語言要素語言要素3.3.1 vhdl文字規(guī)則文字規(guī)則 vhdl文字(literal)主要包括數(shù)值和標(biāo)識(shí)符。數(shù)值型文字主要有數(shù)字型、字符串型、位串型。 1數(shù)字型文字 數(shù)字型文字的值有多種表達(dá)方式,現(xiàn)列舉如下: (1) 整數(shù)文字:整數(shù)文字都是十進(jìn)制的數(shù),如: 5,678,0,156e2(=15600),45_234_287(=45234287) 數(shù)字間的下劃線僅僅是為了提高文字的可讀性,相當(dāng)于一個(gè)空的間隔符,而沒有其他的意
36、義,因而不影響文字本身的數(shù)值。 第3章 vhdl編程基礎(chǔ) (2) 實(shí)數(shù)文字:實(shí)數(shù)文字也都是十進(jìn)制的數(shù),但必須帶有小數(shù)點(diǎn),如: 188.993,88_670_551.453_909(=88670551.453909),1.0,44.99e-2(=0.4499),1.335,0.0 (3) 以數(shù)制基數(shù)表示的文字:用這種方式表示的數(shù)由五個(gè)部分組成。第一部分,用十進(jìn)制數(shù)標(biāo)明數(shù)制進(jìn)位的基數(shù);第二部分,數(shù)制隔離符號(hào)“#”;第三部分,表達(dá)的文字;第四部分,指數(shù)隔離符號(hào)“#”;第五部分,用十進(jìn)制表示的指數(shù)部分,這一部分的數(shù)如果是0可以省去不寫?,F(xiàn)舉例如下:第3章 vhdl編程基礎(chǔ) 10#170# -(十進(jìn)制數(shù)
37、表示,等于170)2#1111_1110# -(二進(jìn)制數(shù)表示,等于254)16#e#e1 -(十六進(jìn)制數(shù)表示,等于2#11100000#,等于224)16#f.01#e+2 -(十六進(jìn)制數(shù)表示,等于3841.00) (4) 物理量文字(vhdl綜合器不接受此類文字)。如:60s(60秒),100m(100米),k(千歐姆),177a(177安培)第3章 vhdl編程基礎(chǔ) 2. 字符串型文字字符串型文字 字符是用單引號(hào)引起來的ascii字符,可以是數(shù)值,也可以是符號(hào)或字母,如:r,a,*,z。而字符串則是一維的字符數(shù)組,須放在雙引號(hào)中。vhdl中有兩種類型的字符串:文字字符串和數(shù)位字符串。 (1
38、) 文字字符串:文字字符串是用雙引號(hào)引起來的一串文字,如: “error”,“both s and q equal to l”,“x”,“bb$cc”第3章 vhdl編程基礎(chǔ) (2) 數(shù)位字符串:數(shù)位字符串也稱位矢量,是預(yù)定義的數(shù)據(jù)類型bit的一位數(shù)組,它們所代表的是二進(jìn)制、八進(jìn)制或十六進(jìn)制的數(shù)組,其位矢量的長度即為等值的二進(jìn)制數(shù)的位數(shù)。數(shù)位字符串的表示首先要有計(jì)算基數(shù),然后將該基數(shù)表示的值放在雙引號(hào)中,基數(shù)符以“b”、“o”和“x”表示,并放在字符串的前面。它們的含義分別是: b:二進(jìn)制基數(shù)符號(hào),表示二進(jìn)制數(shù)位0或1,在字符串中每一個(gè)位表示一個(gè)bit。 o:八進(jìn)制基數(shù)符號(hào),在字符串中的第一個(gè)
39、數(shù)代表一個(gè)八進(jìn)制數(shù),即代表一個(gè)3位(bit)的二進(jìn)制數(shù)。第3章 vhdl編程基礎(chǔ) x:十六進(jìn)制基數(shù)符號(hào)(0f),代表一個(gè)十六進(jìn)制數(shù),即代表一個(gè)4位的二進(jìn)制數(shù)。 例如:b“1_1101_1110” -二進(jìn)制數(shù)數(shù)組,位矢數(shù)組長度是9x“ad0” -十六進(jìn)制數(shù)數(shù)組,位矢數(shù)組長度是12 第3章 vhdl編程基礎(chǔ) 3標(biāo)識(shí)符標(biāo)識(shí)符 標(biāo)識(shí)符用來定義常數(shù)、變量、信號(hào)、端口、子程序或參數(shù)的名字。vhdl的基本標(biāo)識(shí)符就是以英文字母開頭,不連續(xù)使用下劃線“_”,不以下劃線“_”結(jié)尾的,由26個(gè)大小寫英文字母、數(shù)字09以及下劃線“_”組成的字符串。vhdl 93標(biāo)準(zhǔn)還支持?jǐn)U展標(biāo)識(shí)符,但是目前仍有許多vhdl工具不支持
40、擴(kuò)展標(biāo)識(shí)符。標(biāo)識(shí)符中的英語字母不分大小寫。vhdl的保留字不能用于作為標(biāo)識(shí)符使用。如:decoder_1,fft,sig_n,not_ack,state0,idle是合法的標(biāo)識(shí)符;而_decoder_1,2fft,sig_#n,not_ack,ryy_rst,data_bus,return則是非法的標(biāo)識(shí)符。第3章 vhdl編程基礎(chǔ) 4下標(biāo)名及下標(biāo)段名下標(biāo)名及下標(biāo)段名 下標(biāo)名用于指示數(shù)組型變量或信號(hào)的某一元素,而下標(biāo)段名則用于指示數(shù)組型變量或信號(hào)的某一段元素,其語句格式如下: 數(shù)組類型信號(hào)名或變量名(表達(dá)式1 to/downto 表達(dá)式2); 表達(dá)式的數(shù)值必須在數(shù)組元素下標(biāo)號(hào)范圍以內(nèi),并且必須是
41、可計(jì)算的。to表示數(shù)組下標(biāo)序列由低到高,如“2 to 8”;downto表示數(shù)組下標(biāo)序列由高到低,如“8 downto 2”。第3章 vhdl編程基礎(chǔ) 如果表達(dá)式是一個(gè)可計(jì)算的值,則此操作數(shù)可很容易地進(jìn)行綜合。如果是不可計(jì)算的,則只能在特定的情況下綜合,且耗費(fèi)資源較大。 如下是下標(biāo)名及下標(biāo)段名使用示例:signal a,b,c:bit_vector(0 to 7);signal m:integer range 0 to 3;signal y,z :bit;y=a(m); -m是不可計(jì)算型下標(biāo)表示z=b(3); -3是可計(jì)算型下標(biāo)表示c (0 to 3)=a (4 to 7); -以段的方式進(jìn)行
42、賦值c (4 to 7)b)的結(jié)果是布爾量true,反之為false。綜合器將其變?yōu)?或0信號(hào)值,對應(yīng)于硬件系統(tǒng)中的一根線。第3章 vhdl編程基礎(chǔ) 2) 位(bit)數(shù)據(jù)類型 位數(shù)據(jù)類型也屬于枚舉型,取值只能是1或0。位數(shù)據(jù)類型的數(shù)據(jù)對象,如變量、信號(hào)等,可以參與邏輯運(yùn)算,運(yùn)算結(jié)果仍是位的數(shù)據(jù)類型。vhdl綜合器用一個(gè)二進(jìn)制位表示bit。在程序包standard中定義的源代碼是: type bit is (0,1);第3章 vhdl編程基礎(chǔ) 3) 位矢量(bit_vector)數(shù)據(jù)類型 位矢量只是基于bit數(shù)據(jù)類型的數(shù)組,在程序包standard中定義的源代碼是: type bit _vet
43、or is array(natural range)of bit; 使用位矢量必須注明位寬,即數(shù)組中的元素個(gè)數(shù)和排列,例如: signal abit_vector(7 to 0); 信號(hào)a被定義為一個(gè)具有8位位寬的矢量,它的最左位是a(7),最右位是a(0)。第3章 vhdl編程基礎(chǔ) 4) 字符(character)數(shù)據(jù)類型 字符類型通常用單引號(hào)引起來,如a。字符類型區(qū)分大小寫,如b不同于b。字符類型已在standard程序包中作了定義。第3章 vhdl編程基礎(chǔ) 5) 整數(shù)(integer)數(shù)據(jù)類型 整數(shù)類型的數(shù)代表正整數(shù)、負(fù)整數(shù)和零。在vhdl中,整數(shù)的取值范圍是-21 473 647+21
44、 473 647,即可用32位有符號(hào)的二進(jìn)制數(shù)表示。在實(shí)際應(yīng)用中,vhdl仿真器通常將integer類型作為有符號(hào)數(shù)處理,而vhdl綜合器則將integer作為無符號(hào)數(shù)處理。在使用整數(shù)時(shí),vhdl綜合器要求用range子句為所定義的數(shù)限定范圍,然后根據(jù)所限定的范圍來決定表示此信號(hào)或變量的二進(jìn)制數(shù)的位數(shù),因?yàn)関hdl綜合器無法綜合未限定的整數(shù)類型的信號(hào)或變量。第3章 vhdl編程基礎(chǔ) 如語句“signal type1 integer range 0 to 15;”規(guī)定整數(shù)type1的取值范圍是015共16個(gè)值,可用4位二進(jìn)制數(shù)來表示,因此,type1將被綜合成由四條信號(hào)線構(gòu)成的信號(hào)。 整數(shù)常量的
45、書寫方式示例如下:2 -十進(jìn)制整數(shù)10e4 -十進(jìn)制整數(shù)16#d2# -十六進(jìn)制整數(shù)2#11011010# -二進(jìn)制整數(shù)第3章 vhdl編程基礎(chǔ) 6) 自然數(shù)(natural)和正整數(shù)(positive)數(shù)據(jù)類型 自然數(shù)是整數(shù)的一個(gè)子類型,非負(fù)的整數(shù),即零和正整數(shù);正整數(shù)也是整數(shù)的一個(gè)子類型,它包括整數(shù)中非零和非負(fù)的數(shù)值。它們在standard程序包中定義的源代碼如下: subtype natural is integer range 0 to integer high; subtype positive is integer range 1 to integer high;第3章 vhdl編
46、程基礎(chǔ) 7) 實(shí)數(shù)(real)數(shù)據(jù)類型 vhdl的實(shí)數(shù)類型類似于數(shù)學(xué)上的實(shí)數(shù),或稱浮點(diǎn)數(shù)。實(shí)數(shù)的取值范圍為-1.0e38+1.0e38。通常情況下,實(shí)數(shù)類型僅能在vhdl仿真器中使用,vhdl綜合器不支持實(shí)數(shù),因?yàn)閷?shí)數(shù)類型的實(shí)現(xiàn)相當(dāng)復(fù)雜,目前在電路規(guī)模上難以承受。 實(shí)數(shù)常量的書寫方式舉例如下: 65971.333333 -十進(jìn)制浮點(diǎn)數(shù) 8#43.6#e+4 -八進(jìn)制浮點(diǎn)數(shù) 43.6e-4 -十進(jìn)制浮點(diǎn)數(shù)第3章 vhdl編程基礎(chǔ) 8) 字符串(string)數(shù)據(jù)類型 字符串?dāng)?shù)據(jù)類型是字符數(shù)據(jù)類型的一個(gè)非約束型數(shù)組,或稱為字符串?dāng)?shù)組。字符串必須用雙引號(hào)標(biāo)明。如:variable string_va
47、rstring(1 to 7);string_var“a b c d”;第3章 vhdl編程基礎(chǔ) 9) 時(shí)間(time)數(shù)據(jù)類型 vhdl中惟一的預(yù)定義物理類型是時(shí)間。完整的時(shí)間類型包括整數(shù)和物理量單位兩部分,整數(shù)和單位之間至少留一個(gè)空格,如55 ms,20 ns。第3章 vhdl編程基礎(chǔ) standard 程序包中也定義了時(shí)間。定義如下:type time is range -2147483647 to 2147483647units fs; -飛秒,vhdl中的最小時(shí)間單位 ps = 1000 fs; -皮秒 ns = 1000 ps; -納秒 us = 1000 ns; -微秒 ms =
48、 1000 us; -毫秒 sec = 1000 ms; -秒 min = 60 sec; -分 hr = 60 min; -時(shí)end untis;第3章 vhdl編程基礎(chǔ) 10) 錯(cuò)誤等級(severity_level) 在vhdl仿真器中,錯(cuò)誤等級用來指示設(shè)計(jì)系統(tǒng)的工作狀態(tài),共有四種可能的狀態(tài)值:note(注意)、warning(警告)、error(出錯(cuò))、failure(失敗)。在仿真過程中,可輸出這四種值來提示被仿真系統(tǒng)當(dāng)前的工作情況。其定義如下: type severity_level is (note,warning,error,failure);第3章 vhdl編程基礎(chǔ) 2. i
49、eee預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量預(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_1164中的數(shù)據(jù)類型 以下是定義在ieee庫程序包std_logic_1164中的數(shù)據(jù)類型。數(shù)據(jù)類型std_logic的定義如下所示: type std_logic is (u,x,0,1,z,w,l,h,-);第3章 vhdl編程基礎(chǔ) 各值的含義是: u-未初始化的,x-強(qiáng)未知的,0-強(qiáng)0,1-強(qiáng)1,z-高阻態(tài),w-弱未知的,l-弱0,h-弱1
50、, -忽略。 在程序中使用此數(shù)據(jù)類型前,需加入下面的語句:library ieee;use ieee.std_logic_1164.all;第3章 vhdl編程基礎(chǔ) 由定義可見,std_logic是標(biāo)準(zhǔn)的bit數(shù)據(jù)類型的擴(kuò)展,共定義了9種值,這意味著,對于定義為數(shù)據(jù)類型是標(biāo)準(zhǔn)邏輯位std_logic的數(shù)據(jù)對象,其可能的取值已非傳統(tǒng)的bit那樣只有0和1兩種取值,而是如上定義的那樣有9種可能的取值。目前在設(shè)計(jì)中一般只使用ieee的std_logic標(biāo)準(zhǔn)邏輯的位數(shù)據(jù)類型,bit型則很少使用。 由于標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型的多值性,在編程時(shí)應(yīng)當(dāng)特別注意。因?yàn)樵跅l件語句中,如果未考慮到std_logic的所
51、有可能的取值情況,綜合器可能會(huì)插入不希望的鎖存器。第3章 vhdl編程基礎(chǔ) 程序包std_logic_1164中還定義了std_logic型邏輯運(yùn)算符and、nand、or、nor、xor和not的重載函數(shù),以及兩個(gè)轉(zhuǎn)換函數(shù),用于bit與std_logic的相互轉(zhuǎn)換。 在仿真和綜合中,std_logic值是非常重要的,它可以使設(shè)計(jì)者精確模擬一些未知和高阻態(tài)的線路情況。對于綜合器,高阻態(tài)和“-”忽略態(tài)可用于三態(tài)的描述。但就綜合而言,std_logic型數(shù)據(jù)能夠在數(shù)字器件中實(shí)現(xiàn)的只有其中的4種值,即“-”、“0”、“1”和“z”。當(dāng)然,這并不表明其余的5種值不存在。這9種值對于vhdl的行為仿真都
52、有重要意義。第3章 vhdl編程基礎(chǔ) 2) 標(biāo)準(zhǔn)邏輯矢量(std_logic_vector)數(shù)據(jù)類型 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。 std_logic_vector數(shù)據(jù)類型的數(shù)據(jù)對象賦值的原則是:同位寬、同數(shù)據(jù)類型的矢量間才能進(jìn)行賦值。下例描述的是cpu中數(shù)據(jù)總線上位矢賦值的操作示意情況
53、,注意例中信號(hào)數(shù)據(jù)類型定義和賦值操作中信號(hào)的數(shù)組位寬。第3章 vhdl編程基礎(chǔ) 【例3.3.1】type t_data is array(7 downto 0) of std_logic;- 自定義數(shù)組類型signal databus,memory:t_data;-定義信號(hào)databus,memorycpuprocess -cpu工作進(jìn)程開始var1able reg1t_data -定義寄存器變量reg1begin databus=reg1; -向8位數(shù)據(jù)總線賦值end process cpu; -cpu工作進(jìn)程結(jié)束memprocess -ram工作進(jìn)程開始begin databus=memo
54、ry; end process mem;第3章 vhdl編程基礎(chǔ) 3. 其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型其他預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類型 vhdl綜合工具配帶的擴(kuò)展程序包中,定義了一些有用的類型。如synopsys公司在ieee庫中加入的程序包std_logic_arith中定義了如下的數(shù)據(jù)類型:無符號(hào)型(unsigned)、 有符號(hào)型(signed)、小整型(small _int)。 在程序包std_logic_arith中的類型定義如下:type unsigned is array (natural range ) of std_logic;type signed is array (natural rang
55、e) of std_logic;subtype small_int is integer range 0 to 1;第3章 vhdl編程基礎(chǔ) 如果將信號(hào)或變量定義為這幾個(gè)數(shù)據(jù)類型,就可以使用本程序包中定義的運(yùn)算符。在使用之前,請注意必須加入下面的語句:library ieee;use ieee.std_logic_arith.all; unsigned類型和signed類型是用來設(shè)計(jì)可綜合的數(shù)學(xué)運(yùn)算程序的重要類型,unsigned用于無符號(hào)數(shù)的運(yùn)算,signed用于有符號(hào)數(shù)的運(yùn)算。在實(shí)際應(yīng)用中,大多數(shù)運(yùn)算都需要用到它們。第3章 vhdl編程基礎(chǔ) 在ieee程序包中,unmeric_std和nu
56、meric_bit程序包中也定義了unsigned型及signed型,numeric_std是針對于std_logic型定義的,而numeric_bit是針對于bit 型定義的。在程序包中還定義了相應(yīng)的運(yùn)算符重載函數(shù)。有些綜合器沒有附帶std_logic_arith程序包,此時(shí)只能使用number_std和numeric_bit程序包。 在standard程序包中沒有定義std_logic_vector的運(yùn)算符,而整數(shù)類型一般只在仿真的時(shí)候用來描述算法,或作數(shù)組下標(biāo)運(yùn)算,因此unsigned和signed的使用率是很高的。第3章 vhdl編程基礎(chǔ) 1) 無符號(hào)數(shù)據(jù)類型(unsigned typ
57、e) unsigned數(shù)據(jù)類型代表一個(gè)無符號(hào)的數(shù)值,在綜合器中,這個(gè)數(shù)值被解釋為一個(gè)二進(jìn)制數(shù),這個(gè)二進(jìn)制數(shù)的最左位是其最高位。例如,十進(jìn)制的8可以作如下表示: unsigned(“1000) 如果要定義一個(gè)變量或信號(hào)的數(shù)據(jù)類型為unsigned,則其位矢長度越長,所能代表的數(shù)值就越大。如一個(gè)4位變量的最大值為15,一個(gè)8位變量的最大值則為255,0是其最小值,不能用unsigned定義負(fù)數(shù)。以下是兩則無符號(hào)數(shù)據(jù)定義的示例:第3章 vhdl編程基礎(chǔ) variable varunsigned(0 to 10);signal sigunsigned(5 to 0); 其中,變量var有11位數(shù)值,最
58、高位是var(0),而非var(10);信號(hào)sig有6位數(shù)值,最高位是sig(5)。第3章 vhdl編程基礎(chǔ) 2) 有符號(hào)數(shù)據(jù)類型(signed type) signed數(shù)據(jù)類型表示一個(gè)有符號(hào)的數(shù)值,綜合器將其解釋為補(bǔ)碼,此數(shù)的最高位是符號(hào)位,例如:signed(“0101”) 代表+5,5;signed(“1011”) 代表-5。 若將上例的var定義為signed數(shù)據(jù)類型,則數(shù)值意義就不同了,如: variable varsigned(0 to 10);其中,變量var有11位,最左位var(0)是符號(hào)位。第3章 vhdl編程基礎(chǔ) 4. 用戶自定義數(shù)據(jù)類型方式用戶自定義數(shù)據(jù)類型方式 vhd
59、l允許用戶自行定義新的數(shù)據(jù)類型,它們可以有多種,如枚舉類型(enumera- tion type)、整數(shù)類型(integer type)、數(shù)組類型(array type)、記錄類型(record type)、時(shí)間類型(time type)、實(shí)數(shù)類型(real type)等。用戶自定義數(shù)據(jù)類型是用類型定義語句type和子類型定義語句subtype實(shí)現(xiàn)的,以下將介紹這兩種語句的使用方法。第3章 vhdl編程基礎(chǔ) 1) type語句用法 type語句語法結(jié)構(gòu)如下: type 數(shù)據(jù)類型名 is 數(shù)據(jù)類型定義 of 基本數(shù)據(jù)類型; 其中,數(shù)據(jù)類型名由設(shè)計(jì)者自定;數(shù)據(jù)類型定義部分用來描述所定義的數(shù)據(jù)類型的
60、表達(dá)方式和表達(dá)內(nèi)容;關(guān)鍵詞of后的基本數(shù)據(jù)類型是指數(shù)據(jù)類型定義中所定義的元素的基本數(shù)據(jù)類型,一般都是取已有的預(yù)定義數(shù)據(jù)類型,如bit、std_logic或integer等。第3章 vhdl編程基礎(chǔ) 以下列出了兩種不同的定義方式: type st1 is array(0 to 15)of std_logic; type week is (sun,mon,tue,wed,thu,fri,sat); 第一句定義的數(shù)據(jù)st1是一個(gè)具有16個(gè)元素的數(shù)組型數(shù)據(jù)類型,數(shù)組中的每一個(gè)元素的數(shù)據(jù)類型都是std_logic型;第二句所定義的數(shù)據(jù)類型是由一組文字表示的,而其中的每一文字都代表一個(gè)具體的數(shù)值,如可令s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出口種子銷售合同范本
- 轉(zhuǎn)賣音響合同范本
- 勞務(wù)外包合同范例
- 中介委托租房電子合同范本
- 凱倫股合同范本
- 養(yǎng)牛合伙合同范本
- 北海吊車出租合同范本
- 公司中途入股合同范本
- 產(chǎn)品服務(wù)合同范例
- 農(nóng)村轉(zhuǎn)讓土地合同范本
- 燒烤配方出售合同范例
- 婦科手術(shù)麻醉
- Unit1RelationshipsLesson2HowDoWeLikeTeachers'Feedback課件高中英語北師大版選擇性
- 加油站加油合同范本
- 庫存管理規(guī)劃
- 河南省南陽市2024-2025學(xué)年七年級上學(xué)期期末模擬英語試題(含答案)
- 煤礦員工安全培訓(xùn)教材一通三防篇
- 表演課程教案完整版
- 2024年新疆區(qū)公務(wù)員錄用考試《行測》試題及答案解析
- 灌籃高手培訓(xùn)課件
- 小學(xué)生心理健康講座5
評論
0/150
提交評論