3第3章 VHDL設(shè)計(jì)初步_第1頁(yè)
3第3章 VHDL設(shè)計(jì)初步_第2頁(yè)
3第3章 VHDL設(shè)計(jì)初步_第3頁(yè)
3第3章 VHDL設(shè)計(jì)初步_第4頁(yè)
3第3章 VHDL設(shè)計(jì)初步_第5頁(yè)
已閱讀5頁(yè),還剩82頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、EDA 技術(shù)實(shí)用教程技術(shù)實(shí)用教程第第 3 3 章章 VHDL設(shè)計(jì)初步設(shè)計(jì)初步1. 組合電路的組合電路的VHDL描述描述2. 基本時(shí)序電路的基本時(shí)序電路的VHDL描述描述3. 計(jì)數(shù)器的計(jì)數(shù)器的VHDL設(shè)計(jì)設(shè)計(jì)主要任務(wù):主要任務(wù):給出簡(jiǎn)單而典型的電路實(shí)例,作為探討其性能特給出簡(jiǎn)單而典型的電路實(shí)例,作為探討其性能特點(diǎn)和設(shè)計(jì)方法的情景。然后針對(duì)情景的具體對(duì)象,給出對(duì)應(yīng)點(diǎn)和設(shè)計(jì)方法的情景。然后針對(duì)情景的具體對(duì)象,給出對(duì)應(yīng)的的VHDL表述,并對(duì)表述中出現(xiàn)的語(yǔ)句進(jìn)行解釋。表述,并對(duì)表述中出現(xiàn)的語(yǔ)句進(jìn)行解釋。掌握掌握電路情景與電路情景與VHDL的對(duì)應(yīng)關(guān)系,程序的基本結(jié)構(gòu)、表述的對(duì)應(yīng)關(guān)系,程序的基本結(jié)構(gòu)、表述特

2、點(diǎn)和設(shè)計(jì)方法。特點(diǎn)和設(shè)計(jì)方法。主要內(nèi)容主要內(nèi)容3.1 組合電路的組合電路的VHDL描述描述 3.1.1 2選選1多路選擇器的多路選擇器的VHDL描述描述 圖圖3-1 mux21a電路模型電路模型 2選選1多路選擇器(多路選擇器(mux21a)A、b是是2個(gè)數(shù)據(jù)的輸入端口個(gè)數(shù)據(jù)的輸入端口S是通道選擇控制信號(hào)端是通道選擇控制信號(hào)端Y是數(shù)據(jù)輸出端是數(shù)據(jù)輸出端S取值分別是取值分別是0、1時(shí),輸出端分別輸時(shí),輸出端分別輸出出a、b的數(shù)據(jù)。的數(shù)據(jù)。 圖圖3-2 mux21a元件圖元件圖 3.1.1 2選選1多路選擇器的多路選擇器的VHDL描述描述 【例【例3-1】ENTITY mux21a IS PORT

3、 ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 了解情景了解情景VHDL描述描述Mux21a邏輯結(jié)構(gòu)圖邏輯結(jié)構(gòu)圖電路的電路的VHDL描述由兩大部分組成描述由兩大部分組成1. 以關(guān)鍵詞以關(guān)鍵詞ENTITY引導(dǎo),引導(dǎo),END ENTITY mux21a結(jié)尾的語(yǔ)結(jié)尾的語(yǔ)句部分稱(chēng)為句部分稱(chēng)為實(shí)體。實(shí)體。 VHDL實(shí)體描述了電路器件的外部情況及各信號(hào)端口的實(shí)體描述

4、了電路器件的外部情況及各信號(hào)端口的基本性質(zhì)?;拘再|(zhì)。ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 2. 以關(guān)鍵詞以關(guān)鍵詞ARCHITECTURE引導(dǎo),引導(dǎo), END ARCHITECTURE one結(jié)尾的語(yǔ)句部分稱(chēng)為結(jié)尾的語(yǔ)句部分稱(chēng)為結(jié)構(gòu)體。結(jié)構(gòu)體。 VHDL結(jié)構(gòu)體負(fù)責(zé)描述電路器件的內(nèi)部邏輯功能和電路結(jié)構(gòu)體負(fù)

5、責(zé)描述電路器件的內(nèi)部邏輯功能和電路結(jié)構(gòu)。結(jié)構(gòu)。 對(duì)于既定的電路功能,對(duì)應(yīng)的電路結(jié)構(gòu)不是唯一的,可對(duì)于既定的電路功能,對(duì)應(yīng)的電路結(jié)構(gòu)不是唯一的,可以對(duì)應(yīng)不同的電路結(jié)構(gòu),取決于綜合器的基本元件庫(kù)的以對(duì)應(yīng)不同的電路結(jié)構(gòu),取決于綜合器的基本元件庫(kù)的來(lái)源、優(yōu)化方向和約束的選擇。來(lái)源、優(yōu)化方向和約束的選擇。VHDL結(jié)構(gòu)體中用于描述邏輯功能和電路結(jié)構(gòu)的語(yǔ)句分為順結(jié)構(gòu)體中用于描述邏輯功能和電路結(jié)構(gòu)的語(yǔ)句分為順序語(yǔ)句和并行語(yǔ)句序語(yǔ)句和并行語(yǔ)句順序語(yǔ)句:執(zhí)行方式類(lèi)似于普通軟件語(yǔ)言的程序執(zhí)行方式,順序語(yǔ)句:執(zhí)行方式類(lèi)似于普通軟件語(yǔ)言的程序執(zhí)行方式,按照語(yǔ)句的前后排列方式逐條順序執(zhí)行。按照語(yǔ)句的前后排列方式逐條順序執(zhí)

6、行。并行語(yǔ)句:無(wú)論多少語(yǔ)句,都是同時(shí)執(zhí)行的,與語(yǔ)句的前并行語(yǔ)句:無(wú)論多少語(yǔ)句,都是同時(shí)執(zhí)行的,與語(yǔ)句的前后次序無(wú)關(guān)。后次序無(wú)關(guān)。y = a WHEN s = 0 ELSE b ;并行語(yǔ)句(可參看并行語(yǔ)句(可參看P357)3.1.2 相關(guān)語(yǔ)句結(jié)構(gòu)和語(yǔ)法說(shuō)明相關(guān)語(yǔ)句結(jié)構(gòu)和語(yǔ)法說(shuō)明 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTITY e_name; 1. 1. 實(shí)體表達(dá)實(shí)體表達(dá) VHDL完整的、可綜合的程序結(jié)構(gòu)必須完整地表達(dá)一片專(zhuān)完整的、可綜合的程序

7、結(jié)構(gòu)必須完整地表達(dá)一片專(zhuān)用集成電路的端口和電路功能用集成電路的端口和電路功能含有完整程序結(jié)構(gòu)的含有完整程序結(jié)構(gòu)的VHDL表述成為設(shè)計(jì)實(shí)體。表述成為設(shè)計(jì)實(shí)體。實(shí)體描述的是電路器件的端口構(gòu)成、端口類(lèi)型、端口上流實(shí)體描述的是電路器件的端口構(gòu)成、端口類(lèi)型、端口上流動(dòng)的信號(hào)的屬性動(dòng)的信號(hào)的屬性ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;2. 2. 實(shí)體名實(shí)體名 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p

8、_namei : port_mi data_type );END ENTITY e_name; ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;實(shí)體名是標(biāo)識(shí)符,具體設(shè)計(jì)者自定。實(shí)體名是標(biāo)識(shí)符,具體設(shè)計(jì)者自定。實(shí)體名取名原則:根據(jù)相應(yīng)電路功能取,以表示設(shè)計(jì)電路器件實(shí)體名取名原則:根據(jù)相應(yīng)電路功能取,以表示設(shè)計(jì)電路器件4位二進(jìn)制計(jì)數(shù)器(位二進(jìn)制計(jì)數(shù)器(counter4b););8位二進(jìn)制加法器(位二進(jìn)制加法器(adder8b)不能用數(shù)字和中文,不能與庫(kù)定義好的名稱(chēng)沖突不能用數(shù)字和中

9、文,不能與庫(kù)定義好的名稱(chēng)沖突不能用數(shù)字起頭,不能用數(shù)字起頭,74LS1603. 3. 端口語(yǔ)句和端口信號(hào)名端口語(yǔ)句和端口信號(hào)名 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTITY e_name; ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;端口語(yǔ)句用端口語(yǔ)句用Port ( )引導(dǎo),并在語(yǔ)句結(jié)尾處加分號(hào)引導(dǎo),并在語(yǔ)句結(jié)尾處加分

10、號(hào)“;”。P_name是端口信號(hào)名。是端口信號(hào)名。一般地,程序中所有由設(shè)計(jì)者自定的名稱(chēng),都是標(biāo)識(shí)符。標(biāo)識(shí)一般地,程序中所有由設(shè)計(jì)者自定的名稱(chēng),都是標(biāo)識(shí)符。標(biāo)識(shí)符不應(yīng)用數(shù)字、數(shù)字起頭的文字和中文表述。符不應(yīng)用數(shù)字、數(shù)字起頭的文字和中文表述。3.1.2 相關(guān)語(yǔ)句結(jié)構(gòu)和語(yǔ)法說(shuō)明相關(guān)語(yǔ)句結(jié)構(gòu)和語(yǔ)法說(shuō)明 4. 4. 端口模式端口模式 輸入端口,定義的通道為單向只讀模式輸入端口,定義的通道為單向只讀模式 輸出端口,定義的通道為單向輸出模式輸出端口,定義的通道為單向輸出模式 定義的通道確定為輸入輸出雙向端口定義的通道確定為輸入輸出雙向端口 緩沖端口,其功能與緩沖端口,其功能與INOUTINOUT類(lèi)似類(lèi)似 5

11、. 5. 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型 【例【例3-4】ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type );END ENTITY e_name; ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT );END ENTITY mux21a;Data_type是數(shù)據(jù)類(lèi)型名。是數(shù)據(jù)類(lèi)型名。VHDL規(guī)定任何一種數(shù)據(jù)對(duì)象的應(yīng)用都必須嚴(yán)格限定其取值范規(guī)定任何一種數(shù)據(jù)對(duì)象的應(yīng)用都必須嚴(yán)格限定其取值范圍和數(shù)值類(lèi)型,對(duì)其傳輸或存儲(chǔ)的數(shù)據(jù)類(lèi)

