版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第九章 VHDL程序基礎(chǔ)n9.1 VHDL程序結(jié)構(gòu)n9.2 VHDL的語(yǔ)言元素n9.3 VHDL的基本描述語(yǔ)句n9.4 VHDL結(jié)構(gòu)體的三種描述方法n9.5 有限狀態(tài)機(jī)的設(shè)計(jì)硬件描述語(yǔ)言VHDLVHDL的英文全稱是VHSIC (Very High Speed Integrated Circuits) Hardware Description Language。于1983年由美國(guó)國(guó)防部提出,由IEEE 進(jìn)一步發(fā)展,并在1987年12月作為IEEE-STD-1076標(biāo)準(zhǔn)公布發(fā)行, 1993年被更新為IEEE-STD-1164-1993,目前已被廣泛應(yīng)用。1995年我國(guó)技術(shù)監(jiān)督局制定的CAD通用技術(shù)
2、規(guī)范推薦VHDL作為我國(guó)電子設(shè)計(jì)自動(dòng)化硬件描述語(yǔ)言的國(guó)家標(biāo)準(zhǔn)。至此,VHDL在我國(guó)迅速普及,現(xiàn)在已成為從事硬件電路設(shè)計(jì)開發(fā)人員所必須掌握 的一門 技術(shù)。硬件描述語(yǔ)言VHDL的特點(diǎn)1、支持自頂向下的設(shè)計(jì)方法2、系統(tǒng)硬件描述能力強(qiáng)行為描述、數(shù)據(jù)流描述、結(jié)構(gòu)描述。3、系統(tǒng)仿真能力強(qiáng)4、工藝無(wú)關(guān)性初學(xué)者如何學(xué)好初學(xué)者如何學(xué)好VHDLVHDL1 1、掌握時(shí)鐘的概念。、掌握時(shí)鐘的概念。2 2、注意、注意VHDLVHDL編程與軟件編程的差別。編程與軟件編程的差別。3 3、語(yǔ)法學(xué)習(xí)貴精不貴多,靠練不靠背。、語(yǔ)法學(xué)習(xí)貴精不貴多,靠練不靠背。4 4、注意、注意VHDLVHDL語(yǔ)句的可綜合性。語(yǔ)句的可綜合性。n9.
3、1.1 VHDL程序基本結(jié)構(gòu)例1 一個(gè)2輸入的與門的邏輯描述LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY and2 ISPORT(a,b: IN STD_LOGIC; y : OUT STD_LOGIC);END and2;ARCHITECTURE and2x OF and2 ISBEGINy=a AND b;END and2x;實(shí)體部分實(shí)體部分結(jié)構(gòu)體部分結(jié)構(gòu)體部分庫(kù)庫(kù)(Library)包包(Package)實(shí)體實(shí)體 Entity 結(jié)構(gòu)體結(jié)構(gòu)體Architecture 配置配置Configuration 存放已編譯的實(shí)體、結(jié)構(gòu)體、包集合和配
4、置存放已編譯的實(shí)體、結(jié)構(gòu)體、包集合和配置存放各設(shè)計(jì)模塊能共享的數(shù)據(jù)類型、常數(shù)、存放各設(shè)計(jì)模塊能共享的數(shù)據(jù)類型、常數(shù)、子程序等。子程序等。定義電路的輸入定義電路的輸入/輸出接口輸出接口描述電路內(nèi)部的功能。描述電路內(nèi)部的功能。決定哪一個(gè)結(jié)構(gòu)體被使用。決定哪一個(gè)結(jié)構(gòu)體被使用。VHDL程序基本結(jié)構(gòu)VHDL中常用的資源庫(kù)為IEEE庫(kù)。 IEEE庫(kù): 常用的資源庫(kù)。IEEE庫(kù)中的三個(gè)重要的包集合:STD_LOGIC_1164STD_LOGIC_ARITH(算術(shù)運(yùn)算庫(kù))、STD_LOGIC_UNSIGNED等 庫(kù)(LIBRARY)庫(kù)說(shuō)明語(yǔ)句的語(yǔ)法形式為: LIBRARY 庫(kù)名; -說(shuō)明使用什么庫(kù) USE 庫(kù)
5、名.程序包名.項(xiàng)目名;-說(shuō)明使用庫(kù)中哪個(gè)程序包及 包集合中的項(xiàng)目;庫(kù)和程序包的用法LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; WORK庫(kù):庫(kù):WORK庫(kù)是現(xiàn)行作業(yè)庫(kù)。設(shè)計(jì)者所描述的庫(kù)是現(xiàn)行作業(yè)庫(kù)。設(shè)計(jì)者所描述的VHDL語(yǔ)句不需要任何說(shuō)明,將都存放在語(yǔ)句不需要任何說(shuō)明,將都存放在WORK庫(kù)中。庫(kù)中。WORK庫(kù)對(duì)庫(kù)對(duì)所有設(shè)計(jì)都是隱含可見的,因此在使用該庫(kù)時(shí)無(wú)需進(jìn)行任何說(shuō)所有設(shè)計(jì)都是隱含可見的,因此在使用該庫(kù)時(shí)無(wú)需進(jìn)行任何說(shuō)明。明。一點(diǎn)注意
6、:要求:設(shè)計(jì)文件不能直接存放在根目錄下,必須建立一個(gè)英文文件夾,系統(tǒng)自動(dòng)將其視為work庫(kù)。實(shí)體的一般格式為:ENTITY 實(shí)體名 IS類屬參數(shù)說(shuō)明;端口說(shuō)明;END; 實(shí)體名必須與文件名相同。 ENTITY、IS、END是VHDL的關(guān)鍵字(保留字)。 實(shí)體名、端口名等均應(yīng)為符合VHDL命名規(guī)則的標(biāo)識(shí)符。 端口:指實(shí)體中的每一個(gè)I/O信號(hào),其功能對(duì)應(yīng)于電路 圖符號(hào)的一個(gè)引腳。端口說(shuō)明則是對(duì)一個(gè)實(shí)體的一組端口的定義,即對(duì)基本設(shè)計(jì)實(shí)體與外部接口的描述。端口是設(shè)計(jì)實(shí)體和外部環(huán)境動(dòng)態(tài)通信的通道。實(shí)體(ENTITY)ENTITY and2 IS END and2;端口說(shuō)明的一般格式為: PORT(端口名
7、,端口名:端口模式 數(shù)據(jù)類型; 端口名,端口名:端口模式 數(shù)據(jù)類型); 端口模式用來(lái)說(shuō)明數(shù)據(jù)傳輸通過該端口的方向。端口模式有以下幾類: IN(輸入):僅允許數(shù)據(jù)流進(jìn)入端口。主要用于時(shí)鐘輸入、控制輸入、單向數(shù)據(jù)輸入。 OUT(輸出):僅允許數(shù)據(jù)流由實(shí)體內(nèi)部流出端口。該模式通常用于終端計(jì)數(shù)一類的輸出,不能用于反饋。 BUFFER(緩沖):該模式允許數(shù)據(jù)流出該實(shí)體和作為內(nèi)部反饋時(shí)用,但不允許作為雙向端口使用。 INOUT(雙向):可以允許數(shù)據(jù)流入或流出該實(shí)體。該模式也允許用于內(nèi)部反饋。如果端口模式?jīng)]有指定,則該端口處于缺省模式為:IN 。數(shù)據(jù)類型原則上可以是任何標(biāo)準(zhǔn)的數(shù)據(jù)類型和用戶自定義類型。ini
8、ninoutoutbufferinoutmodemode模式及其信號(hào)源模式及其信號(hào)源補(bǔ)充說(shuō)明:補(bǔ)充說(shuō)明:1) 在端口說(shuō)明時(shí),可將幾個(gè)同樣方向、同樣數(shù)據(jù)類在端口說(shuō)明時(shí),可將幾個(gè)同樣方向、同樣數(shù)據(jù)類型的端口放在同一說(shuō)明語(yǔ)句里。型的端口放在同一說(shuō)明語(yǔ)句里。2) 最后一條端口說(shuō)明語(yǔ)句后不加分號(hào);最后一條端口說(shuō)明語(yǔ)句后不加分號(hào);PORT (a,b: IN STD_LOGIC; y : OUT STD_LOGIC);ENTITY add4 ISPORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0); Ci: IN STD_LOGIC; Sum: OUT STD_LOGIC_V
9、ECTOR(3 downto 0); Co: OUT STD_LOGIC);END add4;add4a3.0b3.0Sum3.0CiCo例例3 3: 四位加法器實(shí)體說(shuō)明程序四位加法器實(shí)體說(shuō)明程序結(jié)構(gòu)體的一般格式如下:ARCHITECTURE 結(jié)構(gòu)體名 OF 實(shí)體名 IS結(jié)構(gòu)體說(shuō)明部分;BEGIN并發(fā)處理語(yǔ)句;END 結(jié)構(gòu)體名; 1) 實(shí)體名必須與實(shí)體聲明部分所取的名字相同; 而結(jié)構(gòu)體名可由設(shè)計(jì)者自由選擇;ARCHITECTURE and2x OF and2 ISBEGINy=a AND b;END and2x;結(jié)構(gòu)體(ARCHITECTURE )結(jié)構(gòu)體的一般格式如下:ARCHITECTURE
10、 結(jié)構(gòu)體名 OF 實(shí)體名 IS結(jié)構(gòu)體說(shuō)明部分;BEGIN并發(fā)處理語(yǔ)句;END 結(jié)構(gòu)體名; 2) 結(jié)構(gòu)體說(shuō)明是指對(duì)結(jié)構(gòu)體需要使用的信號(hào)、常數(shù)、數(shù)據(jù)類 型和函數(shù)進(jìn)行定義和說(shuō)明。聲明語(yǔ)句所聲明的內(nèi)容只能用于該結(jié)構(gòu)體中,若希望在其他的實(shí)體或結(jié)構(gòu)體中引用這些定義,則須用包聲明(PACKAGE).3) 并發(fā)處理語(yǔ)句位于BEGIN和END之間,這些語(yǔ)句具體地描述了構(gòu)造體的行為。并發(fā)處理語(yǔ)句是功能描述的核心部分,也是變化最豐富的部分。并發(fā)處理語(yǔ)句塊語(yǔ)句塊語(yǔ)句(BLOCK)進(jìn)程語(yǔ)句進(jìn)程語(yǔ)句(PROCESS)信號(hào)賦值語(yǔ)句信號(hào)賦值語(yǔ)句子程序調(diào)用子程序調(diào)用:調(diào)用過程調(diào)用過程(PROCEDURE)和函數(shù)和函數(shù)(FUNC
11、TION)元件例化語(yǔ)句(元件例化語(yǔ)句(COMPONENT)配置的基本格式為: CONFIGURATION 配置名 OF 實(shí)體名 IS配置說(shuō)明; END 配置名; 配置語(yǔ)句描述了層與層之間的連接關(guān)系,以及實(shí)體與構(gòu)造體之間的連接關(guān)系。設(shè)計(jì)者可以利用配置語(yǔ)句選擇不同的構(gòu)造體,使其與要設(shè)計(jì)的實(shí)體相對(duì)應(yīng);在仿真某一個(gè)實(shí)體時(shí),可以利用配置選擇不同的構(gòu)造體進(jìn)行性能對(duì)比實(shí)驗(yàn),以得到性能最佳的構(gòu)造體。配置配置(CONFIGURATION) 配置語(yǔ)句根據(jù)不同情況,其說(shuō)明語(yǔ)句有簡(jiǎn)有繁。最簡(jiǎn)單的缺省配置格式為: CONFIGURATION 配置名 OF 實(shí)體名 IS FOR 選配結(jié)構(gòu)體名 END FOR; END 配
12、置名; 例4:加入了配置的4位等值比較器設(shè)計(jì)文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY comp4 IS PORT(a, b: IN STD_LOGIC_VECTOR(3 downto 0); y: OUT STD_LOGIC);END comp4;-結(jié)構(gòu)體結(jié)構(gòu)體 1:ARCHITECTURE behavior OF comp4 ISBEGINComp: PROCESS(a, b) BEGIN IF a=b THEN y=1; ELSE y=0; END IF; END PROCESS comp;END behavior;-結(jié)構(gòu)體結(jié)構(gòu)體
13、2:ARCHITECTURE dataflow OF comp4 ISBEGIN y=1 WHEN(a=b) ELSE 0;END dataflow;-結(jié)構(gòu)體結(jié)構(gòu)體 3:ARCHITECTURE structural OF comp4 IS COMPONENT xnor2 PORT(in1, in2: IN STD_LOGIC; Out: OUT STD_LOGIC); END COMPONENT; COMPONENT and4 PORT(in1, in2, in3, in4: IN STD_LOGIC; Out: OUT STD-LOGIC); END COMPONENT; SIGNAL s
14、: STD_LOGIC_VECTOR(0 to 3);BEGIN u0: xnor2 PORT MAP(a(0),b(0),s(0); u1: xnor2 PORT MAP(a(1),b(1),s(1); u2: xnor2 PORT MAP(a(2),b(2),s(2); u3: xnor2 PORT MAP(a(3),b(3),s(3); u4: and4 PORT MAP(s(0),s(1),s(2),s(3),y);END structural;-配置 :CONFIGURATION comp4_con OF comp4 IS FOR behavior END FOR;END comp4
15、_con;ys0b0a0b1a1b2a2b3a3s1s2s3abu0u1u3u2u44位等值比較器9.2 VHDL的語(yǔ)言元素9.2.1 標(biāo)識(shí)符標(biāo)識(shí)符 由英文字母、數(shù)字以及下劃線字符組成,且: 第一個(gè)字符必須是英文字母; 最后一個(gè)字符不能是下劃線; 不允許連續(xù)兩個(gè)下劃線; 在標(biāo)識(shí)符中大、小寫字母是等效的。 VHDL中的注釋文字一律為2個(gè)連續(xù)的連接線“-”,可以出現(xiàn)在任一語(yǔ)句后面,也可以出現(xiàn)在獨(dú)立行; VHDL的保留字(關(guān)鍵字)不能用于標(biāo)識(shí)符;例如:如下標(biāo)識(shí)符是合法的:例如:如下標(biāo)識(shí)符是合法的: tx_clk Three_state_Enable sel7D HIT_1124 如下標(biāo)識(shí)符是非法的:
16、如下標(biāo)識(shí)符是非法的: _ tx_clk -標(biāo)識(shí)符必須起始于英文字母 8B10B -標(biāo)識(shí)符必須起始于英文字母 large#number -只能是英文字母、數(shù)字、下劃線 link_ _bar -不能有連續(xù)兩個(gè)下劃線 select -關(guān)鍵字(保留字)不能用于標(biāo)識(shí)符 rx_clk_ -最后字符不能是下劃線9.2.2 數(shù)據(jù)對(duì)象 在VHDL中,數(shù)據(jù)對(duì)象是可以賦予一個(gè)值的客體。常用的數(shù)據(jù)對(duì)象為常量、變量和信號(hào),在使用前必須給予定義。 常量(CONSTANT) 常量是指那些在設(shè)計(jì)描述中不會(huì)變化的值。常量說(shuō)明的一般格式如下: CONSTANT 常量名,常量名:數(shù)據(jù)類型 := 取值; 例如:例如: CONSTAN
17、T width: integer : = 8 變量(VARIABLE) 變量是暫存數(shù)據(jù)的量。變量說(shuō)明的語(yǔ)法格式是: VARIABLE 變量名,變量名:數(shù)據(jù)類型 :=初始值; 例如:VARIABLE count: INTEGER RANGE 0 TO 99 : =0 變量只用于進(jìn)程和子程序,它是一個(gè)局部量。變量必須在進(jìn)程或子程序的說(shuō)明性區(qū)域加以說(shuō)明。 變量的初始值賦值只在仿真時(shí)有用,而在綜合時(shí)無(wú)用;變量賦值語(yǔ)句格式為: 目標(biāo)變量名 := 表達(dá)式; 賦值語(yǔ)句中的表達(dá)式必須與目標(biāo)變量具有相同的數(shù)據(jù)類型。賦值語(yǔ)句中的表達(dá)式必須與目標(biāo)變量具有相同的數(shù)據(jù)類型。變量賦值是立即生效,不存在延時(shí)行為。變量常用在
18、實(shí)現(xiàn)某種運(yùn)算的賦變量賦值是立即生效,不存在延時(shí)行為。變量常用在實(shí)現(xiàn)某種運(yùn)算的賦值語(yǔ)句中。值語(yǔ)句中。 信號(hào)(SIGNAL) 信號(hào)是電子電路內(nèi)部硬件實(shí)體相互連接的抽象表示。信號(hào)能夠代表連線,也可內(nèi)連元件,端口也是信號(hào)。信號(hào)說(shuō)明的語(yǔ)法格式為: SIGNAL 信號(hào)名,信號(hào)名 :數(shù)據(jù)類型 :=初始值; 例如: SIGNAL count: BIT_VECTOR(3 downto 0); 信號(hào)包括I/O引腳信號(hào)以及IC內(nèi)部緩沖信號(hào),有硬件電路與 之對(duì)應(yīng),故信號(hào)之間的傳遞有實(shí)際的附加延時(shí)。 信號(hào)通常在構(gòu)造體、包集合和實(shí)體中說(shuō)明;信號(hào)不能在 進(jìn)程中說(shuō)明(但可以在進(jìn)程中使用)。信號(hào)賦值語(yǔ)句格式為: 目標(biāo)信號(hào)名 =
19、 表達(dá)式; 賦值語(yǔ)句中的表達(dá)式必須與目標(biāo)信號(hào)具有相同的數(shù)據(jù)類型。1.1. 聲明形式與賦值符號(hào)不同;聲明形式與賦值符號(hào)不同;2.2. 有效域不同。信號(hào)可在結(jié)構(gòu)體、進(jìn)程外定義;而變量有效域不同。信號(hào)可在結(jié)構(gòu)體、進(jìn)程外定義;而變量在進(jìn)程內(nèi)定義。即:在進(jìn)程內(nèi)定義。即:變量變量是一個(gè)局部量,只能用于進(jìn)是一個(gè)局部量,只能用于進(jìn)程或子程序中;程或子程序中;信號(hào)信號(hào)是一個(gè)全局量,它可以用來(lái)進(jìn)行是一個(gè)全局量,它可以用來(lái)進(jìn)行進(jìn)程之間的通信。進(jìn)程之間的通信。3.3. 信號(hào)賦值信號(hào)賦值可以出現(xiàn)在進(jìn)程中,也可以直接出現(xiàn)在結(jié)構(gòu)可以出現(xiàn)在進(jìn)程中,也可以直接出現(xiàn)在結(jié)構(gòu)體中,但它們的體中,但它們的運(yùn)行含義運(yùn)行含義不同:不同:前
20、者前者屬順序信號(hào)賦值,屬順序信號(hào)賦值,此時(shí)的賦值操作要視進(jìn)程是否已被啟動(dòng);此時(shí)的賦值操作要視進(jìn)程是否已被啟動(dòng);后者后者屬并行屬并行信號(hào)賦值,其賦值操作是各自獨(dú)立并行發(fā)生的。信號(hào)賦值,其賦值操作是各自獨(dú)立并行發(fā)生的。 4. 在進(jìn)程中在進(jìn)程中變量和信號(hào)的賦值形式與操作過程不同變量和信號(hào)的賦值形式與操作過程不同: 在變量的賦值語(yǔ)句中在變量的賦值語(yǔ)句中,該語(yǔ)句一旦被執(zhí)行,其值立即被賦,該語(yǔ)句一旦被執(zhí)行,其值立即被賦予變量。在執(zhí)行下一條語(yǔ)句時(shí),該變量的值即為上一句新賦的予變量。在執(zhí)行下一條語(yǔ)句時(shí),該變量的值即為上一句新賦的值。值。 在信號(hào)的賦值語(yǔ)句中在信號(hào)的賦值語(yǔ)句中,該語(yǔ)句即使被執(zhí)行,其值不會(huì)使信,該
21、語(yǔ)句即使被執(zhí)行,其值不會(huì)使信號(hào)立即發(fā)生代入,在下一條語(yǔ)句執(zhí)行時(shí),仍使用原來(lái)的信號(hào)值。號(hào)立即發(fā)生代入,在下一條語(yǔ)句執(zhí)行時(shí),仍使用原來(lái)的信號(hào)值。直到進(jìn)程結(jié)束之后,所有信號(hào)賦值的實(shí)際代入才順序進(jìn)行處理。直到進(jìn)程結(jié)束之后,所有信號(hào)賦值的實(shí)際代入才順序進(jìn)行處理。因此,實(shí)際代入過程和賦值語(yǔ)句的執(zhí)行是分開進(jìn)行的。如例因此,實(shí)際代入過程和賦值語(yǔ)句的執(zhí)行是分開進(jìn)行的。如例1212所示。所示。5、可在不同的進(jìn)程中讀取一個(gè)信號(hào),可在不同的進(jìn)程中讀取一個(gè)信號(hào),但不能在不同的進(jìn)程中但不能在不同的進(jìn)程中對(duì)同一個(gè)信號(hào)進(jìn)行賦值。對(duì)同一個(gè)信號(hào)進(jìn)行賦值。6 6、在同一進(jìn)程中對(duì)同一信號(hào)進(jìn)行多次賦值操作時(shí),、在同一進(jìn)程中對(duì)同一信號(hào)進(jìn)
22、行多次賦值操作時(shí),只有最后只有最后一次會(huì)生效。一次會(huì)生效。例例12 12 信號(hào)和變量值代入的區(qū)別舉例信號(hào)和變量值代入的區(qū)別舉例 PROCESS (a,b,c,d)BEGIN d=a; x=b+d; d=c; y=b+d; END PROCESS;結(jié)果:結(jié)果:x=b+c; y=b+c;PROCESS (a,b,c)VARIABLE d:std_logic_vector(3 downto 0);BEGIN d:=a; x=b+d; d:=c; y=b+d;END PROCESS;結(jié)果:結(jié)果: x=b+a;y=b+c;當(dāng)進(jìn)程運(yùn)行時(shí),信號(hào)賦值將自當(dāng)進(jìn)程運(yùn)行時(shí),信號(hào)賦值將自上而下順序執(zhí)行,但第一項(xiàng)賦上而
23、下順序執(zhí)行,但第一項(xiàng)賦值操作并不會(huì)發(fā)生,這是因?yàn)橹挡僮鞑⒉粫?huì)發(fā)生,這是因?yàn)樾盘?hào)賦值是在進(jìn)程結(jié)束時(shí)才起信號(hào)賦值是在進(jìn)程結(jié)束時(shí)才起作用。因?yàn)樵谶M(jìn)程結(jié)束更新時(shí),作用。因?yàn)樵谶M(jìn)程結(jié)束更新時(shí),d d的最后一個(gè)賦值為的最后一個(gè)賦值為c c ,因此執(zhí),因此執(zhí)行結(jié)果為該式。行結(jié)果為該式。9.2.3 數(shù)據(jù)類型 VHDL是一種是一種類型型很強(qiáng)的語(yǔ)言類型型很強(qiáng)的語(yǔ)言。 VHDL中只有相同數(shù)據(jù)類型的量,中只有相同數(shù)據(jù)類型的量, 才能相互之間發(fā)生作用。才能相互之間發(fā)生作用。VHDL預(yù)定義數(shù)據(jù)類型1.整數(shù)(整數(shù)(INTEGER):):取值范圍為取值范圍為 (2311)(2311)。)。variable a: intege
24、r range 255 to 255;2.布爾量(布爾量( Boolean ):取值為取值為TURE 、FALSE; 用于邏輯用于邏輯(關(guān)系)運(yùn)算。(關(guān)系)運(yùn)算。3.位位(BIT):只有兩種取值,即只有兩種取值,即0和和1,可用于描述信號(hào)的取值,可用于描述信號(hào)的取值.4.位矢量位矢量(BIT_VECTOR):是用雙引號(hào)括起來(lái)的一組數(shù)據(jù),是用雙引號(hào)括起來(lái)的一組數(shù)據(jù),每位只有兩種取值:每位只有兩種取值:0 和和 1。在其前面可加以數(shù)制標(biāo)記,。在其前面可加以數(shù)制標(biāo)記,如如X(16進(jìn)制)、進(jìn)制)、B(2進(jìn)制、默認(rèn))、進(jìn)制、默認(rèn))、O(8進(jìn)制)等。位進(jìn)制)等。位矢量常用于表示總線的狀態(tài)。矢量常用于表示總
25、線的狀態(tài)。Data=O“15”Data=B“1101”SIGNAL a: BIT_VECTOR(0 TO 3);SIGNAL a: BIT_VECTOR(3 DOWNTO0);5.Real(實(shí)數(shù))。取值范圍為(實(shí)數(shù))。取值范圍為 1.0E+38 +1.0E+38。由于實(shí)數(shù)運(yùn)。由于實(shí)數(shù)運(yùn)算需要大量的資源,因此綜合工具常常并不支持實(shí)數(shù)類型。算需要大量的資源,因此綜合工具常常并不支持實(shí)數(shù)類型。6.Time(時(shí)間)。時(shí)間的取值范圍從(時(shí)間)。時(shí)間的取值范圍從 (2311)到()到(2311)。時(shí)間)。時(shí)間由整數(shù)值、一個(gè)以上空格以及時(shí)間單位組成。常用的時(shí)間單位有:由整數(shù)值、一個(gè)以上空格以及時(shí)間單位組成。
26、常用的時(shí)間單位有:fs、ns、s、ms、s、min、hr等。時(shí)間是一個(gè)具有量綱的數(shù)據(jù),故只能用等。時(shí)間是一個(gè)具有量綱的數(shù)據(jù),故只能用于指定時(shí)間延時(shí)和仿真過程,而綜合器并不支持。于指定時(shí)間延時(shí)和仿真過程,而綜合器并不支持。7.Natural(自然數(shù))和(自然數(shù))和Positive(正整數(shù))。是整數(shù)類型的子類型。自(正整數(shù))。是整數(shù)類型的子類型。自然數(shù)取值范圍為然數(shù)取值范圍為0 (2311);正整數(shù)是大于);正整數(shù)是大于0的整數(shù)。的整數(shù)。8.Severity Level(錯(cuò)誤等級(jí))。錯(cuò)誤等級(jí)分為:(錯(cuò)誤等級(jí))。錯(cuò)誤等級(jí)分為:NOTE(注意注意)、WARNING(警告)、(警告)、ERROR(出錯(cuò))
27、、(出錯(cuò))、FAILURE(失?。┧募?jí),用(失敗)四級(jí),用于提示系統(tǒng)的錯(cuò)誤等級(jí)。于提示系統(tǒng)的錯(cuò)誤等級(jí)。 只用于仿真。只用于仿真。9.Character(字符)。是用單引號(hào)括起來(lái)的一個(gè)字母、數(shù)字、(字符)。是用單引號(hào)括起來(lái)的一個(gè)字母、數(shù)字、空格或一些特殊字符(如空格或一些特殊字符(如$、%等)。等)。字符區(qū)分大、小字符區(qū)分大、小寫字母寫字母。10.String(字符串)。是用雙引號(hào)括起來(lái)的一個(gè)字符序列。(字符串)。是用雙引號(hào)括起來(lái)的一個(gè)字符序列。字符串區(qū)分大、小寫字母。字符串區(qū)分大、小寫字母。常用于程序的提示和結(jié)果說(shuō)明等。常用于程序的提示和結(jié)果說(shuō)明等。IEEE預(yù)定義標(biāo)準(zhǔn)邏輯位(STD_LOGIC
28、)和矢量(STD_LOGIC_VECTOR)TYPE STD_LOGIC ISU, -未初始化的X , -不定態(tài)0 , -01 , -1Z , -高阻態(tài)W , -弱信號(hào)不定態(tài)L , -弱信號(hào)0H , -弱信號(hào)1_ , -不可能情況(可忽略值)不可能情況(可忽略值)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;2. 用戶自定義數(shù)據(jù)類型 VHDL允許用戶自己定義數(shù)據(jù)類型。 自定義數(shù)據(jù)類型說(shuō)明語(yǔ)句的一般格式是:TYPE 數(shù)據(jù)類型名 ,數(shù)據(jù)類型名 IS 數(shù)據(jù)類型定義 of 基本數(shù)據(jù)類型;常用的用戶自定義數(shù)據(jù)類型主要有: (1)枚舉(Enumerated)類型。 通過
29、列舉某類變量所有可能的取值來(lái)加以定義。對(duì)這些取值,一般使用自然語(yǔ)言中有相應(yīng)含義的單詞或字符序列來(lái)代表,以便于閱讀和理解。 枚舉類型定義的格式為:TYPE 數(shù)據(jù)類型名 IS (元素1,元素2,); TYPE m_state IS (s1,s2,s3,s4,s5);SIGNAL present_state, next_state: m_state;在程序包在程序包STD_LOGIC_1164STD_LOGIC_1164中對(duì)中對(duì)STD_LOGICSTD_LOGIC的定義為的定義為TYPE STD_LOGIC IS ( U ,X ,0 ,1 ,Z ,W ,L ,H ,_ ); (2 2) 數(shù)組(數(shù)組(
30、ARRAYARRAY)類型。)類型。 又稱為向量,是多個(gè)相同類型又稱為向量,是多個(gè)相同類型的數(shù)據(jù)集合。它可以是二維的和多維的。的數(shù)據(jù)集合。它可以是二維的和多維的。 數(shù)組類型定義的格式為數(shù)組類型定義的格式為: TYPE 數(shù)組名數(shù)組名 IS ARRAY (范圍)(范圍) OF 元素?cái)?shù)據(jù)類型名;元素?cái)?shù)據(jù)類型名; TYPE m IS ARRAY (7 downto 0) OF STD_LOGIC; TYPE count1 IS ARRAY ( STD_LOGIC _ DOWNTO U ) OF INTEGER; (3) (3) 紀(jì)錄紀(jì)錄(RECORD)(RECORD)類型類型: : 是多個(gè)不同類型的數(shù)
31、據(jù)集合。是多個(gè)不同類型的數(shù)據(jù)集合。 紀(jì)錄類型定義的格式為紀(jì)錄類型定義的格式為:TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS RECORD元素名:元素名: 數(shù)據(jù)類型名;數(shù)據(jù)類型名;元素名:元素名: 數(shù)據(jù)類型名;數(shù)據(jù)類型名; END RECORD;(4 4)時(shí)間()時(shí)間(TIMETIME)類型(物理類型)。)類型(物理類型)。表示時(shí)間的數(shù)據(jù)類型,表示時(shí)間的數(shù)據(jù)類型, 在仿真時(shí)是必不可少的。在仿真時(shí)是必不可少的。 時(shí)間類型定義的一般格式為:時(shí)間類型定義的一般格式為:TYPE 數(shù)據(jù)類型名數(shù)據(jù)類型名 IS 范圍;范圍;UNITS 基本單位;基本單位; 單位;單位;END UNITS; 例如:在例如:在STAND
32、ARD程序包中定義的時(shí)間,如下:程序包中定義的時(shí)間,如下: TYPE time IS range 1e18 TO 1e18;UNITS fs; ps=1000fs; ns=1000ps; s=1000ns; ms=1000s; set=1000ms; min=60set; hr=60min;END UNITS; 這里的基本單位是“fs”。時(shí)間是物理類型的數(shù)據(jù),當(dāng)然對(duì)容量、阻抗值也可以做定義。(5 5) 子類型(子類型(SUBTYPESUBTYPE)。)。是由是由typetype所定義的原數(shù)據(jù)類型的所定義的原數(shù)據(jù)類型的一個(gè)子集。它只是在基本數(shù)據(jù)類型的基礎(chǔ)上作了些約束,但是一個(gè)子集。它只是在基本數(shù)
33、據(jù)類型的基礎(chǔ)上作了些約束,但是沒有定義新的數(shù)據(jù)類型。沒有定義新的數(shù)據(jù)類型。子類型定義的一般格式為:子類型定義的一般格式為: SUBTYPE 子類型名 IS 基本數(shù)據(jù)類型名 約束范圍; SUBTYPE digit IS INTEGER range 0 to 9;SUBTYPE digit2 IS std_logic_vector(0 to 9); Subtype digit3 is array (0 to 9) of integer;3. 數(shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換 在VHDL程序中,不同類型的對(duì)象不能代入,因此要進(jìn)行類型轉(zhuǎn)換。類型轉(zhuǎn)換的方法有:(1 1)類型標(biāo)記法。)類型標(biāo)記法。用類型名稱來(lái)
34、實(shí)現(xiàn)關(guān)系密切的標(biāo)量類型用類型名稱來(lái)實(shí)現(xiàn)關(guān)系密切的標(biāo)量類型之間的轉(zhuǎn)換。之間的轉(zhuǎn)換。 例如:VARIABLE x:INTEGER;VARIABLE y:REAL; 使用類型標(biāo)記(即類型名)實(shí)現(xiàn)類型轉(zhuǎn)換時(shí),可采用賦值使用類型標(biāo)記(即類型名)實(shí)現(xiàn)類型轉(zhuǎn)換時(shí),可采用賦值語(yǔ)句:語(yǔ)句:x :=INTEGER(y); y :=REAL(x)。(2 2)類型函數(shù)法。)類型函數(shù)法。 CONV_INTEGER ( ):將STD_LOGIC_VECTOR類型轉(zhuǎn)換成INTEGER類型。CONV_STD_LOGIC_VECTOR( ):將將INTEGER類型、類型、UNSIGNED類型或類型或 SIGNED類型轉(zhuǎn)換成類型
35、轉(zhuǎn)換成STD_LOGIC_VECTOR類型。類型。TO_BIT ( ):將將STD_LOGIC類型轉(zhuǎn)換成類型轉(zhuǎn)換成BIT類型。類型。TO_BIT_VECTOR( ):將將STD_LOGIC_VECTOR類型轉(zhuǎn)換類型轉(zhuǎn)換BIT_VECTOR 類型。類型。TO_STD_LOGIC( ):將將BIT類型轉(zhuǎn)換成類型轉(zhuǎn)換成STD_LOGIC類型。類型。TO_STD_LOGIC_VECTOR( ): 將將BIT_VECTOR類型轉(zhuǎn)換成類型轉(zhuǎn)換成 STD_LOGIC_VECTOR類型。類型。 其中,第其中,第1 1個(gè)函數(shù)由個(gè)函數(shù)由STD_LOGIC_UNSIGNEDSTD_LOGIC_UNSIGNED程序包
36、定義,第程序包定義,第2 2個(gè)函數(shù)由個(gè)函數(shù)由 STD_LOGIC_ARITHSTD_LOGIC_ARITH定義,其余均由定義,其余均由STD_LOGIC_1164STD_LOGIC_1164定義。引用前必須先定義。引用前必須先 打打開庫(kù)和相應(yīng)的程序包。開庫(kù)和相應(yīng)的程序包。 例題:用轉(zhuǎn)換函數(shù)語(yǔ)句設(shè)計(jì)一個(gè)譯碼電路。d0.2Q0.7Entity decoder1 is port( input: in std_logic_vector(0 to 2); output: out std_logic_vector(7 downto 0);End decoder1; Architecture behave
37、of decoder1 is begin process(input) begin output(conv_integer(input)=1; end process;End behave;Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;9.2.4 運(yùn)算符與操作符n關(guān)于括號(hào)關(guān)于括號(hào):表達(dá)式中如果一串運(yùn)算中的算符相:表達(dá)式中如果一串運(yùn)算中的算符相同,且是同,且是AND,OR,XORAND,OR,XOR中的一種,則不需使用括中的一種,則不需使用括號(hào);如果一串運(yùn)算中的算符不同或有這三種算號(hào);如果一串運(yùn)算
38、中的算符不同或有這三種算符之外的算符,則必須使用括號(hào)。符之外的算符,則必須使用括號(hào)。n操作數(shù)的操作數(shù)的數(shù)據(jù)類型數(shù)據(jù)類型必須是操作符所規(guī)定的數(shù)據(jù)必須是操作符所規(guī)定的數(shù)據(jù)類型。類型。n嚴(yán)格遵循在基本操作符間操作數(shù)是嚴(yán)格遵循在基本操作符間操作數(shù)是同數(shù)據(jù)類型同數(shù)據(jù)類型的規(guī)則。的規(guī)則。n注意運(yùn)算符的注意運(yùn)算符的優(yōu)先級(jí)別優(yōu)先級(jí)別;見講義。;見講義。(1)算術(shù)運(yùn)算符算術(shù)運(yùn)算符算術(shù)運(yùn)算符含義含義備注備注+加加一般情況下,一般情況下,“+”號(hào)兩邊只能是號(hào)兩邊只能是integer;1)Std_logic_vector+ Std_logic_vector;2)Std_logic_vector+integer;3)S
39、td_logic_vector + Std_logic;-減減同上同上*乘乘一般情況下,一般情況下,“*”號(hào)兩邊只能是號(hào)兩邊只能是integer;1)Std_logic_vector* Std_logic_vector2)Integer*integer;/除除Maxplus要求要求/右邊的數(shù)為右邊的數(shù)為2的的n次冪。次冪。*乘方乘方Maxplus不支持不支持mod求模求模Maxplus不支持不支持rem求余求余Maxplus不支持不支持abs求絕對(duì)值求絕對(duì)值Maxplus不支持不支持Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_lo
40、gic_unsigned.all;(2 2)關(guān)系運(yùn)算符:)關(guān)系運(yùn)算符:它包括:= 、/= 、= 、= 。v其作用是將其作用是將相同數(shù)據(jù)類型相同數(shù)據(jù)類型的數(shù)據(jù)對(duì)象進(jìn)行數(shù)值比較或關(guān)系排序判斷,的數(shù)據(jù)對(duì)象進(jìn)行數(shù)值比較或關(guān)系排序判斷,并將結(jié)果以并將結(jié)果以boolean類型表示。類型表示。v和和/=的操作對(duì)象可以是任意數(shù)據(jù)類型;但其余運(yùn)算符的操作對(duì)象則的操作對(duì)象可以是任意數(shù)據(jù)類型;但其余運(yùn)算符的操作對(duì)象則僅限于整數(shù)或一維數(shù)組。僅限于整數(shù)或一維數(shù)組。v注意小于等于和賦值符號(hào)的區(qū)分。注意小于等于和賦值符號(hào)的區(qū)分。(3 3)邏輯運(yùn)算符:)邏輯運(yùn)算符:包括一元邏輯運(yùn)算符和二元邏輯運(yùn)算符。包括一元邏輯運(yùn)算符和二元
41、邏輯運(yùn)算符。 一元邏輯運(yùn)算符包括:一元邏輯運(yùn)算符包括:NOT 。 二元邏輯運(yùn)算符包括:二元邏輯運(yùn)算符包括:AND、OR、NAND、NOR、XOR、XNOR。v邏輯運(yùn)算符的操作對(duì)象為邏輯運(yùn)算符的操作對(duì)象為boolean,bit,std_logic;v也可以是也可以是bit_vector,std_logic_vector,但必須位寬要相同;且數(shù)組間的但必須位寬要相同;且數(shù)組間的運(yùn)算必須按位進(jìn)行;運(yùn)算必須按位進(jìn)行;vNot的優(yōu)先級(jí)別最高,但其它邏輯運(yùn)算符的優(yōu)先級(jí)別最低;建議使用的優(yōu)先級(jí)別最高,但其它邏輯運(yùn)算符的優(yōu)先級(jí)別最低;建議使用括號(hào)。括號(hào)。Signal a,b,c: std_logic_vect
42、or(3 downto 0);Signal d,e,f,g:std_logic_vector(1 downto 0);Signal h, I,j,k:std_logic;Signal L,m,n,o,p:boolean;a=b and c; d=e or f or g; h=(I nand j) nand k; L=(m xor n) and (o xor p);h=I and j or k;a=b and e;h=I or L;(4 4)并置運(yùn)算符:)并置運(yùn)算符:&(連接),用于將多個(gè)位或數(shù)組連(連接),用于將多個(gè)位或數(shù)組連接成為新的位矢量。接成為新的位矢量。 例如:例如:DBUS=
43、D0& &D1& &D2& &D3;即;即DBUS=(D0,D1,D2,D3)。)。例:設(shè)計(jì)一個(gè)例:設(shè)計(jì)一個(gè)4位全加器。位全加器。ADDER4.VHDA3.0CINB3.0S3.0COLibrary ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity adder4 is port( cin: in std_logic; a: in std_logic_vector(3 downto 0); b: in std_logic_vector(3 downto 0
44、); s: out std_logic_vector(3 downto 0); co: out std_logic);End adder4;Architecture behav of adder4 is Signal so: std_logic_vector(4 downto 0);Signal aa,bb: std_logic_vector(4 downto 0);BeginAa=0 & a;Bb=0& b;So=aa+bb+cin;S=so(3 downto 0);Cox),它可以在較多的位賦值中它可以在較多的位賦值中作省略化的賦值。如作省略化的賦值。如Signal d,e
45、 : std_logic_vector(7 downto 0);d0);e1,4=1,others=0);2.2.5 屬性(Attributes)屬性是指語(yǔ)言中某個(gè)項(xiàng)目的特性。預(yù)定義屬性描述語(yǔ)屬性是指語(yǔ)言中某個(gè)項(xiàng)目的特性。預(yù)定義屬性描述語(yǔ)句是一個(gè)預(yù)定義函數(shù),其格式為:句是一個(gè)預(yù)定義函數(shù),其格式為:屬性測(cè)試項(xiàng)目名屬性測(cè)試項(xiàng)目名屬性標(biāo)示符屬性標(biāo)示符綜合器支持的屬性有:綜合器支持的屬性有:left, right, high, low, range, reverse_range, length, event, stable.1、EVENT 例如:CLKEVENT AND CLK=12、LEFT, RI
46、GHT, HIGH, LOW例如:TYPE num IS ARRAY RANGE 7 DOWNTO 0; VARIABLE i1,i2,i3,i4: INTEGER; BEGIN i1:=num LEFT; -i1取得num的左邊界值 7 i2:=num RIGHT; -i2取得num的右邊界值 0 i3:=num HIGH; -i3取得num的上限值 7 i4:=num LOW; -i4取得num的下限值 03、LENGTH 例如:TYPE num IS ARRAY RANGE 7 DOWNTO 0; VARIABLE M: INTEGER; BEGIN M:= num LENGTH;4、R
47、ANGE 和REVERSE_RANGE 例如:SIGNAL S: STD_LOGIC_VECTOR(0 TO 7) FOR I in srange loop 或 FOR I in sreverse_range loopFor I in 0 to 7 loopFor I in 7 downto 0 loopl9.3.2 VHDL結(jié)構(gòu)體的基本子結(jié)構(gòu) 在規(guī)模較大的電路設(shè)計(jì)中,整個(gè)電路將被分成若干個(gè)相對(duì)在規(guī)模較大的電路設(shè)計(jì)中,整個(gè)電路將被分成若干個(gè)相對(duì)獨(dú)立的模塊來(lái)描述。這樣,一個(gè)結(jié)構(gòu)體可以用幾個(gè)子結(jié)構(gòu),即獨(dú)立的模塊來(lái)描述。這樣,一個(gè)結(jié)構(gòu)體可以用幾個(gè)子結(jié)構(gòu),即相對(duì)獨(dú)立的幾個(gè)模塊來(lái)構(gòu)成。相對(duì)獨(dú)立的幾個(gè)模塊
48、來(lái)構(gòu)成。VHDL語(yǔ)言有以下語(yǔ)言有以下3種形式的子種形式的子結(jié)構(gòu)描述語(yǔ)句:結(jié)構(gòu)描述語(yǔ)句: BLOCK 語(yǔ)句結(jié)構(gòu)語(yǔ)句結(jié)構(gòu) PROCESS 語(yǔ)句結(jié)構(gòu)語(yǔ)句結(jié)構(gòu) SUBPROGRAMS 結(jié)構(gòu)結(jié)構(gòu)l2.1.2.2 進(jìn)程( PROCESS ) PROCESSPROCESS語(yǔ)句是語(yǔ)句是VHDLVHDL語(yǔ)言中最重要的語(yǔ)句之語(yǔ)言中最重要的語(yǔ)句之一,特點(diǎn)如下:一,特點(diǎn)如下:v進(jìn)程本身是一種并發(fā)處理語(yǔ)句,在一個(gè)構(gòu)造進(jìn)程本身是一種并發(fā)處理語(yǔ)句,在一個(gè)構(gòu)造體中多個(gè)體中多個(gè) PROCESSPROCESS語(yǔ)句可以同時(shí)并發(fā)運(yùn)行,但語(yǔ)句可以同時(shí)并發(fā)運(yùn)行,但其內(nèi)部則為順序語(yǔ)句其內(nèi)部則為順序語(yǔ)句;v進(jìn)程只有在特定的時(shí)刻才會(huì)被激活執(zhí)行
49、。進(jìn)程只有在特定的時(shí)刻才會(huì)被激活執(zhí)行。進(jìn)程語(yǔ)句的語(yǔ)法格式進(jìn)程語(yǔ)句的語(yǔ)法格式1 1: 進(jìn)程名: PROCESS (敏感信號(hào)表敏感信號(hào)表)進(jìn)程說(shuō)明語(yǔ)句;進(jìn)程說(shuō)明語(yǔ)句; BEGIN順序描述語(yǔ)句;順序描述語(yǔ)句; END PROCESS 進(jìn)程名進(jìn)程名; 進(jìn)程語(yǔ)句的語(yǔ)法格式進(jìn)程語(yǔ)句的語(yǔ)法格式2 2: 進(jìn)程名: PROCESS 進(jìn)程說(shuō)明語(yǔ)句;進(jìn)程說(shuō)明語(yǔ)句; BEGIN WAIL UNTIL(激活進(jìn)程的條件激活進(jìn)程的條件);順序描述語(yǔ)句;順序描述語(yǔ)句; END PROCESS 進(jìn)程名進(jìn)程名; 例9 利用PROCESS語(yǔ)句設(shè)計(jì)與非門電路。nandx: PROCESS (a, b)BEGINy=a NAND b;
50、END PROCESS nandx; 進(jìn)程標(biāo)號(hào)不是必需的;進(jìn)程標(biāo)號(hào)不是必需的; 敏感信號(hào)表所標(biāo)明的信號(hào)是用來(lái)敏感信號(hào)表所標(biāo)明的信號(hào)是用來(lái)啟動(dòng)進(jìn)程啟動(dòng)進(jìn)程的。若無(wú)敏感信號(hào)時(shí),則通過的。若無(wú)敏感信號(hào)時(shí),則通過WAIT語(yǔ)句來(lái)實(shí)現(xiàn)。語(yǔ)句來(lái)實(shí)現(xiàn)。WAIT UNTIL 條件表達(dá)式條件表達(dá)式;PROCESS語(yǔ)句聲明部分定義的量只適用于本進(jìn)程。最常在此處定義的是變語(yǔ)句聲明部分定義的量只適用于本進(jìn)程。最常在此處定義的是變量。因?yàn)樾盘?hào)是全局量。量。因?yàn)樾盘?hào)是全局量。 PROCESS內(nèi)部各語(yǔ)句之間內(nèi)部各語(yǔ)句之間是順序關(guān)系是順序關(guān)系 。在系統(tǒng)仿真時(shí),在系統(tǒng)仿真時(shí), PROCESS語(yǔ)句語(yǔ)句是按書寫順序一條一條向下執(zhí)行的
51、。而不象是按書寫順序一條一條向下執(zhí)行的。而不象BLOCK中的語(yǔ)句可以并行執(zhí)行。中的語(yǔ)句可以并行執(zhí)行。系統(tǒng)上電系統(tǒng)上電進(jìn)程掛起進(jìn)程掛起敏感信號(hào)發(fā)生敏感信號(hào)發(fā)生變化?變化?敏感信號(hào)發(fā)生敏感信號(hào)發(fā)生變化?變化?順序語(yǔ)句順序語(yǔ)句1進(jìn)程掛起進(jìn)程掛起順序語(yǔ)句順序語(yǔ)句1順序語(yǔ)句順序語(yǔ)句n順序語(yǔ)句順序語(yǔ)句nNNYY進(jìn)程進(jìn)程1 1進(jìn)程進(jìn)程2 2進(jìn)程的工作原理示意圖進(jìn)程的工作原理示意圖進(jìn)程可用來(lái)描述組合邏輯,也可以用來(lái)描述時(shí)序邏進(jìn)程可用來(lái)描述組合邏輯,也可以用來(lái)描述時(shí)序邏輯。輯。時(shí)鐘沿的時(shí)鐘沿的VHDL描述:描述:CLK: IN STD_LOGIC;上升沿描述:上升沿描述:CLKEVENT AND CLK=1 或
52、者或者RISING_EDGE(CLK)下降沿描述:下降沿描述:CLKEVENT AND CLK=0 或者或者falling_edge(CLK)一個(gè)進(jìn)程不可同時(shí)對(duì)時(shí)鐘上、下沿敏感。一個(gè)進(jìn)程不可同時(shí)對(duì)時(shí)鐘上、下沿敏感。PROCESS(CLK)BEGINIF rising_edge(clk) THENELSIF falling_edge(clk) THENPROCESS(CLK)BEGINIF rising_edge(clk) THENELSE例題:2分頻電路(fenpin2.vhd)clkoutclkinarchitecture behav of fenpin2 issignal q: std_l
53、ogic;beginprocess(clkin)beginif rising_edge(clkin)thenq=not q;end if;end process;clkout=q;end behav;library ieee;use ieee.std_logic_1164.all;entity fenpin2 is port(clkin: in std_logic; clkout: out std_logic);end fenpin2;architecture behav of fenpin2 isbeginprocess(clkin)beginif rising_edge(clkin)the
54、nclkout=not clkin;end if;end process;end behav;例題:計(jì)數(shù)器例題:計(jì)數(shù)器(count10.vhd)(count10.vhd)library ieee;use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;entity count10 is port(clk: in std_logic; q: buffer std_logic_vector(0 to 3);end count10;Architecture behav of count10 isbeginprocess(clk)begi
55、n if rising_edge(clk) then if q=1001 then q=0000; else q=q+1; end if; end if;end process;end behav; 9.3 VHDL的基本描述語(yǔ)句 n9.3.1 9.3.1 順序描述語(yǔ)句順序描述語(yǔ)句n9.3.2 9.3.2 并發(fā)描述語(yǔ)句并發(fā)描述語(yǔ)句VhdlVhdl程序設(shè)計(jì)中兩大基本描述語(yǔ)句系列:程序設(shè)計(jì)中兩大基本描述語(yǔ)句系列:9.3.1 順序描述語(yǔ)句n信號(hào)信號(hào)代入語(yǔ)句代入語(yǔ)句 n變量變量賦值語(yǔ)句賦值語(yǔ)句nWAIT語(yǔ)句語(yǔ)句nIF語(yǔ)句語(yǔ)句nCASE語(yǔ)句語(yǔ)句nLOOP語(yǔ)句語(yǔ)句nNEXT語(yǔ)句語(yǔ)句nEXIT語(yǔ)句語(yǔ)句nRE
56、TURN語(yǔ)句語(yǔ)句nNULL語(yǔ)句語(yǔ)句順序語(yǔ)句的特點(diǎn)是:每一條順序語(yǔ)句的執(zhí)行順序是與它們的書順序語(yǔ)句的特點(diǎn)是:每一條順序語(yǔ)句的執(zhí)行順序是與它們的書寫順序基本一致的。寫順序基本一致的。順序語(yǔ)句只能出現(xiàn)在進(jìn)程和子程序中。順序語(yǔ)句只能出現(xiàn)在進(jìn)程和子程序中。變量賦值語(yǔ)句格式為:變量賦值語(yǔ)句格式為: 目標(biāo)變量名目標(biāo)變量名 := 表達(dá)式;表達(dá)式;信號(hào)賦值語(yǔ)句格式為:信號(hào)賦值語(yǔ)句格式為: 目標(biāo)信號(hào)名目標(biāo)信號(hào)名 = 表達(dá)式;表達(dá)式;Library ieee;Use ieee.std_logic_1164.all;Entity test_signal isPort(clr, clk: in std_logic; q
57、1,q2: out integer range 0 to 9);End test_signal;1、賦值語(yǔ)句(signal , variable) 將一個(gè)值或表達(dá)式的運(yùn)算結(jié)果傳遞給某一數(shù)據(jù)對(duì)象。Test_signal.vhdArchitecture test of test_signal isSignal A,B: integer range 0 to 9;BeginProcess(clk,clr)Variable c: integer range 0 to 9;BeginIf clr=1 thenA=0; B=2; C:=0;Elsif rising_edge(clk) then c:=c+
58、1; A=c+1;B=A+2;END IF;END PROCESS;Q1=A; Q2=B; END TEST;幾種賦值形式1、標(biāo)識(shí)符賦值、標(biāo)識(shí)符賦值Variable a: std_logic;Signal c: std_logic_vector(0 to 3); a:=1;C=“0001”;2、數(shù)組元素賦值:數(shù)組名(下標(biāo))、數(shù)組元素賦值:數(shù)組名(下標(biāo))C(1)=0;C(1 to 2)=“00”;C(3 downto 2)=“10”WAIT語(yǔ)句有以下四種形式: WAIT -無(wú)限等待無(wú)限等待 WAIT ON 敏感信號(hào)表;敏感信號(hào)表; -敏感信號(hào)量變化,進(jìn)程啟動(dòng)敏感信號(hào)量變化,進(jìn)程啟動(dòng) WAIT U
59、NTIL 條件表達(dá)式;條件表達(dá)式; -表達(dá)式成立時(shí),進(jìn)程啟動(dòng)表達(dá)式成立時(shí),進(jìn)程啟動(dòng) WAIT FOR 時(shí)間表達(dá)式;時(shí)間表達(dá)式; -時(shí)間到,進(jìn)程啟動(dòng)時(shí)間到,進(jìn)程啟動(dòng)2、WAIT語(yǔ)句例:IF(a=1)THENc=b;END IF;3、IF 語(yǔ)句qnq QD CdclkARCHITECTURE rtl OF dff ISBEGINPROCESS (clk)BEGINIF (clkevent and clk=1) THEN q=d;END IF;END PROCESS ;END rtl;例例2 設(shè)計(jì)設(shè)計(jì)D觸發(fā)器。觸發(fā)器。ARCHITECTURE rtl OF mux2_1 ISBEGINPROCESS
60、(a,b,sel)BEGINIF (sel=1) THENc=a;ELSEc=b;END IF; END PROCESS;END rtl;例3 設(shè)計(jì)2選1的數(shù)據(jù)選擇器。selc例4 設(shè)計(jì)4選1的多路選擇器d0d1d2d3selyENTITY mux4_1 IS PORT(d : IN STD_LOGIC_VECTOR(3 DOWNTO 0); sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0); y : OUT STD_LOGIC);END mux4_1;ARCHITECTURE rtl OF mux4_1 ISBEGINPROCESS (d, sel)BEGINIF (sel=00) THEN y=d(0);ELSIF (sel=0
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自制水囊在剖宮產(chǎn)宮縮乏力出血中的臨床應(yīng)用
- 應(yīng)急響應(yīng)的統(tǒng)一指揮
- 二零二五年度道路設(shè)施更新改造合同3篇
- 二零二五年度個(gè)人鄉(xiāng)村旅游消費(fèi)貸款合同示范文本2篇
- 二零二五年度屋頂防水隔熱節(jié)能改造合同4篇
- 2025年度新能源儲(chǔ)能系統(tǒng)采購(gòu)與安裝合同范本3篇
- 2025版高層建筑消防系統(tǒng)改造合同協(xié)議書3篇
- 二零二五年度個(gè)人股權(quán)代持與公司解散合同3篇
- 不良反應(yīng)上報(bào)流程
- 二零二五年度大學(xué)生創(chuàng)業(yè)項(xiàng)目融資借款合同
- 2025屆安徽省皖南八校聯(lián)盟高二物理第一學(xué)期期末統(tǒng)考試題含解析
- 第六章-主成分分析法
- 2024簡(jiǎn)單的租房合同樣本下載
- 中考數(shù)學(xué)計(jì)算題練習(xí)100道(2024年中考真題)
- 新人教版五年級(jí)上冊(cè)數(shù)學(xué)應(yīng)用題大全及答案
- 【家庭教育】0-3歲嬰幼兒早教訓(xùn)練方案
- 國(guó)家中長(zhǎng)期科技發(fā)展規(guī)劃(2021-2035)
- 經(jīng)營(yíng)范圍登記規(guī)范表述目錄(試行)(V1.0.2版)
- 2023年山東省威海市中考物理真題(附答案詳解)
- 第八講 發(fā)展全過程人民民主PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 王崧舟:學(xué)習(xí)任務(wù)群與課堂教學(xué)變革 2022版新課程標(biāo)準(zhǔn)解讀解析資料 57
評(píng)論
0/150
提交評(píng)論