12、型作明確的界定。圍和數(shù)值類(lèi)型,對(duì)其傳輸或存儲(chǔ)的數(shù)據(jù)類(lèi)型作明確的界定。VHDL設(shè)計(jì)中,預(yù)先定義好要使用的數(shù)據(jù)類(lèi)型,對(duì)于大規(guī)模電設(shè)計(jì)中,預(yù)先定義好要使用的數(shù)據(jù)類(lèi)型,對(duì)于大規(guī)模電路描述的排錯(cuò)十分有益。路描述的排錯(cuò)十分有益。INTEGER、Boolean、STD_LOGIC、BIT(參看(參看P324)6. 6. 結(jié)構(gòu)體表達(dá)結(jié)構(gòu)體表達(dá) 【例【例3-5】ARCHITECTURE arch_name OF e_name IS 說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句BEGIN (功能描述語(yǔ)句功能描述語(yǔ)句)END ARCHITECTURE arch_name ; ARCHITECTURE one OF mux21a IS BEGI

13、N y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 關(guān)鍵詞關(guān)鍵詞 結(jié)構(gòu)體名結(jié)構(gòu)體名“說(shuō)明語(yǔ)句說(shuō)明語(yǔ)句”包括在結(jié)構(gòu)體中,用以說(shuō)明和定義數(shù)據(jù)對(duì)象、數(shù)包括在結(jié)構(gòu)體中,用以說(shuō)明和定義數(shù)據(jù)對(duì)象、數(shù)據(jù)類(lèi)型、元件調(diào)用聲明等。說(shuō)明語(yǔ)句并非是必須的。據(jù)類(lèi)型、元件調(diào)用聲明等。說(shuō)明語(yǔ)句并非是必須的。SIGNAL e : STD_LOGIC;“功能描述語(yǔ)句功能描述語(yǔ)句”,必須在結(jié)構(gòu)體中給出相應(yīng)的電路功能描述,必須在結(jié)構(gòu)體中給出相應(yīng)的電路功能描述語(yǔ)句,可以是并行語(yǔ)句、順序語(yǔ)句或其組合。語(yǔ)句,可以是并行語(yǔ)句、順序語(yǔ)句或其組合??删C合的、完整的可綜合的、完整的VHDL程序有比

14、較固定的結(jié)構(gòu)。程序有比較固定的結(jié)構(gòu)。設(shè)計(jì)實(shí)體設(shè)計(jì)實(shí)體各類(lèi)庫(kù)及其程序包的使用聲明各類(lèi)庫(kù)及其程序包的使用聲明實(shí)體描述實(shí)體描述結(jié)構(gòu)體描述,可含有不同的邏輯表達(dá)語(yǔ)句結(jié)構(gòu)結(jié)構(gòu)體描述,可含有不同的邏輯表達(dá)語(yǔ)句結(jié)構(gòu)把一個(gè)完整的、可綜合的把一個(gè)完整的、可綜合的VHDL程序設(shè)計(jì)構(gòu)建為設(shè)計(jì)實(shí)體(獨(dú)程序設(shè)計(jì)構(gòu)建為設(shè)計(jì)實(shí)體(獨(dú)立的電路功能結(jié)構(gòu)),其程序代碼常被成為立的電路功能結(jié)構(gòu)),其程序代碼常被成為RTL描述描述7. 7. 賦值符號(hào)和數(shù)據(jù)比較符號(hào)賦值符號(hào)和數(shù)據(jù)比較符號(hào) 賦值符賦值符 “=” 表達(dá)式表達(dá)式s=0的等號(hào)的等號(hào)“=”沒(méi)有賦值的含義,只是一種數(shù)據(jù)比較符號(hào)。沒(méi)有賦值的含義,只是一種數(shù)據(jù)比較符號(hào)。 其輸出數(shù)據(jù)比

15、較的邏輯關(guān)系。其輸出數(shù)據(jù)比較的邏輯關(guān)系。 IF a THEN . - 注意,注意,a的數(shù)據(jù)類(lèi)型必須是的數(shù)據(jù)類(lèi)型必須是boolean IF (s1=0)AND(s2=1)OR(cb+1) THEN . ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; Y=a,表示輸入端口,表示輸入端口a的數(shù)據(jù)向輸出端口的數(shù)據(jù)向輸出端口y傳輸傳輸或信號(hào)或信號(hào)a向信號(hào)向信號(hào)y賦值。賦值符兩邊信號(hào)類(lèi)型必須一致賦值。賦值符兩邊信號(hào)類(lèi)型必須一致RU : OUT BOOLEANRU= TRUE WHEN (

16、CD) ELSE FALSE8. WHEN_ELSE8. WHEN_ELSE條件信號(hào)賦值語(yǔ)句條件信號(hào)賦值語(yǔ)句 賦值目標(biāo)賦值目標(biāo) = 表達(dá)式表達(dá)式 WHEN 賦值條件賦值條件 ELSE 表達(dá)式表達(dá)式 WHEN 賦值條件賦值條件 ELSE . 表達(dá)式表達(dá)式 ; z = a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ; 條件測(cè)試的順序性,條件信號(hào)賦值語(yǔ)句中的第一子句具有最條件測(cè)試的順序性,條件信號(hào)賦值語(yǔ)句中的第一子句具有最高賦值優(yōu)先級(jí),第二句其次,以此類(lèi)推高賦值優(yōu)先級(jí),第二句其次,以此類(lèi)推條件信號(hào)賦值語(yǔ)句的功能與進(jìn)程(條件信號(hào)賦值語(yǔ)句的功能與進(jìn)程(PROCESS)中

17、)中IF語(yǔ)句類(lèi)同語(yǔ)句類(lèi)同執(zhí)行條件信號(hào)語(yǔ)句時(shí),賦值條件按書(shū)寫(xiě)先后關(guān)系逐項(xiàng)確定,即發(fā)現(xiàn)執(zhí)行條件信號(hào)語(yǔ)句時(shí),賦值條件按書(shū)寫(xiě)先后關(guān)系逐項(xiàng)確定,即發(fā)現(xiàn)“賦值條件賦值條件”滿(mǎn)足,即把滿(mǎn)足,即把“表達(dá)式表達(dá)式”的值賦予的值賦予“賦值目標(biāo)賦值目標(biāo)”ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 9. 9. 關(guān)鍵字關(guān)鍵字關(guān)鍵字(關(guān)鍵字(Key Word)指指VHDL語(yǔ)言中預(yù)定義的有特殊含義的英文語(yǔ)句。語(yǔ)言中預(yù)定義的有特殊含義的英文語(yǔ)句。VHDL中不能用關(guān)鍵字命名自用的對(duì)象,或用作標(biāo)識(shí)符中不能用

18、關(guān)鍵字命名自用的對(duì)象,或用作標(biāo)識(shí)符多數(shù)的多數(shù)的VHDL編輯器,都對(duì)關(guān)鍵字敏感,會(huì)使用特定顏色標(biāo)識(shí),因此在編輯器,都對(duì)關(guān)鍵字敏感,會(huì)使用特定顏色標(biāo)識(shí),因此在編輯程序時(shí),防止誤用關(guān)鍵字。編輯程序時(shí),防止誤用關(guān)鍵字。關(guān)鍵字的大小寫(xiě)不敏感。關(guān)鍵字的大小寫(xiě)不敏感。10. 10. 標(biāo)識(shí)符標(biāo)識(shí)符標(biāo)識(shí)符是設(shè)計(jì)者自行定義的,用于標(biāo)識(shí)不同名稱(chēng)的詞語(yǔ)。標(biāo)識(shí)符是設(shè)計(jì)者自行定義的,用于標(biāo)識(shí)不同名稱(chēng)的詞語(yǔ)。與關(guān)鍵字一樣,不分大小寫(xiě)。與關(guān)鍵字一樣,不分大小寫(xiě)。3.1.1 2選選1多路選擇器的多路選擇器的VHDL描述描述-2 【例【例3-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;E

19、NTITY mux21a IS PORT ( a, b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL e: STD_LOGIC; SIGNAL d: STD_LOGIC; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ;END ARCHITECTURE one ; 【例【例3-1】ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN

20、 BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN y = a WHEN s = 0 ELSE b ;END ARCHITECTURE one ; 1. 邏輯操作符邏輯操作符文字文字AND、OR和和NOT是邏輯操作符。是邏輯操作符。VHDL共有七種基本邏共有七種基本邏輯操作符。輯操作符。AND(與),(與),OR(或),(或),NAND(與非),(與非),NOR(或非),(或非),XOR(異或),(異或),XNOR(同或),(同或),NOT(取反)(取反)信號(hào)在這些操作符的作用下可構(gòu)成組合邏輯。信號(hào)

21、在這些操作符的作用下可構(gòu)成組合邏輯。邏輯操作符所要求的操作數(shù)的數(shù)據(jù)類(lèi)型:邏輯操作符所要求的操作數(shù)的數(shù)據(jù)類(lèi)型:BIT、BOOLEAN和和STD_LOGIC。VHDL直接用對(duì)應(yīng)的英語(yǔ)文字表達(dá)邏輯操作符號(hào),顯示硬件行直接用對(duì)應(yīng)的英語(yǔ)文字表達(dá)邏輯操作符號(hào),顯示硬件行為描述語(yǔ)言的特征。為描述語(yǔ)言的特征。2. 標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類(lèi)型標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類(lèi)型STD_LOGIC BIT數(shù)據(jù)類(lèi)型定義:數(shù)據(jù)類(lèi)型定義: TYPE BIT IS(0,1); -只有兩種取值只有兩種取值 STD_LOGIC數(shù)據(jù)類(lèi)型定義:數(shù)據(jù)類(lèi)型定義: TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); ENTITY mu

22、x21a IS PORT ( a, b : IN STD_LOGIC; s : IN STD_LOGIC; y : OUT STD_LOGIC );END ENTITY mux21a;類(lèi)型類(lèi)型STD_LOGIC比比BIT包含的內(nèi)容更豐富和完整。包含的內(nèi)容更豐富和完整。STD_LOGIC九種數(shù)據(jù)的含義(九種數(shù)據(jù)的含義(P69)STD_LOGIC具有更寬的取值范圍,其描述與實(shí)際電路有更好更實(shí)用的適具有更寬的取值范圍,其描述與實(shí)際電路有更好更實(shí)用的適應(yīng)性。應(yīng)性。3. 3. 設(shè)計(jì)庫(kù)和標(biāo)準(zhǔn)程序包設(shè)計(jì)庫(kù)和標(biāo)準(zhǔn)程序包 LIBRARY WORK ;LIBRARY STD ; USE STD.STANDARD.

23、ALL ; 【例【例3-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;VHDL設(shè)計(jì)文件保存在某一文件夾,并指定為工程設(shè)計(jì)文件保存在某一文件夾,并指定為工程PROJECT的文件所在的的文件所在的目錄,此路徑默認(rèn)為工作庫(kù)。目錄,此路徑默認(rèn)為工作庫(kù)。LIBRARY WORK,VHDL工具才能調(diào)用此路徑中相關(guān)的元件和程序包。工具才能調(diào)用此路徑中相關(guān)的元件和程序包。標(biāo)準(zhǔn)庫(kù)標(biāo)準(zhǔn)庫(kù)STD和工作庫(kù)都是默認(rèn)打開(kāi)的,如例和工作庫(kù)都是默認(rèn)打開(kāi)的,如例3-1,不必顯式表達(dá)。,不必顯式表達(dá)。如例如例3-2,需要定義特殊數(shù)據(jù)類(lèi)型,需要使用一些特殊的程序包。,需要定義特殊數(shù)據(jù)類(lèi)型,需

24、要使用一些特殊的程序包。使用庫(kù)和程序包的一般定義表式是:使用庫(kù)和程序包的一般定義表式是:【例【例3-2】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;STD_LOGIC數(shù)據(jù)類(lèi)型定義在數(shù)據(jù)類(lèi)型定義在STD_LOGIC_1164程序包中,此包由程序包中,此包由IEEE庫(kù)定義。此程序包所在的程序庫(kù)取名庫(kù)定義。此程序包所在的程序庫(kù)取名IEEE,因此,因此IEEE.STD_LOGIC_1164.ALLIEEE不屬于不屬于VHDL的標(biāo)準(zhǔn)庫(kù),因此,在使用時(shí)需要進(jìn)行聲明。的標(biāo)準(zhǔn)庫(kù),因此,在使用時(shí)需要進(jìn)行聲明。4. 4. 信號(hào)定義和數(shù)據(jù)對(duì)象信號(hào)定義和數(shù)據(jù)對(duì)象ARCHITECT

25、URE one OF mux21a IS SIGNAL e: STD_LOGIC; SIGNAL d: STD_LOGIC; BEGINSINGAL:定義某標(biāo)識(shí)符為信號(hào)的關(guān)鍵詞,信號(hào)屬于數(shù)據(jù)對(duì)象:定義某標(biāo)識(shí)符為信號(hào)的關(guān)鍵詞,信號(hào)屬于數(shù)據(jù)對(duì)象在在VHDL中,數(shù)據(jù)對(duì)象類(lèi)似于一種容器,能接受不同類(lèi)型的數(shù)據(jù)類(lèi)型的賦中,數(shù)據(jù)對(duì)象類(lèi)似于一種容器,能接受不同類(lèi)型的數(shù)據(jù)類(lèi)型的賦值。值。SIGNAL d: STD_LOGIC;規(guī)定了規(guī)定了d的屬性特征的屬性特征對(duì)于不同的邏輯描述,被定義的信號(hào)可能成為一個(gè)數(shù)據(jù)暫存點(diǎn),或一根信對(duì)于不同的邏輯描述,被定義的信號(hào)可能成為一個(gè)數(shù)據(jù)暫存點(diǎn),或一根信號(hào)連接線(xiàn)等號(hào)連接線(xiàn)等數(shù)據(jù)對(duì)

26、象有三類(lèi):信號(hào)(數(shù)據(jù)對(duì)象有三類(lèi):信號(hào)(SIGNAL)、變量()、變量(VARIABLE)、常量)、常量(CONSTANT)被定義的標(biāo)識(shí)符必須確定為某類(lèi)數(shù)據(jù)對(duì)象,也還必須被定義為某種數(shù)據(jù)類(lèi)被定義的標(biāo)識(shí)符必須確定為某類(lèi)數(shù)據(jù)對(duì)象,也還必須被定義為某種數(shù)據(jù)類(lèi)型。(用什么裝,裝什么)型。(用什么裝,裝什么)3.1.1 2選選1多路選擇器的多路選擇器的VHDL描述描述3【例【例3-3】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21a IS PORT ( a,b,s : IN STD_LOGIC; y : OUT STD_LOGIC );END E

27、NTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS;END ARCHITECTURE one ; 利用利用IF_THEN_ELSE語(yǔ)句表達(dá)了語(yǔ)句表達(dá)了VHDL順序語(yǔ)句。順序語(yǔ)句。IF語(yǔ)句的執(zhí)行順序類(lèi)似與軟件語(yǔ)言,根據(jù)語(yǔ)句排列先后順序語(yǔ)句的執(zhí)行順序類(lèi)似與軟件語(yǔ)言,根據(jù)語(yǔ)句排列先后順序進(jìn)行判斷。進(jìn)行判斷。順序語(yǔ)句同樣能描述并行運(yùn)行的組合邏輯電路。順序語(yǔ)句同樣能描述并行運(yùn)行的組合邏輯電路。判斷表達(dá)式可以

28、是一個(gè)值,也可以是復(fù)雜的邏輯或運(yùn)算表達(dá)判斷表達(dá)式可以是一個(gè)值,也可以是復(fù)雜的邏輯或運(yùn)算表達(dá)式。式。IF s = 0 THEN y = a ; ELSE y = b ; END IF;1. 1. 條件語(yǔ)句條件語(yǔ)句 IF a THEN . - 注意,注意,a的數(shù)據(jù)類(lèi)型必須是的數(shù)據(jù)類(lèi)型必須是boolean IF (s1=0)AND(s2=1)OR(cb+1) THEN . 2. 2. 進(jìn)程語(yǔ)句和順序語(yǔ)句進(jìn)程語(yǔ)句和順序語(yǔ)句PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS;由由PROCESS引導(dǎo)的語(yǔ)句

29、成為進(jìn)程語(yǔ)句。引導(dǎo)的語(yǔ)句成為進(jìn)程語(yǔ)句。所有順序描述語(yǔ)句都必須放在進(jìn)程語(yǔ)句中。所有順序描述語(yǔ)句都必須放在進(jìn)程語(yǔ)句中。PROCESS(a,b,s)稱(chēng)進(jìn)程的敏感信號(hào)表,通常要求把進(jìn))稱(chēng)進(jìn)程的敏感信號(hào)表,通常要求把進(jìn)程中的程中的所有輸入信號(hào)所有輸入信號(hào)都放在敏感信號(hào)表中。都放在敏感信號(hào)表中。PROCESS語(yǔ)句的執(zhí)行由敏感信號(hào)的變化啟動(dòng),引導(dǎo)語(yǔ)句被執(zhí)語(yǔ)句的執(zhí)行由敏感信號(hào)的變化啟動(dòng),引導(dǎo)語(yǔ)句被執(zhí)行一遍,然后返回進(jìn)程的起始端,進(jìn)入等待狀態(tài),直到下一行一遍,然后返回進(jìn)程的起始端,進(jìn)入等待狀態(tài),直到下一次任意敏感信號(hào)的變化。次任意敏感信號(hào)的變化。一個(gè)結(jié)構(gòu)體中可以包括任意個(gè)進(jìn)程語(yǔ)句結(jié)構(gòu),所有的進(jìn)程語(yǔ)一個(gè)結(jié)構(gòu)體中可

30、以包括任意個(gè)進(jìn)程語(yǔ)句結(jié)構(gòu),所有的進(jìn)程語(yǔ)句都是并行語(yǔ)句。句都是并行語(yǔ)句。任一進(jìn)程任一進(jìn)程PROCESS引導(dǎo)的語(yǔ)句結(jié)構(gòu)屬于順序語(yǔ)句引導(dǎo)的語(yǔ)句結(jié)構(gòu)屬于順序語(yǔ)句3.1.1 2選選1多路選擇器的多路選擇器的VHDL描述描述 圖圖3-3 mux21a功能時(shí)序波形功能時(shí)序波形 圖圖3-10 半加器半加器h_adder電路圖及其真值表電路圖及其真值表 3.1.4 半加器描述半加器描述 I113coasob1001010110001100cosobanotxnor2and2半加器可以有多種表達(dá)方式半加器可以有多種表達(dá)方式【用電路原理圖表達(dá)的半加器【用電路原理圖表達(dá)的半加器】 【用真值表的形式給出半加器的描述【用

31、真值表的形式給出半加器的描述】3.1.4 半加器描述半加器描述 【例【例3-4】LIBRARY IEEE; -半加器描述半加器描述(1):布爾方程描述方法:布爾方程描述方法USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is BEGIN so = a XOR b ; co = a AND b ; END ARCHITECTURE fh1; X康芯科技康

32、芯科技【例【例3-5】LIBRARY IEEE; -半加器描述半加器描述(2):真值表描述方法:真值表描述方法USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; -定義標(biāo)準(zhǔn)邏輯位矢量定義標(biāo)準(zhǔn)邏輯位矢量BEGIN 數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型 abc so=0; co so=1

33、; co so=1; co so=0; co NULL ; END CASE; END PROCESS; END ARCHITECTURE fh1 ; 1. 1. CASECASE語(yǔ)句語(yǔ)句 CASE ISWhen = ; . ; ;When = ; . ; ;.WHEN OTHERS = ;END CASE ; 執(zhí)行執(zhí)行CASE語(yǔ)句時(shí),首先計(jì)算語(yǔ)句時(shí),首先計(jì)算“表達(dá)式表達(dá)式”語(yǔ)句,然后根據(jù)語(yǔ)句,然后根據(jù)WHEN條件語(yǔ)句中相同的條件語(yǔ)句中相同的“選擇值或標(biāo)識(shí)符選擇值或標(biāo)識(shí)符”,執(zhí)行對(duì)應(yīng)的順,執(zhí)行對(duì)應(yīng)的順序語(yǔ)句,最后結(jié)束序語(yǔ)句,最后結(jié)束CASE語(yǔ)句。語(yǔ)句。CASE abc IS WHEN 00 =

34、 so=0; co so=1; co so=1; co so=0; co NULL ; END CASE;1. 1. CASECASE語(yǔ)句語(yǔ)句 CASE中需要注意以下幾點(diǎn):中需要注意以下幾點(diǎn):(1)WHEN條件句中的選擇值或標(biāo)識(shí)符所代表的值必須在條件句中的選擇值或標(biāo)識(shí)符所代表的值必須在CASE的的“表達(dá)式表達(dá)式”的的取值范圍取值范圍內(nèi),內(nèi),數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型也必須匹配。也必須匹配。(2)所有條件句中的選擇值必須覆蓋表達(dá)式的取值,否則)所有條件句中的選擇值必須覆蓋表達(dá)式的取值,否則最末必須加上最末必須加上WHEN OTHERS = ;OTHERS表表示以上已經(jīng)列出的所有條件句中示以上已經(jīng)列出的所有

35、條件句中未能列出的其他可能取值未能列出的其他可能取值。(3)CASE語(yǔ)句中的選擇值只能出現(xiàn)一次。語(yǔ)句中的選擇值只能出現(xiàn)一次。(4)CASE語(yǔ)句執(zhí)行必須選中,且只能選中所列條件語(yǔ)句中語(yǔ)句執(zhí)行必須選中,且只能選中所列條件語(yǔ)句中的一條。的一條。CASE abc IS WHEN 00 = so=0; co so=1; co so=1; co so=0; co NULL ; END CASE;2. 2. 標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)類(lèi)型標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)類(lèi)型 STD_LOGIC_VECTOR(標(biāo)準(zhǔn)一維矢量數(shù)據(jù))(標(biāo)準(zhǔn)一維矢量數(shù)據(jù)) STD_LOGIC (標(biāo)準(zhǔn)位類(lèi)型)(標(biāo)準(zhǔn)位類(lèi)型)在使用在使用STD_LOGIC_VEC

36、TOR中,中,必須注明其數(shù)組寬度,即位寬,如:必須注明其數(shù)組寬度,即位寬,如: B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 或或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4) B = 01100010 ; - B(7)為為 0 B(4 DOWNTO 1) = 1101 ; - B(4)為為 1 B(7 DOWNTO 4) = A ; - B(6)等于等于 A(2) ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; BEGIN3. 3. 并

37、置操作符并置操作符 SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ;SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ;.a = 1 0 d(1) 1 ; - 元素與元素并置,并置元素與元素并置,并置后的數(shù)組長(zhǎng)度為后的數(shù)組長(zhǎng)度為4. IF a d = 101011 THEN . - 在在IF條件句中可以使用并置符條件句中可以使用并置符 操作符操作符&表示將操作數(shù)或數(shù)組表示將操作數(shù)或數(shù)組合并起來(lái)合并起來(lái)形成新的數(shù)組矢量形成新的數(shù)組矢量如:如:“VH”&“DL”的結(jié)果為的結(jié)果為“VHDL”利用并置符可以有多種方式建

38、立新的數(shù)組利用并置符可以有多種方式建立新的數(shù)組BEGIN abc = a & b ; -a相并相并b,即,即a與與b并置操作并置操作圖圖3-11 全加器全加器f_adder電路圖及其實(shí)體模塊電路圖及其實(shí)體模塊 3.1.5 1位二進(jìn)制全加器的位二進(jìn)制全加器的VHDL描述描述 I113aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderA1位全加器可以由兩個(gè)半加器和一個(gè)或門(mén)連接而成。位全加器可以由兩個(gè)半加器和一個(gè)或門(mén)連接而成。半加器的電路原理圖半加器的電路原理圖半加器的半加器的VHD

39、L描述描述全加器的頂層描述全加器的頂層描述【例【例3-18】 LIBRARY IEEE ; -或門(mén)邏輯描述或門(mén)邏輯描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c ain,b=bin,co=d,so=e);-例化語(yǔ)句例化語(yǔ)句 u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MA

40、P(a=d, b=f, c=cout); END ARCHITECTURE fd1; I113aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderA1. 全加器描述和例化語(yǔ)句全加器描述和例化語(yǔ)句 COMPONENT 元件名元件名 IS PORT (端口名表端口名表) ;END COMPONENT 文件名文件名 ; 例化語(yǔ)句由兩個(gè)部分組成,一是將一個(gè)現(xiàn)成的設(shè)計(jì)實(shí)體定義例化語(yǔ)句由兩個(gè)部分組成,一是將一個(gè)現(xiàn)成的設(shè)計(jì)實(shí)體定義為一個(gè)元件,語(yǔ)句功能對(duì)待調(diào)用的元件作出調(diào)用聲明。為一個(gè)元件,語(yǔ)句功能對(duì)待

41、調(diào)用的元件作出調(diào)用聲明。元件定義語(yǔ)句,相當(dāng)于對(duì)一個(gè)現(xiàn)成的設(shè)計(jì)實(shí)體進(jìn)行封裝,使其只留出對(duì)外元件定義語(yǔ)句,相當(dāng)于對(duì)一個(gè)現(xiàn)成的設(shè)計(jì)實(shí)體進(jìn)行封裝,使其只留出對(duì)外的接口界面,如同一個(gè)集成芯片只留幾個(gè)引腳一般。的接口界面,如同一個(gè)集成芯片只留幾個(gè)引腳一般。端口名表,將對(duì)應(yīng)端口名表,將對(duì)應(yīng)VHDL的實(shí)體描述直接復(fù)制,將的實(shí)體描述直接復(fù)制,將ENTITY改成改成COMPONENT即可。(注意一一對(duì)應(yīng)關(guān)系)。即可。(注意一一對(duì)應(yīng)關(guān)系)。元件定義語(yǔ)句必須放在結(jié)構(gòu)體的元件定義語(yǔ)句必須放在結(jié)構(gòu)體的Architecture和和BEGIN之間。之間。COMPONENT h_adder PORT ( a,b : IN ST

42、D_LOGIC; co,so : OUT STD_LOGIC);元件例化是多層次的,一個(gè)調(diào)用了較低層次元件的頂層設(shè)計(jì)實(shí)元件例化是多層次的,一個(gè)調(diào)用了較低層次元件的頂層設(shè)計(jì)實(shí)體本身也可以被更高層次的設(shè)計(jì)實(shí)體所調(diào)用,成為該設(shè)計(jì)實(shí)體體本身也可以被更高層次的設(shè)計(jì)實(shí)體所調(diào)用,成為該設(shè)計(jì)實(shí)體中的一個(gè)元件。(類(lèi)似于層層嵌套的關(guān)系,系統(tǒng)中的一個(gè)元件。(類(lèi)似于層層嵌套的關(guān)系,系統(tǒng)-子系統(tǒng)子系統(tǒng)-部件)部件)1. 全加器描述和例化語(yǔ)句全加器描述和例化語(yǔ)句 例化名例化名 : 元件名元件名 PORT MAP( 端口名端口名 = 連接端口名連接端口名,.); COMPONENT h_adder PORT ( c,d :

43、 IN STD_LOGIC; e,f : OUT STD_LOGIC); COMPONENT h_adder PORT ( a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC);元件例化的端口說(shuō)明,不一定需要使用唯一的表達(dá)方式,但元件例化的端口說(shuō)明,不一定需要使用唯一的表達(dá)方式,但注意端口信號(hào)的數(shù)據(jù)類(lèi)型的定義必須與原設(shè)計(jì)實(shí)體文件一致。注意端口信號(hào)的數(shù)據(jù)類(lèi)型的定義必須與原設(shè)計(jì)實(shí)體文件一致。第二部分是元件與當(dāng)前設(shè)計(jì)實(shí)體(頂層文件)中元件間及端第二部分是元件與當(dāng)前設(shè)計(jì)實(shí)體(頂層文件)中元件間及端口的連接說(shuō)明??诘倪B接說(shuō)明。例化名例化名 : 元件名元件名 PORT MA

44、P( 端口名端口名 = 連接端口名連接端口名,.); 第二部分是元件與當(dāng)前設(shè)計(jì)實(shí)體(頂層文件)中元件間及端第二部分是元件與當(dāng)前設(shè)計(jì)實(shí)體(頂層文件)中元件間及端口的連接說(shuō)明??诘倪B接說(shuō)明。SIGNAL d,e,f : STD_LOGIC; -定義定義3個(gè)信號(hào)作為內(nèi)部的連接線(xiàn)。個(gè)信號(hào)作為內(nèi)部的連接線(xiàn)。 BEGIN u1 : h_adder PORT MAP(a=ain,b=bin,co=d,so=e);-例化語(yǔ)句例化語(yǔ)句 u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout);I113

45、aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderA例化名例化名端口名:頂層文件中待連接的各個(gè)元件本身的端口名端口名:頂層文件中待連接的各個(gè)元件本身的端口名連接端口名:頂層系統(tǒng)中,準(zhǔn)備接入元件的端口相連的通信線(xiàn)名連接端口名:頂層系統(tǒng)中,準(zhǔn)備接入元件的端口相連的通信線(xiàn)名左邊放置內(nèi)部元件的端口名,右面放置內(nèi)部元件以外需要連接的端口名和信左邊放置內(nèi)部元件的端口名,右面放置內(nèi)部元件以外需要連接的端口名和信號(hào)名號(hào)名3.2 基本時(shí)序電路的基本時(shí)序電路的VHDL描述描述 VHDL在時(shí)序電路的描述上有

46、許多獨(dú)特之處。在時(shí)序電路的描述上有許多獨(dú)特之處。VHDL主要通過(guò)對(duì)時(shí)序器件功能和邏輯行為的描述,而非結(jié)構(gòu)主要通過(guò)對(duì)時(shí)序器件功能和邏輯行為的描述,而非結(jié)構(gòu)上的描述使得計(jì)算機(jī)綜合出符合要求的時(shí)序電路。上的描述使得計(jì)算機(jī)綜合出符合要求的時(shí)序電路。行為描述方式體現(xiàn)了行為描述方式體現(xiàn)了VHDL電路系統(tǒng)行為描述的強(qiáng)大功能。電路系統(tǒng)行為描述的強(qiáng)大功能。3.2.1 D觸發(fā)器的觸發(fā)器的VHDL描述描述 X康芯科技康芯科技【例【例3-6】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D :

47、 IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -類(lèi)似于在芯片內(nèi)部定義一個(gè)數(shù)據(jù)的暫存節(jié)點(diǎn)類(lèi)似于在芯片內(nèi)部定義一個(gè)數(shù)據(jù)的暫存節(jié)點(diǎn) BEGIN PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; -將內(nèi)部的暫存數(shù)據(jù)向端口輸出(雙橫線(xiàn)將內(nèi)部的暫存數(shù)據(jù)向端口輸出(雙橫線(xiàn)-是注釋符號(hào))是注釋符號(hào)) END bhv; 圖3-4 D觸發(fā)器

48、圖圖3-6 D觸發(fā)器觸發(fā)器3.2.1 D觸發(fā)器的描述觸發(fā)器的描述圖3-4 D觸發(fā)器1. 1.上升沿檢測(cè)表式和信號(hào)屬性函數(shù)上升沿檢測(cè)表式和信號(hào)屬性函數(shù)EVENT “CLKEVENT AND CLK=1” EVENT EVENT 上述條件語(yǔ)句的判斷表達(dá)式用于檢測(cè)時(shí)鐘信號(hào)上述條件語(yǔ)句的判斷表達(dá)式用于檢測(cè)時(shí)鐘信號(hào)CLK的上升沿,的上升沿,若檢測(cè)到若檢測(cè)到CLK的上升沿,表達(dá)式將輸出的上升沿,表達(dá)式將輸出TRUEEVENT是信號(hào)屬性函數(shù),用于獲得信號(hào)行為的信息的函數(shù)是信號(hào)屬性函數(shù),用于獲得信號(hào)行為的信息的函數(shù)CLKEVENT 是對(duì)時(shí)鐘信號(hào)是對(duì)時(shí)鐘信號(hào)CLK(標(biāo)識(shí)符)在當(dāng)前的一個(gè)極(標(biāo)識(shí)符)在當(dāng)前的一個(gè)極

49、小的時(shí)間段內(nèi)發(fā)生時(shí)間的情況進(jìn)行檢測(cè)。小的時(shí)間段內(nèi)發(fā)生時(shí)間的情況進(jìn)行檢測(cè)。發(fā)生事件,就是發(fā)生事件,就是CLK在其數(shù)據(jù)類(lèi)型的取值范圍內(nèi)發(fā)生變化,從在其數(shù)據(jù)類(lèi)型的取值范圍內(nèi)發(fā)生變化,從一種取值轉(zhuǎn)變到另一種取值。一種取值轉(zhuǎn)變到另一種取值。注意注意CLK的數(shù)據(jù)類(lèi)型定義,的數(shù)據(jù)類(lèi)型定義,BIT STD_LOGIC是不一樣的。而是不一樣的。而且需要考慮跳變前、跳變后的邏輯輸出值。且需要考慮跳變前、跳變后的邏輯輸出值。CLKEVENT改成改成 CLKEVENT AND CLK=1,表示,表示CLK時(shí)間時(shí)間在時(shí)間內(nèi)發(fā)生跳變,而且之后保持高電平狀態(tài)。在時(shí)間內(nèi)發(fā)生跳變,而且之后保持高電平狀態(tài)。兩種情況相與后,滿(mǎn)足上

50、述條件,輸出兩種情況相與后,滿(mǎn)足上述條件,輸出TRUE,得到一個(gè)綜合,得到一個(gè)綜合判斷,對(duì)信號(hào)判斷,對(duì)信號(hào)CLK的上升沿進(jìn)行檢測(cè)。的上升沿進(jìn)行檢測(cè)。CLKEVENT AND CLK=1成為上升沿測(cè)試語(yǔ)句。成為上升沿測(cè)試語(yǔ)句。PROCESS (CLK,Q1) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ;2. 2. 不完整條件語(yǔ)句與時(shí)序電路不完整條件語(yǔ)句與時(shí)序電路 在在D觸發(fā)器中,完成觸發(fā)器保持原有信號(hào)功能的語(yǔ)句提示觸發(fā)器中,完成觸發(fā)器保持原有信號(hào)功能的語(yǔ)句提示當(dāng)當(dāng)CLK被觸發(fā)啟動(dòng)時(shí),被觸發(fā)啟動(dòng)時(shí),IF語(yǔ)句將測(cè)定

51、表達(dá)式語(yǔ)句將測(cè)定表達(dá)式“CLKEVENT AND CLK = 1 ”是否滿(mǎn)足條件。是否滿(mǎn)足條件。若若CLK為上升沿,滿(mǎn)足條件表達(dá)式的檢測(cè),執(zhí)行賦值為上升沿,滿(mǎn)足條件表達(dá)式的檢測(cè),執(zhí)行賦值Q1 b THEN q = 1 ; ELSIF a b THEN q b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; . 綜上,引入時(shí)序電路結(jié)構(gòu)的必要條件和關(guān)鍵是:綜上,引入時(shí)序電路結(jié)構(gòu)的必要條件和關(guān)鍵是:不完整的任何形式的條件語(yǔ)句的出現(xiàn),且并不局限于不完整的任何形式的條件語(yǔ)句的出現(xiàn),且并不局限于if語(yǔ)句,甚語(yǔ)句,甚至不局限于順序語(yǔ)句。至不局限于順序語(yǔ)句。3.2.3 實(shí)現(xiàn)時(shí)序電路的

52、實(shí)現(xiàn)時(shí)序電路的VHDL不同表述不同表述 (非唯一性)(非唯一性)【例【例3-11】.PROCESS (CLK) BEGINIF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -確保確保CLK的變化是一次上升沿的跳變的變化是一次上升沿的跳變 END IF; END PROCESS ; 利用表達(dá)式來(lái)利用表達(dá)式來(lái)CLKEVENT AND CLK = 1 檢測(cè)檢測(cè)CLK的上升沿,從而實(shí)現(xiàn)了的上升沿,從而實(shí)現(xiàn)了邊沿觸發(fā)型寄存器的設(shè)計(jì)。邊沿觸發(fā)型寄存器的設(shè)計(jì)。VHDL還有其他多種實(shí)現(xiàn)時(shí)序元件的常用方式還有其他多種實(shí)現(xiàn)時(shí)序元件的常用方式例:信

53、號(hào)例:信號(hào)CLK的數(shù)據(jù)類(lèi)型是的數(shù)據(jù)類(lèi)型是STD_LOGIC,它可能的取值有,它可能的取值有9種,而種,而CLKEVENT 為真的條件是為真的條件是CLK在在9種數(shù)據(jù)中的任何兩種間的跳變。種數(shù)據(jù)中的任何兩種間的跳變。當(dāng)當(dāng)CLKEVENT AND CLK = 1 為真時(shí),并不能推定為真時(shí),并不能推定CLK的前一狀態(tài)為的前一狀態(tài)為0,為了確保為了確保CLK發(fā)生上升沿跳變,可表述為發(fā)生上升沿跳變,可表述為3.2.3 實(shí)現(xiàn)時(shí)序電路的實(shí)現(xiàn)時(shí)序電路的VHDL不同表述不同表述 【例【例3-12】.PROCESS (CLK) BEGINIF CLK=1 AND CLKLAST_VALUE=0 -同例同例3-11

54、 THEN Q = D ; END IF; END PROCESS ; LAST_VALUE也屬于信號(hào)屬性函數(shù),它表示最近一次事件發(fā)生前的值。也屬于信號(hào)屬性函數(shù),它表示最近一次事件發(fā)生前的值。CLKLAST_VALUE=0為為T(mén)RUE,表示,表示CLK在上一狀態(tài)為在上一狀態(tài)為0【例【例3-11】.PROCESS (CLK) BEGINIF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -確保確保CLK的變化是一次上升沿的跳變的變化是一次上升沿的跳變 END IF; END PROCESS ; 【例【例3-13】LIBRARY I

55、EEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF3 IS PORT (CLK,D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) - 必須打開(kāi)必須打開(kāi)STD_LOGIC_1164程序包程序包 THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; -在此,賦值語(yǔ)句可以放在進(jìn)程外,作為并行賦值

56、語(yǔ)句在此,賦值語(yǔ)句可以放在進(jìn)程外,作為并行賦值語(yǔ)句 END ; Rising_edge()是是IEEE庫(kù)標(biāo)準(zhǔn)程庫(kù)標(biāo)準(zhǔn)程序包序包STD_LOGIC_1164的預(yù)定的預(yù)定義函數(shù)義函數(shù) 這條語(yǔ)句只能用于標(biāo)準(zhǔn)邏輯位這條語(yǔ)句只能用于標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型STD_LOGIC的信號(hào)。的信號(hào)。 必須打開(kāi)必須打開(kāi)IEEE庫(kù)和程序包庫(kù)和程序包STD_LOGIC_1164,定義,定義CLK的數(shù)據(jù)類(lèi)型為的數(shù)據(jù)類(lèi)型為STD_LOGIC3.2.3 實(shí)現(xiàn)時(shí)序電路的實(shí)現(xiàn)時(shí)序電路的VHDL不同表述不同表述 【例【例3-14】.PROCESS BEGIN wait until CLK = 1 ; -利用利用wait語(yǔ)句語(yǔ)句

57、Q = D ;END PROCESS; 下降沿語(yǔ)句:下降沿語(yǔ)句: CLKEVENT AND (CLK=0) AND (CLKLAST_VALUE=1) Falling_edge()CLKEVENT AND CLK = 0利用利用wait until語(yǔ)句實(shí)現(xiàn)時(shí)序電路設(shè)計(jì),含義是如果語(yǔ)句實(shí)現(xiàn)時(shí)序電路設(shè)計(jì),含義是如果CLK當(dāng)前的當(dāng)前的值不是值不是1,就等待并保持,就等待并保持Q的原值不變,直到的原值不變,直到CLK變?yōu)樽優(yōu)?時(shí)時(shí)才對(duì)才對(duì)Q進(jìn)行賦值更新。進(jìn)行賦值更新。VHDL要求當(dāng)進(jìn)程語(yǔ)句中使用要求當(dāng)進(jìn)程語(yǔ)句中使用wait語(yǔ)句后,就語(yǔ)句后,就不必列出敏感信不必列出敏感信號(hào)號(hào)3.2.3 實(shí)現(xiàn)時(shí)序電路的實(shí)

58、現(xiàn)時(shí)序電路的VHDL不同表述不同表述 【例【例3-15】.PROCESS (CLK) BEGIN -可以將可以將BEGIN和和PROCESS寫(xiě)再一行寫(xiě)再一行 IF CLK = 1 THEN Q = D ; -利用進(jìn)程的啟動(dòng)特性產(chǎn)生對(duì)利用進(jìn)程的啟動(dòng)特性產(chǎn)生對(duì)CLK的邊沿檢測(cè)的邊沿檢測(cè) END IF; END PROCESS ; 例例3-15描述的描述的D觸發(fā)器的觸發(fā)器的CLK邊沿檢測(cè)是由,邊沿檢測(cè)是由,PROCESS語(yǔ)句和語(yǔ)句和IF語(yǔ)句的功能特性相結(jié)合實(shí)現(xiàn)的。語(yǔ)句的功能特性相結(jié)合實(shí)現(xiàn)的。圖圖3-7 例例3-13的時(shí)序波形的時(shí)序波形 1. 當(dāng)當(dāng)CLK為為0時(shí),時(shí),PROCESS語(yǔ)句處于等待狀態(tài),直

59、到發(fā)生一語(yǔ)句處于等待狀態(tài),直到發(fā)生一次由次由0到到1的跳變才啟動(dòng)進(jìn)程語(yǔ)句。的跳變才啟動(dòng)進(jìn)程語(yǔ)句。2. 進(jìn)入進(jìn)程執(zhí)行進(jìn)入進(jìn)程執(zhí)行IF語(yǔ)句時(shí),又滿(mǎn)足了語(yǔ)句時(shí),又滿(mǎn)足了CLK為為1的條件,于是的條件,于是對(duì)對(duì)Q進(jìn)行賦值更新。進(jìn)行賦值更新。3. 此前,此前,Q一直保持原值不變,直到下一次上跳時(shí)鐘邊沿的到來(lái)。一直保持原值不變,直到下一次上跳時(shí)鐘邊沿的到來(lái)。3.2.3 實(shí)現(xiàn)時(shí)序電路的實(shí)現(xiàn)時(shí)序電路的VHDL不同表述不同表述 【例【例3-16】.PROCESS (CLK,D) BEGIN IF CLK = 1 -電平觸發(fā)型寄存器電平觸發(fā)型寄存器 THEN Q = D ; END IF; END PROCESS

60、 ; 圖圖3-8 例例3-14的時(shí)序波形的時(shí)序波形 Q必須處于數(shù)據(jù)原值保存的狀態(tài),必須處于數(shù)據(jù)原值保存的狀態(tài),綜合結(jié)果提供了一個(gè)電平觸發(fā)型綜合結(jié)果提供了一個(gè)電平觸發(fā)型的時(shí)序元件的時(shí)序元件1. CLK發(fā)生跳變發(fā)生跳變2. D發(fā)生跳變發(fā)生跳變X康芯科技康芯科技3.2.4 異步時(shí)序電路設(shè)計(jì)異步時(shí)序電路設(shè)計(jì) 構(gòu)成時(shí)序電路的進(jìn)程稱(chēng)為時(shí)鐘進(jìn)程。構(gòu)成時(shí)序電路的進(jìn)程稱(chēng)為時(shí)鐘進(jìn)程。 在時(shí)序電路設(shè)計(jì)中應(yīng)注意,一個(gè)時(shí)鐘進(jìn)程只能構(gòu)成對(duì)應(yīng)單一在時(shí)序電路設(shè)計(jì)中應(yīng)注意,一個(gè)時(shí)鐘進(jìn)程只能構(gòu)成對(duì)應(yīng)單一時(shí)鐘信號(hào)的時(shí)序電路,如果在進(jìn)程中需要構(gòu)成多觸發(fā)器時(shí)序時(shí)鐘信號(hào)的時(shí)序電路,如果在進(jìn)程中需要構(gòu)成多觸發(fā)器時(shí)序電路,也只能產(chǎn)生對(duì)應(yīng)某個(gè)單一時(shí)鐘的同步時(shí)序邏輯

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論