![《VHDL設(shè)計(jì)初步》PPT課件_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/29/a18b9910-188e-4cc6-9f8c-6311e8ee8409/a18b9910-188e-4cc6-9f8c-6311e8ee84091.gif)
![《VHDL設(shè)計(jì)初步》PPT課件_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/29/a18b9910-188e-4cc6-9f8c-6311e8ee8409/a18b9910-188e-4cc6-9f8c-6311e8ee84092.gif)
![《VHDL設(shè)計(jì)初步》PPT課件_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/29/a18b9910-188e-4cc6-9f8c-6311e8ee8409/a18b9910-188e-4cc6-9f8c-6311e8ee84093.gif)
![《VHDL設(shè)計(jì)初步》PPT課件_第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/29/a18b9910-188e-4cc6-9f8c-6311e8ee8409/a18b9910-188e-4cc6-9f8c-6311e8ee84094.gif)
![《VHDL設(shè)計(jì)初步》PPT課件_第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-3/29/a18b9910-188e-4cc6-9f8c-6311e8ee8409/a18b9910-188e-4cc6-9f8c-6311e8ee84095.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VHDL 設(shè)計(jì)初步,物理科學(xué)與電子工程系,參考資料,1 潘松,黃繼業(yè). EDA技術(shù)實(shí)用教程. 北京,科學(xué)出版社. 2002 2潘松,黃繼業(yè). 現(xiàn)代DSP技術(shù). 西安,西安電子科技大學(xué)出版社. 2003,VHDL是非常高速集成電路硬件描述語(yǔ)言 (Very High speed Integrated Circuit Hardware Description Language)的英文縮寫(xiě)。 語(yǔ)法和風(fēng)格: (1)類似與現(xiàn)代高級(jí)編程語(yǔ)言,如C語(yǔ)言。 (2)VHDL描述的是硬件,它包含許多硬件特有的結(jié)構(gòu)。,VHDL程序的基本結(jié)構(gòu),Include “stdio.h”; Include “math.h”; i
2、nt main(void) int a,b,c; a=8; b=9; c=a+b; return c; ,Library IEEE; Use IEEE.STD_LOGIC_1164.all; Entity and2 is Port( a, b : in bit; c : out bit); End and2; Architecture a1 of and2 is Begin c = a and b; End a1;,VHDL程序,C程序,VHDL 入門(mén)的最有效的方法是通過(guò)具體電路實(shí)例引出對(duì)應(yīng)的VHDL 表述,通過(guò)這些有針對(duì)性的表述進(jìn)而學(xué)習(xí)相關(guān)的語(yǔ)句語(yǔ)法,再通過(guò)多個(gè)類似實(shí)例的學(xué)習(xí),逐步完備VHD
3、L 的基本語(yǔ)法知識(shí)和提高電路的描述和設(shè)計(jì)能力。據(jù)此,全章通過(guò)數(shù)個(gè)簡(jiǎn)單、完整而典型的VHDL 設(shè)計(jì)示例,使讀者初步了解用VHDL 表達(dá)和設(shè)計(jì)電路的方法,并對(duì)由此而引出的VHDL 語(yǔ)言現(xiàn)象和語(yǔ)句規(guī)則能逐步趨向系統(tǒng)的了解。 由于用硬件描述語(yǔ)言來(lái)對(duì)電子線路的表達(dá)和設(shè)計(jì)是EDA 建模和實(shí)現(xiàn)技術(shù)中最基本和最重要的方法,其它的許多方法都是建筑在這一基礎(chǔ)之上的,如使用MATLAB/DSP Builder的設(shè)計(jì)方案、圖形方式的狀態(tài)機(jī)輸入法、原理圖輸入法等等。因此VHDL 的學(xué)習(xí)在EDA技術(shù)的掌握中具有十分重要的地位。,1 簡(jiǎn)單組合電路的VHDL 描述,2選1 多路選擇器是典型的組合電路,本章以此電路的VHDL
4、表述與設(shè)計(jì)為例,引出相關(guān)的VHDL 結(jié)構(gòu)、語(yǔ)句表述、數(shù)據(jù)規(guī)則和語(yǔ)法特點(diǎn),并加以詳細(xì)說(shuō)明。,1.1 多路選擇器的VHDL 描述 2 選1 多路選擇器的電路模型,或元件圖如圖3-1 所示。例3-1 是其VHDL 的完整描述,即可使用VHDL 綜合器直接綜合出實(shí)現(xiàn)即定功能的邏輯電路,對(duì)應(yīng)的邏輯電路如圖3-2 所示,因而可以認(rèn)為是此多路選擇器的內(nèi)部電路結(jié)構(gòu)。,注意,電路的功能可以是唯一的,但其電路的結(jié)構(gòu)方式不是唯一的,它決定于綜合器的基本元件庫(kù)的來(lái)源、優(yōu)化方向和約束的選擇、目標(biāo)器件(指FPGA/CPLD)的結(jié)構(gòu)特點(diǎn)等等。 圖中,a 和b 分別為兩個(gè)數(shù)據(jù)輸入端的端口名,s 為通道選擇控制信號(hào)輸入端的端口
5、名,y為輸出端的端口名?!癿ux21a”是設(shè)計(jì)者為此器件取的名稱(好的名稱應(yīng)該體現(xiàn)器件的基本功能特點(diǎn))。,【例3-1】 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 ; 由例3-1 可見(jiàn),此電路的VHDL 描述由兩大部分組成:,以關(guān)鍵詞ENTITY 引導(dǎo),END ENTITY mux21a 結(jié)尾的語(yǔ)句部分,稱
6、為實(shí)體。VHDL 的實(shí)體描述了電路器件的外部情況及各信號(hào)端口的基本性質(zhì),如信號(hào)流動(dòng)的方向,流動(dòng)在其上的信號(hào)結(jié)構(gòu)方式和數(shù)據(jù)類型等。圖3-1 可以認(rèn)為是實(shí)體的圖形表達(dá)。 以關(guān)鍵詞ARCHITECTURE 引導(dǎo),END ARCHITECTURE one 結(jié)尾的語(yǔ)句部分,稱為結(jié)構(gòu)體。結(jié)構(gòu)體負(fù)責(zé)描述電路器件的內(nèi)部邏輯功能和電路結(jié)構(gòu)。圖3-2 是此結(jié)構(gòu)體的某種可能的電路原理圖表達(dá)。 在VHDL 結(jié)構(gòu)體中用于描述邏輯功能和電路結(jié)構(gòu)的語(yǔ)句分為順序語(yǔ)句和并行語(yǔ)句兩部分。順序語(yǔ)句的執(zhí)行方式類似于普通軟件語(yǔ)言的程序執(zhí)行方式,是按照語(yǔ)句的前后排列方式逐條順序執(zhí)行的。而在結(jié)構(gòu)體中的并行語(yǔ)句,無(wú)論有多少行語(yǔ)句,都是同時(shí)執(zhí)
7、行的,與語(yǔ)句的前后次序無(wú)關(guān)(姑且暫時(shí)這樣認(rèn)為,以后將給予詳細(xì)說(shuō)明)。,例3-1 中的邏輯描述是用WHEN_ELSE 結(jié)構(gòu)的并行語(yǔ)句表達(dá)的。它的含義是,當(dāng)滿足條件s =0,即s 為低電平時(shí),a 輸入端的信號(hào)傳送至y ,否則(即s 為高電平時(shí))b 輸入端的信號(hào)傳送至y。 也可以用其他的語(yǔ)句形式來(lái)描述以上相同的邏輯行為。例3-2 中的功能描述語(yǔ)句都用了并行語(yǔ)句,是用布爾方程的表達(dá)式來(lái)描述的。其中的“AND”、“OR”、“NOT”分別是“與”“或”、“非”的邏輯操作符號(hào)。 例3-3 則給出了用順序語(yǔ)句IF_THEN_ELSE 表達(dá)的功能描述。以上3 例用不同的表達(dá)方式描述了相同的邏輯功能,其電路功能可
8、以從圖3-3 的時(shí)序波形(QuartusII 仿真波形)中看出,分別向a 和b 端輸入兩個(gè)不同頻率的信號(hào)fa 和fb(fa fb),當(dāng)s 為高電平時(shí), y 輸出fb,而當(dāng)s 為低電平時(shí),y 輸出fa。顯然,圖3-3 的波型證實(shí)了VHDL 邏輯設(shè)計(jì)的正確性。,注意, 以上各例的實(shí)體和結(jié)構(gòu)體分別是以“ END ENTITY xxx ” 和“ END ARCHITECTURE xx ”語(yǔ)句結(jié)尾的,這是符合VHDL 的IEEE STD 1076_1993 版的語(yǔ)法要求的。若根據(jù)VHDL87 版本,即IEEE STD 1076_1987 的語(yǔ)法要求,這兩條結(jié)尾語(yǔ)句只需寫(xiě)成“END;”或“END xx”。
9、但考慮到目前絕大多數(shù)常用的EDA 工具中的VHDL 綜合器都兼容兩種VHDL 版本的語(yǔ)法規(guī)則,且許多最新的VHDL 方面的資料,仍然使用VHDL87版本語(yǔ)言規(guī)則,因此,出于實(shí)用的目的,對(duì)于以后出現(xiàn)的示例,不再特意指出VHDL 兩種版本的語(yǔ)法差異處。但對(duì)于不同的EDA 工具,仍需根據(jù)設(shè)計(jì)程序不同的VHDL 版本表述,在綜合前作相應(yīng)的設(shè)置。,【例3-2】見(jiàn)文件夾Mux21a1 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a
10、IS SIGNAL d,e : BIT; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECTURE one ;,【例3-3】見(jiàn)文件夾Mux21a2 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCE
11、SS; END ARCHITECTURE one ;,圖3-3 mux21a功能時(shí)序波形,3.1.2 相關(guān)語(yǔ)句結(jié)構(gòu)和語(yǔ)法說(shuō)明 以下將對(duì)例3-1 至例3-3 中出現(xiàn)的相關(guān)語(yǔ)句結(jié)構(gòu)和語(yǔ)法含義作出說(shuō)明: 1. 實(shí)體表達(dá) VHDL 完整的、可綜合的程序結(jié)構(gòu)必須能完整地表達(dá)一片專用集成電路ASIC 器件的端口結(jié)構(gòu)和電路功能,即無(wú)論是一片74LS138 還是一片CPU,都必須包含實(shí)體和結(jié)構(gòu)體兩個(gè)最基本的語(yǔ)言結(jié)構(gòu)。這里將含有完整程序結(jié)構(gòu)(包含實(shí)體和結(jié)構(gòu)體)的VHDL 表述稱為設(shè)計(jì)實(shí)體。如前所述,實(shí)體描述的是電路器件的端口構(gòu)成和信號(hào)屬性,它的最簡(jiǎn)表式如下:,【例3-4】 ENTITY e_name IS PO
12、RT ( p_name : port_m data_type; . p_namei : port_mi data_type ); END ENTITY e_name; 上式中,ENTITY、IS、PORT 和END ENTITY 都是描述實(shí)體的關(guān)鍵詞,在實(shí)體描述中必須包含這些關(guān)鍵詞。在編輯中,關(guān)鍵詞不分大寫(xiě)和小寫(xiě)。,實(shí)體名,端口信號(hào)名,端口模式,數(shù)據(jù)類型,2. 實(shí)體名 例3-4 中的e_name 是實(shí)體名,是標(biāo)識(shí)符,具體取名由設(shè)計(jì)者自定。由于實(shí)體名實(shí)際上表達(dá)的應(yīng)該設(shè)計(jì)電路的器件名,所以最好根據(jù)相應(yīng)電路的功能來(lái)確定,如4 位二進(jìn)制計(jì)數(shù)器,實(shí)體名可取為counter4b;8 位二進(jìn)制加法器,實(shí)體名
13、可取為adder8b,等等。但應(yīng)注意,不應(yīng)用數(shù)字或中文定義實(shí)體名,也不應(yīng)用與EDA 工具庫(kù)中已定義好的元件名作為實(shí)體名,如or2、latch 等,且不能用數(shù)字起頭的實(shí)體名,如74LSxx。 3. 端口語(yǔ)句和端口信號(hào)名 描述電路的端口及其端口信號(hào)必須用端口語(yǔ)句PORT( )引導(dǎo),并在語(yǔ)句結(jié)尾處加分號(hào)“;”。例3-4 中的p_name 是端口信號(hào)名,如例3-1 中的端口信號(hào)名分別是a、b、s 和y。,4. 端口模式 在例3-4中的port_m表達(dá)端口模式,可綜合的端口模式有四種,它們分別是“IN”、“OUT”、“INOUT”和“BUFFER”,用于定義端口上數(shù)據(jù)的流動(dòng)方向和方式: IN:輸入端口,
14、定義的通道為單向只讀模式。規(guī)定數(shù)據(jù)只能由此端口被讀入實(shí)體。 OUT:輸出端口,定義的通道為單向輸出模式。規(guī)定數(shù)據(jù)只能通過(guò)此端口從實(shí)體向外流出,或者說(shuō)可以將實(shí)體中的數(shù)據(jù)向此端口賦值。 INOUT:定義的通道確定為輸入輸出雙向端口。即從端口的內(nèi)部看,可以對(duì)此端口進(jìn)行賦值,或通過(guò)此端口讀入外部的數(shù)據(jù)信息;而從端口的外部看,信號(hào)既可由此端口流出,也可向此端口輸入信號(hào)。如 RAM 的數(shù)據(jù)口,單片機(jī)的I/O 口等。 BUFFER:緩沖端口,其功能與INOUT 類似,區(qū)別在于當(dāng)需要輸入數(shù)據(jù)時(shí),只允許內(nèi)部回讀輸出的信號(hào),即允許反饋。如計(jì)數(shù)器設(shè)計(jì),可將計(jì)數(shù)器輸出的計(jì)數(shù)信號(hào)回讀,以作下一計(jì)數(shù)值的初值。與INOUT
15、 模式相比,BUFFER 回讀的信號(hào)不是由外部輸入的,而是由內(nèi)部產(chǎn)生,向外輸出的信號(hào)。,5. 數(shù)據(jù)類型 例3-4 中的data_type 是數(shù)據(jù)類型名。例3-1 中,端口信號(hào)a、b、s 和y 的數(shù)據(jù)類型都定義為BIT。由于VHDL 中任何一種數(shù)據(jù)對(duì)象的應(yīng)用都必須嚴(yán)格限定其取值范圍和數(shù)值類型,即對(duì)其傳輸或存儲(chǔ)的數(shù)據(jù)的類型要作明確的界定,因此,在VHDL 設(shè)計(jì)中,必須預(yù)先定義好要使用的數(shù)據(jù)類型,這對(duì)于大規(guī)模電路描述的排錯(cuò)是十分有益的。相關(guān)的數(shù)據(jù)類型有INTEGER 類型、BOOLEAN 類型、STD_LOGIC 類型和BIT 類型等。 BIT 數(shù)據(jù)類型的信號(hào)規(guī)定的取值范圍是邏輯位1和0。在VHDL
16、 中,邏輯位0 和1 的表達(dá)必須加單引號(hào),否則VHDL 綜合器將0 和1 解釋為整數(shù)數(shù)據(jù)類型INTEGER。 BIT 數(shù)據(jù)類型可以參與邏輯運(yùn)算或算術(shù)運(yùn)算,其結(jié)果仍是位的數(shù)據(jù)類型。VHDL 綜合器用一個(gè)二進(jìn)制位表示BIT。將例3-1 中的端口信號(hào)a、b、s 和y 的數(shù)據(jù)類型都定義為BIT表示:a、b、s 和y 的取值范圍,或者說(shuō)數(shù)據(jù)范圍都被限定在邏輯位1和0的二值范圍內(nèi)。,6. 結(jié)構(gòu)體表達(dá) 結(jié)構(gòu)體的一般表達(dá)如例3-5 所示。 【例3-5】 ARCHITECTURE arch_name OF e_name IS 說(shuō)明語(yǔ)句 BEGIN (功能描述語(yǔ)句) END ARCHITECTURE arch_n
17、ame ; 上式中,ARCHITECTURE、OF、IS、BEGIN 和END ARCHITECTURE 都是描述結(jié)構(gòu)體的關(guān)鍵詞,在描述中必須包含它們。arch_name 是結(jié)構(gòu)體名,是標(biāo)識(shí)符。,說(shuō)明語(yǔ)句包括在結(jié)構(gòu)體中,用以說(shuō)明和定義數(shù)據(jù)對(duì)象、數(shù)據(jù)類型、元件調(diào)用聲明等等。說(shuō)明語(yǔ)句并非是必須的,(功能描述語(yǔ)句)則不同,結(jié)構(gòu)體中必須給出相應(yīng)的電路功能描述語(yǔ)句,可以是并行語(yǔ)句,順序語(yǔ)句或它們的混合。 一般地,一個(gè)可綜合的,完整的VHDL 程序有比較固定的結(jié)構(gòu)。設(shè)計(jì)實(shí)體中,一般首先出現(xiàn)的是各類庫(kù)及其程序包的使用聲明,包括未以顯式表達(dá)的工作庫(kù)WORK 庫(kù)的使用聲明,然后是實(shí)體描述,最后是結(jié)構(gòu)體描述,而在
18、結(jié)構(gòu)體中可以含有不同的邏輯表達(dá)語(yǔ)句結(jié)構(gòu)。如前所述,在此把一個(gè)完整的可綜合的VHDL 程序設(shè)計(jì)構(gòu)建為設(shè)計(jì)實(shí)體(獨(dú)立的電路功能結(jié)構(gòu)),而其程序代碼常被稱為VHDL 的RTL 描述。,7. 賦值符號(hào)和數(shù)據(jù)比較符號(hào) 例3-1 中的表達(dá)式y(tǒng)= a 表示輸入端口a 的數(shù)據(jù)向輸出端口y 傳輸;但也可以解釋為信號(hào)a 向信號(hào)y 賦值。在VHDL 仿真中賦值操作y= a并非立即發(fā)生的,而是要經(jīng)歷一個(gè)模擬器的最小分辨時(shí)間后,才將a 的值賦予y 。在此不妨將 看成是實(shí)際電路存在的固有延時(shí)量。VHDL 要求賦值符“=”兩邊的信號(hào)的數(shù)據(jù)類型必須一致。 例3-1 中,條件判斷語(yǔ)句WHEN_ELSE 通過(guò)測(cè)定表式 s=0 的
19、比較結(jié)果,以確定由哪一端口向y 賦值。條件語(yǔ)句WHEN_ELSE 的判定依據(jù)是表式 s=0 輸出的結(jié)果。表式中的等號(hào)“=”沒(méi)有賦值的含義,只是一種數(shù)據(jù)比較符號(hào)。其表式輸出結(jié)果的數(shù)據(jù)類型是布爾數(shù)據(jù)類型BOOLEAN。BOOLEAN 類型的取值分別是:true(真)和false(偽)。即當(dāng)s,為高電平時(shí),表式 s=0 輸出“false”;當(dāng)s 為低電平時(shí),表式 s =0 輸出“true”。在VHDL 綜合器或仿真器中分別用1和0表達(dá)true 和false。布爾數(shù)據(jù)不是數(shù)值,只能用于邏輯操作或條件判斷。 用于條件語(yǔ)句的判斷表達(dá)式可以是一個(gè)值,也可以是更復(fù)雜的邏輯或運(yùn)算表達(dá)式,如: IF a THEN
20、 . - 注意,a 的數(shù)據(jù)類型必須是boolean IF (s1=0)AND(s2=1)OR(cb+1) THEN .,8. 邏輯操作符 例3-2 中出現(xiàn)的文字AND、OR 和NOT 是邏輯操作符號(hào)。VHDL 共有7 種基本邏輯操作符,它們是AND(與)、OR(或)、NAND(與非)、NOR(或非)、XOR(異或)、XNOR(同或)和NOT(取反)。信號(hào)在這些操作符的作用下可構(gòu)成組合邏輯。邏輯操作符所要求的操作數(shù)(操作對(duì)象)的數(shù)據(jù)類型有3 種,即BIT、BOOLEAN 和STD_LOGIC。 注意,與其他HDL 用某種符號(hào)表達(dá)邏輯操作符不同,VHDL 中直接用對(duì)應(yīng)的英語(yǔ)文字表達(dá)邏輯操作符號(hào),這
21、更明確顯示了VHDL 作為硬件行為描述語(yǔ)言的特征。,9. 條件語(yǔ)句 例3-3 利用IF_THEN_ELSE 表達(dá)的VHDL 順序語(yǔ)句的方式,同樣描述了一個(gè)多路選擇器的電路行為。其結(jié)構(gòu)體中的IF 語(yǔ)句的執(zhí)行順序類似于軟件語(yǔ)言,首先判斷如果s 為低電平,則執(zhí)行y=a 語(yǔ)句,否則(當(dāng)s 為高電平),則執(zhí)行語(yǔ)句y=b。由此可見(jiàn)VHDL 的順序語(yǔ)句同樣能描述并行運(yùn)行的組合電路。注意,IF 語(yǔ)句必須以語(yǔ)句“END IF;”結(jié)束。 10. WHEN_ELSE 條件信號(hào)賦值語(yǔ)句 例3-1 中出現(xiàn)的是條件信號(hào)賦值語(yǔ)句,這是一種并行賦值語(yǔ)句,其表達(dá)方式如下: 賦值目標(biāo) = 表達(dá)式 WHEN 賦值條件 ELSE 表
22、達(dá)式 WHEN 賦值條件 ELSE . 表達(dá)式 ;,在結(jié)構(gòu)體中的條件信號(hào)賦值語(yǔ)句的功能與在進(jìn)程中的IF 語(yǔ)句相同,在執(zhí)行條件信號(hào)語(yǔ)句時(shí),每一“賦值條件”是按書(shū)寫(xiě)的先后關(guān)系逐項(xiàng)測(cè)定的,一旦發(fā)現(xiàn)(賦值條件= true),立即將“表達(dá)式”的值賦給“賦值目標(biāo)”信號(hào)。 注意,由于條件測(cè)試的順序性,條件信號(hào)賦值語(yǔ)句中的第一子句具有最高賦值優(yōu)先級(jí),第二句其次,如此類推。例如在以下程序中,如果當(dāng)p1 和p2 同時(shí)為1時(shí),z 獲得的賦值是a 而不可能是b 。還應(yīng)該注意,相對(duì)于在同一結(jié)構(gòu)體中的其它語(yǔ)句,此類賦值語(yǔ)句作為一個(gè)完整的語(yǔ)句,屬于并行語(yǔ)句。 z = a WHEN p1 = 1 ELSE b WHEN p2
23、 = 1 ELSE c ;,11. 進(jìn)程語(yǔ)句和順序語(yǔ)句 由例3-3 可見(jiàn),順序語(yǔ)句“IF_THEN_ELSE_END IF;”是放在由“PROCESS. END PROCESS”引導(dǎo)的語(yǔ)句中的。由PROCESS 引導(dǎo)的語(yǔ)句稱為進(jìn)程語(yǔ)句。在VHDL 中,所有合法的順序描述語(yǔ)句都必須放在進(jìn)程語(yǔ)句中。 PROCESS 旁的(a,b,s)稱為進(jìn)程的敏感信號(hào)表,通常要求將進(jìn)程中所有的輸入信號(hào)都放在敏感信號(hào)表中。例如,例3-3 中的輸入信號(hào)是a、b 和s,所以將它們?nèi)苛腥朊舾行盘?hào)表中。由于PROCESS 語(yǔ)句的執(zhí)行依賴于敏感信號(hào)的變化(或稱發(fā)生事件),當(dāng)某一敏感信號(hào)(如a)從原來(lái)的1跳變到0,或者從原來(lái)
24、的0跳變到1時(shí),就將啟動(dòng)此進(jìn)程語(yǔ)句,于是此PROCESS 至END PROCESS 引導(dǎo)的語(yǔ)句(包括其中的順序語(yǔ)句)被執(zhí)行一遍,然后返回進(jìn)程的起始端,進(jìn)入等待狀態(tài),直到下一次敏感信號(hào)表中某一信號(hào)或某些信號(hào)發(fā)生事件才再次進(jìn)入“啟動(dòng)運(yùn)行”狀態(tài)。 在一個(gè)結(jié)構(gòu)體中可以包含任意個(gè)進(jìn)程語(yǔ)句,所有的進(jìn)程語(yǔ)句都是并行語(yǔ)句,而由任一進(jìn)程PROCESS 引導(dǎo)的語(yǔ)句(包含在其中的語(yǔ)句)結(jié)構(gòu)屬于順序語(yǔ)句。,12. 文件取名和存盤(pán) 如果用QuartusII 提供的VHDL 文本編輯器編輯VHDL 代碼文件,在保存文件時(shí),必須賦給一個(gè)正確的文件名。一般地,文件名可以由設(shè)計(jì)者任意給定,但文件后綴擴(kuò)展名必須是“.vhd”,如
25、adder_f.vhd。但考慮到某些EDA 軟件的限制和VHDL 程序的特點(diǎn),以及調(diào)用的方便性,因此建議程序的文件名盡可能與該程序的實(shí)體名一致,如例3-1 的文件名應(yīng)該是:mux21a.vhd。原則上文件名不分大小寫(xiě),但推薦使用小寫(xiě),特別是后綴。,3.2 簡(jiǎn)單時(shí)序電路的VHDL 描述,與其他硬件描述語(yǔ)言相比,在時(shí)序電路的描述上,VHDL 具有許多獨(dú)特之處。最明顯的是VHDL 主要通過(guò)對(duì)時(shí)序器件功能和邏輯行為的描述,而非結(jié)構(gòu)上的描述使得計(jì)算機(jī)綜合出符合要求的時(shí)序電路,從而充分體現(xiàn)了VHDL 電路系統(tǒng)行為描述的強(qiáng)大功能。以下將對(duì)一個(gè)典型的時(shí)序元件D 觸發(fā)器的VHDL 描述進(jìn)行詳細(xì)分析,從而得出時(shí)序
26、電路描述的一般規(guī)律和設(shè)計(jì)方法。,3.2.1 D 觸發(fā)器 最簡(jiǎn)單、最常用,并最具代表性的時(shí)序電路是D 觸發(fā)器,它是現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)中最基本的時(shí)序單元和底層元件。D 觸發(fā)器的描述包含了VHDL 對(duì)時(shí)序電路的最基本和典型的表達(dá)方式,同時(shí)也包含了VHDL 中許多最具特色的語(yǔ)言現(xiàn)象。例3-6 是對(duì)D 觸發(fā)器元件圖3-4 的描述。從VHDL 的描述上看,與例3-3 相比,例3-6 多了4 個(gè)部分: (1) 由LIBRARY 引導(dǎo)的庫(kù)的說(shuō)明部分。 (2) 使用了另一種數(shù)據(jù)類型:STD_LOGIC。 (3) 定義了一個(gè)內(nèi)部節(jié)點(diǎn)信號(hào):SIGNAL。 (4) 使用了一種新的條件判斷表式:CLKEVENT AND
27、CLK = 1。,除此之外,雖然例3-3 描述的是組合電路,而例3-6 描述的是時(shí)序電路,如果不詳細(xì)分析其中的表述含義,二例在語(yǔ)句結(jié)構(gòu)和語(yǔ)言應(yīng)用上沒(méi)有明顯的差異,也不存在如其他硬件描述語(yǔ)言(如ABEL、AHDL)那樣包含用于表示時(shí)序或組合邏輯的特征語(yǔ)句,更沒(méi)有與特定的軟件或硬件相關(guān)的特征屬性語(yǔ)句。這也充分表明了VHDL 電路描述與設(shè)計(jì)平臺(tái)和硬件實(shí)現(xiàn)對(duì)象無(wú)關(guān)性的優(yōu)秀特點(diǎn)。,【例3-6】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ;
28、Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -類似于在芯片內(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ù)向端口輸出(雙橫線-是注釋符號(hào)) END bhv,3.2.2 D 觸發(fā)器VHDL 描述的語(yǔ)言現(xiàn)象說(shuō)明 以下對(duì)例3-6 中出現(xiàn)的新的語(yǔ)句語(yǔ)言現(xiàn)象作出說(shuō)明。 1. 標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型STD_
29、LOGIC 從例3-6 可見(jiàn),D 觸發(fā)器的3 個(gè)信號(hào)端口CLK、D 和Q 的數(shù)據(jù)類型都被定義為STD_LOGIC(例3-1 中,端口信號(hào)的數(shù)據(jù)類型被定義為BIT)。就數(shù)字系統(tǒng)設(shè)計(jì)來(lái)說(shuō),類型 STD_LOGIC 比BIT 包含的內(nèi)容豐富和完整得多,當(dāng)然也包含了BIT 類型。試比較以下STD_LOGIC 和BIT 兩種數(shù)據(jù)類型的程序包定義表式(其中TYPE 是數(shù)據(jù)類型定義語(yǔ)句)。 BIT 數(shù)據(jù)類型定義: TYPE BIT IS(0,1); -只有兩種取值 STD_LOGIC 數(shù)據(jù)類型定義: TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-);,STD_LOGIC 所定義的9
30、 種數(shù)據(jù)的含義是:U表示未初始化的;X表示強(qiáng)未知的;0表示強(qiáng)邏輯0;1表示強(qiáng)邏輯1;Z表示高阻態(tài);W 表示弱未知的;L表示弱邏輯0;H表示弱邏輯1;-表示忽略。 它們完整地概括了數(shù)字系統(tǒng)中所有可能的數(shù)據(jù)表現(xiàn)形式,所以例3-6 中的CLK、D 和Q 比例3-1 中的a、b、s 具有更寬的取值范圍,因而其描述和實(shí)際電路有更好的適應(yīng)性。 在仿真和綜合中,將信號(hào)或其他數(shù)據(jù)對(duì)象定義為STD_LOGIC 數(shù)據(jù)類型是非常重要的,它可以使設(shè)計(jì)者精確地模擬一些未知的和具有高阻態(tài)的線路情況。對(duì)于綜合器,高阻態(tài)Z和-忽略態(tài)(有的綜合器用X)可用于三態(tài)的描述。STD_LOGIC 型數(shù)據(jù)在數(shù)字器件中實(shí)現(xiàn)的只有其中的4
31、到5 種值,即X (或/和)、0、1和Z,其他類型通常不可綜合。 注意,此例中給出的STD_LOGIC 數(shù)據(jù)類型的定義主要是借以學(xué)習(xí)一種新的語(yǔ)法現(xiàn)象,而非D 觸發(fā)器等時(shí)序電路必須使用此類數(shù)據(jù)類型。,2. 設(shè)計(jì)庫(kù)和標(biāo)準(zhǔn)程序包 有許多數(shù)據(jù)類型的說(shuō)明,及類似的函數(shù)是預(yù)先放在VHDL 綜合器附帶的設(shè)計(jì)庫(kù)和程序包中的。如BIT 數(shù)據(jù)類型的定義是包含在VHDL 標(biāo)準(zhǔn)程序包STANDARD 中的,而程序包STANDARD 包含于VHDL 標(biāo)準(zhǔn)庫(kù)STD 中。一般,為了使用BIT 數(shù)據(jù)類型,應(yīng)該在例3-1的程序上面增加如下3 句說(shuō)明語(yǔ)句: LIBRARY WORK ; LIBRARY STD ; USE STD
32、.STANDARD.ALL ; 第2 句中的LIBRARY 是關(guān)鍵詞,LIBRARY STD 表示打開(kāi)STD 庫(kù);第3 句的USE 和ALL 是關(guān)鍵詞,全句表示允許使用STD 庫(kù)中STANDARD 程序包中的所有內(nèi)容(.ALL),如類型定義、函數(shù)、過(guò)程、常量等。 此外,由于要求VHDL 設(shè)計(jì)文件保存在某一文件夾,如d:myfile 中,并指定為工程PROJECT 的文件所在的目錄,VHDL 工具就將此路徑指定的文件夾默認(rèn)工作庫(kù)(WORKLIBRARY),于是在VHDL 程序前面還應(yīng)該增加,“LIBRARY WORK;”語(yǔ)句,VHDL 工具才能調(diào)用此路徑中相關(guān)的元件和程序包。 但是,由于VHDL
33、 標(biāo)準(zhǔn)中規(guī)定標(biāo)準(zhǔn)庫(kù)STD 和工作庫(kù)WORK 都是默認(rèn)打開(kāi)的,因此就可以像例3-1 那樣,不必將上述庫(kù)和程序包的使用語(yǔ)句以顯式表達(dá)在VHDL 程序中。除非如例3-6 那樣,需要使用一些特殊的程序包。 使用庫(kù)和程序包的一般定義表式是: LIBRARY ; USE .ALL ; STD_LOGIC 數(shù)據(jù)類型定義在被稱為STD_LOGIC_1164 的程序包中,此包由IEEE 定義,而且此程序包所在的程序庫(kù)的庫(kù)名被取名為IEEE。由于IEEE 庫(kù)不屬于VHDL 標(biāo)準(zhǔn)庫(kù),所以在使用其庫(kù)中內(nèi)容前,必須事先給予聲明。即如例3-6 最上的兩句語(yǔ)句: LIBRARY IEEE ; USE IEEE.STD_LO
34、GIC_1164.ALL ;,正是出于需要定義端口信號(hào)的數(shù)據(jù)類型為STD_LOGIC的目的,當(dāng)然也可以定義為BIT類型或其他數(shù)據(jù)類型,但一般應(yīng)用中推薦定義STD_LOGIC 類型。 3. 信號(hào)定義和數(shù)據(jù)對(duì)象 例3-6 中的語(yǔ)句“SIGNAL Q1:STD_LOGIC;”表示在描述的器件DFF1 內(nèi)部定義標(biāo)識(shí)符Q1 的數(shù)據(jù)對(duì)象為信號(hào)SIGNAL,其數(shù)據(jù)類型為STD_LOGIC。由于Q1 被定義為器件的內(nèi)部節(jié)點(diǎn)信號(hào),數(shù)據(jù)的進(jìn)出不像端口信號(hào)那樣受限制,所以不必定義其端口模式(如IN、OUT 等)。定義Q1 的目的是為了在設(shè)計(jì)更大的電路時(shí)使用由此引入的時(shí)序電路的信號(hào),這是一種常用的時(shí)序電路設(shè)計(jì)的方式。
35、事實(shí)上,如果在例3-6 中不作Q1 的定義,其結(jié)構(gòu)體(如將其中的賦值語(yǔ)句Q1 = D 改為Q = D)同樣能綜合出相同的結(jié)果,但不推薦這種設(shè)計(jì)方式。,語(yǔ)句“SIGNAL Q1:STD_LOGIC;”中的SIGNAL 是定義某標(biāo)識(shí)符為信號(hào)的關(guān)鍵詞。 在VHDL 中,數(shù)據(jù)對(duì)象(Data Objects)類似于一種容器,它接受不同數(shù)據(jù)類型的賦值。數(shù)據(jù)對(duì)象有3 類,即信號(hào)(SIGNAL)、變量(VARIABLE)和常量(CONSTANT)。在VHDL中,被定義的標(biāo)識(shí)符必須確定為某類數(shù)據(jù)對(duì)象,同時(shí)還必須被定義為某種數(shù)據(jù)類型。如例3-6 中的Q1,對(duì)它規(guī)定的數(shù)據(jù)對(duì)象是信號(hào),而數(shù)據(jù)類型是STD_LOGIC,
36、前者規(guī)定了Q1 的行為方式和功能特點(diǎn),后者限定了Q1 的取值范圍。VHDL 規(guī)定,Q1 作為信號(hào),它可以如同一根連線那樣在整個(gè)結(jié)構(gòu)體中傳遞信息,也可以根據(jù)程序的功能描述構(gòu)成一個(gè)時(shí)序元件;但Q1 傳遞或存儲(chǔ)的數(shù)據(jù)的類型只能包含在STD_LOGIC 的定義中。 需要注意的是,語(yǔ)句“SIGNAL Q1:STD_LOGIC;”僅規(guī)定了Q1 的屬性特征,而其功能定位需要由結(jié)構(gòu)體中的語(yǔ)句描述具體確定。如果將Q1 比喻為一瓶葡萄酒,則其特定形狀的酒瓶就是其數(shù)據(jù)對(duì)象,瓶中的葡萄酒(而非其他酒)就是其數(shù)據(jù)類型,而這瓶酒的用處(功能)只能由擁有這酒的人來(lái)確定,即結(jié)構(gòu)體中的具體描述。,4. 上升沿檢測(cè)表式和信號(hào)屬性
37、函數(shù)EVENT 例3-6 中的條件語(yǔ)句的判斷表式“CLKEVENT AND CLK=1”是用于檢測(cè)時(shí)鐘信號(hào)CLK 的上升沿的,即如果檢測(cè)到CLK 的上升沿,此表達(dá)式將輸出“true”。 關(guān)鍵詞EVENT 是信號(hào)屬性函數(shù),用來(lái)獲得信號(hào)行為信息的函數(shù)稱為信號(hào)屬性函數(shù)。VHDL 通過(guò)以下表式來(lái)測(cè)定某信號(hào)的跳變情況: EVENT 短語(yǔ)“clockEVENT”就是對(duì)clock 標(biāo)識(shí)符的信號(hào)在當(dāng)前的一個(gè)極小的時(shí)間段內(nèi)發(fā)生事件的情況進(jìn)行檢測(cè)。所謂發(fā)生事件,就是clock 在其數(shù)據(jù)類型的取值范圍內(nèi)發(fā)生變化,從一種取值轉(zhuǎn)變到另一種取值(或電平方式)。如果clock 的數(shù)據(jù)類型定義為STD_LOGIC,則在 時(shí)間
38、段內(nèi),clock 從其數(shù)據(jù)類型允許的9 種值中的任何一個(gè)值向另一值跳變,如由0變成1、由1變成0或由Z變成0,都認(rèn)為發(fā)生了事件,于是此表式將輸出一個(gè)布爾值true,否則為false。 如果將以上短語(yǔ)clockEVENT 改成語(yǔ)句:clockEVENT AND clock=1,則表示一旦“clockEVENT”在,時(shí)間內(nèi)測(cè)得clock 有一個(gè)跳變,而此小時(shí)間段之后又測(cè)得clock 為高電平1,即滿足此語(yǔ)句右側(cè)的clock =1的條件,于是兩者相與(AND)后返回值為true,由此便可以從當(dāng)前的clock =1推斷在此前的 時(shí)間段內(nèi),clock必為0 (設(shè)clock 的數(shù)據(jù)類型是BIT)。因此,以
39、上的表達(dá)式就可以用來(lái)對(duì)信號(hào)clock的上升沿進(jìn)行檢測(cè),于是語(yǔ)句clockEVENT AND clock =1就成了邊沿測(cè)試語(yǔ)句。 5. 不完整條件語(yǔ)句與時(shí)序電路 現(xiàn)在來(lái)分析例3-6 中對(duì)D 觸發(fā)器功能的描述。 首先考察時(shí)鐘信號(hào)CLK 上升沿出現(xiàn)的情況(即滿足IF 語(yǔ)句條件的情況)。當(dāng)CLK 發(fā)生變化時(shí),PROCESS 語(yǔ)句被啟動(dòng),IF 語(yǔ)句將測(cè)定條件表式“CLKEVENT AND CLK=1”是否滿足條件,如果CLK 的確出現(xiàn)了上升沿,則滿足條件表式對(duì)是上升沿檢測(cè),于是執(zhí)行語(yǔ)句Q1=D,即將D 的數(shù)據(jù)向內(nèi)部信號(hào)Q1 賦值,即更新Q1,并結(jié)束IF 語(yǔ)句,最后將Q1的值向端口信號(hào)Q 輸出。至此,是
40、否可以認(rèn)為,CLK 上升沿測(cè)定語(yǔ)句CLKEVENT ANDCLK=1就成為綜合器構(gòu)建時(shí)序電路的必要條件呢?回答顯然是否定的。,其次再考察如果CLK 沒(méi)有發(fā)生變化,或者說(shuō)CLK沒(méi)有出現(xiàn)上升沿方式的跳變時(shí)IF 語(yǔ)句的行為。這時(shí)由于IF 語(yǔ)句不滿足條件,即條件表式給出“FALSE”,于是將跳過(guò)賦值表式Q1=D,不執(zhí)行此賦值表式而結(jié)束IF 語(yǔ)句。由于在此,IF 語(yǔ)句中沒(méi)有利用通常的ELSE語(yǔ)句明確指出當(dāng)IF 語(yǔ)句不滿足條件時(shí)作何操作。顯然這是一種不完整的條件語(yǔ)句(即在條件語(yǔ)句中,沒(méi)有將所有可能發(fā)生的條件給出對(duì)應(yīng)的處理方式)。對(duì)于這種語(yǔ)言現(xiàn)象,VHDL綜合器理解為,對(duì)于不滿足條件,跳過(guò)賦值語(yǔ)句Q1=D
41、不予執(zhí)行,即意味著保持Q1 的原值不變(保持前一次時(shí)鐘上升沿后Q1 被更新的值)。對(duì)于數(shù)字電路來(lái)說(shuō),試圖保持一個(gè)值不變,就意味著具有存儲(chǔ)功能的元件的使用,就是必須引進(jìn)時(shí)序元件來(lái)保存Q1 中的原值,直到滿足IF 語(yǔ)句的判斷條件后才能更新Q1 中的值。 顯然,時(shí)序電路構(gòu)建的關(guān)鍵在于利用這種不完整的條件語(yǔ)句的描述。這種構(gòu)成時(shí)序電路的方式是VHDL 描述時(shí)序電路最重要的途徑。通常,完整的條件語(yǔ)句只能構(gòu)成組合邏輯電路,如例3-3 中,IF_THEN_ELSE 語(yǔ)句指明了s 為1和0全部可能的條件下的賦值操作,從而產(chǎn)生了多路選擇器組合電路模塊。,然而必須注意,雖然在構(gòu)成時(shí)序電路方面,可以利用不完整的條件語(yǔ)
42、句所具有的獨(dú)特功能構(gòu)成時(shí)序電路,但在利用條件語(yǔ)句進(jìn)行純組合電路設(shè)計(jì)時(shí),如果沒(méi)有充分考慮電路中所有可能出現(xiàn)的問(wèn)題,即沒(méi)有列全所有的條件及其對(duì)應(yīng)的處理方法,將導(dǎo)致不完整的條件語(yǔ)句的出現(xiàn),從而產(chǎn)生設(shè)計(jì)者不希望的組合與時(shí)序電路的混合體。在此,不妨比較例3-7和例3-8 的綜合結(jié)果。可以認(rèn)為例3-7 的原意是要設(shè)計(jì)一個(gè)純組合電路的比較器,但是由于在條件語(yǔ)句中漏掉了給出當(dāng)a1b1 時(shí)q1 作何操作的表述,結(jié)果導(dǎo)致了一個(gè)不完整的條件語(yǔ)句。這時(shí),綜合器將對(duì)例3-7 的條件表述解釋為:當(dāng)條件a1b1 時(shí)對(duì)q1 不作任何賦值操作,即在此情況下保持q1 的原值,這便意味著必須為q1 配置一個(gè)寄存器,以便保存它的原值
43、。圖3-5 所示的電路圖即為例3-7 的綜合結(jié)果。不難發(fā)現(xiàn)綜合器已為比較結(jié)果配置了一個(gè)寄存器。通常在仿真時(shí),對(duì)這類電路的測(cè)試,很難發(fā)現(xiàn)在電路中已被插入了不必要的時(shí)序元件,這樣浪費(fèi)了邏輯資源,降低了電路的工作速度,影響了電路的可靠性。因此,設(shè)計(jì)者應(yīng)該盡量避免此類電路的出現(xiàn)。,例3-8 是對(duì)例3-7 的改進(jìn),其中的“ELSE q1=0”語(yǔ)句即已交代了當(dāng)a1 小于等于b1情況下,q1 作何賦值行為,從而能產(chǎn)生圖3-6 所示的簡(jiǎn)潔的組合電路。 現(xiàn)在已不難發(fā)現(xiàn),引入時(shí)序電路結(jié)構(gòu)的必要條件和關(guān)鍵所在并非是邊沿檢測(cè)表述“clockEVENT AND clock=1”的應(yīng)用或是其他什么語(yǔ)句結(jié)構(gòu),而是不完整的任
44、何形式的條件語(yǔ)句的出現(xiàn),且不局限于IF 語(yǔ)句。,【例3-7】 ENTITY COMP_BAD IS PORT( a1,b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSIF a1 b1 THEN q1 = 0 ;- 未提及當(dāng)a1=b1時(shí),q1作何操作 END IF; END PROCESS ; END ;,【例3-8】 ENTITY COMP_GOOD IS PORT( a1,b1 : IN BIT; q
45、1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_GOOD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; END PROCESS ; END ;,3.2.3 實(shí)現(xiàn)時(shí)序電路的不同表述 例3-6 通過(guò)利用表式“CLKEVENT AND CLK=1”來(lái)檢測(cè)CLK 的上升沿,從而實(shí)現(xiàn)了邊沿觸發(fā)寄存器的設(shè)計(jì)。事實(shí)上,VHDL 還有其他多種實(shí)現(xiàn)時(shí)序元件的方式。 嚴(yán)格地說(shuō),如果信號(hào)CLK 的數(shù)據(jù)類型是STD_LOGIC,則它可能的取值有9 種,而CLKEVENT
46、 為真的條件是CLK 在9 種數(shù)據(jù)中的任何兩種間的跳變,因而當(dāng)表式: CLKEVENT AND CLK=1 為真時(shí),并不能推定CLK 在 時(shí)刻前是0 (例如,它可以從Z變到1),從而即使CLK 有“事件”發(fā)生也不能肯定CLK 發(fā)生了一次由0到1的上升沿的跳變。為了確保此CLK 發(fā)生的是一次上升沿的跳變,例3-9 采用了如下的條件判斷表式: CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0),與EVENT 一樣,LAST_VALUE 也屬于預(yù)定義的信號(hào)屬性函數(shù),它表示最近一次事件發(fā)生前的值。CLKLAST_VALUE=0為T(mén)RUE,表示CLK 在 時(shí)刻前為0。
47、CLKEVENT AND CLK=1和CLKLAST_VALUE=0相與為真的話,則保證了CLK在 時(shí)刻內(nèi)的跳變是從0變到1的。例3-9、3-10、3-11 都有相同的用意,只是例3-11 調(diào)用了一個(gè)測(cè)定CLK 上升沿的函數(shù)rising edge( )。 rising edge( )是VHDL 在IEEE 庫(kù)中標(biāo)準(zhǔn)程序包STD_LOGIC_1164 內(nèi)的預(yù)定義函數(shù),這條語(yǔ)句只能用于標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型STD_LOGIC 的信號(hào)。因此必須打開(kāi)IEEE 庫(kù)和程序包STD_LOGIC_1164,然后定義相關(guān)的信號(hào)(如CLK)的數(shù)據(jù)類型為標(biāo)準(zhǔn)邏輯位數(shù)據(jù)類型STD_LOGIC。在此CLK 的數(shù)據(jù)類型必須是
48、STD_LOGIC。 測(cè)下降沿可用的語(yǔ)句有:falling edge( )、CLKEVENT AND (CLK=0) 、 CLK=0 AND CLKLAST_VALUE=1 等。,【例3-9】 . PROCESS (CLK) BEGIN IF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -確保CLK的變化是一次上升沿的跳變 END IF; END PROCESS ; 【例3-10】 . PROCESS (CLK) BEGIN IF CLK=1 AND CLKLAST_VALUE=0 -同例3-9 THEN Q = D ; EN
49、D IF; END PROCESS ;,【例3-11】 LIBRARY IEEE ; 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)STD_LOGIC_1164程序包 THEN Q1 = D ; END IF; END PROCESS ;
50、 Q = Q1 ; -在此,賦值語(yǔ)句可以放在進(jìn)程外,作為并行賦值語(yǔ)句 END ;,例3-12 則是利用了一條wait until 語(yǔ)句實(shí)現(xiàn)時(shí)序電路設(shè)計(jì)的,含義是如果CLK 當(dāng)前的值不是1,就等待并保持Q 的原值不變,直到CLK 變?yōu)?時(shí)才對(duì)Q 進(jìn)行賦值更新。VHDL要求,當(dāng)進(jìn)程語(yǔ)句中使用wait 語(yǔ)句后,就不必列出敏感信號(hào)。 例3-13 描述的D 觸發(fā)器的CLK邊沿檢測(cè)是由PROCESS 語(yǔ)句和IF 語(yǔ)句相結(jié)合實(shí)現(xiàn)的。其原理是:當(dāng)CLK 為0時(shí),PROCESS 語(yǔ)句處于等待狀態(tài),直到發(fā)生一次由0到1的跳變才啟動(dòng)進(jìn)程語(yǔ)句,而在執(zhí)行IF 語(yǔ)句時(shí),又滿足了CLK 為1的條件,于是對(duì)Q 進(jìn)行賦值更新,
51、而此前,Q 一直保持原值不變,直到下一次上跳時(shí)鐘邊沿的到來(lái)。因此例3-9 至例3-13描述的都是相同的D 觸發(fā)器,其電路的仿真測(cè)試波形如圖3-7 所示。由波形可見(jiàn),Q 的變化僅發(fā)生于CLK 的上升后。 與例3-13 相比,例3-14 僅在敏感信號(hào)表中多加了電路輸入信號(hào)D,但綜合后的電路功能卻發(fā)生了很大的變化。由時(shí)序圖3-8 可見(jiàn),它表現(xiàn)的是電平式觸發(fā)的鎖存器功能,與圖3-7 表現(xiàn)的波形有很大的區(qū)別。在CLK 處于高電平時(shí),輸出Q 隨D 的變化而變化,而CLK僅在低電平時(shí)保持?jǐn)?shù)據(jù)不變。,由例3-14 的語(yǔ)句分析可知,當(dāng)CLK為1不變時(shí),輸入數(shù)據(jù)D 的任何變化都會(huì)啟動(dòng)進(jìn)程PROCESS,從而實(shí)現(xiàn)輸
52、出信號(hào)Q 的更新,而當(dāng)CLK 原來(lái)為0時(shí),即使由于D 的變化啟動(dòng)了PROCESS,但由于不滿足IF 語(yǔ)句的條件,Q 仍然必須處于數(shù)據(jù)原值保存的狀態(tài)。顯然,例3-14 提供了一個(gè)電平型觸發(fā)的時(shí)序元件(鎖存器)的設(shè)計(jì)方法。 但需要指出,此類功能只有MaxplusII、QuartusII 等EDA 工具中含有,許多其他VHDL綜合器不承認(rèn)這類語(yǔ)法表述,它們都要求將進(jìn)程中的所有輸入信號(hào)都列進(jìn)敏感信號(hào)表中,否則給予警告信息。因此,對(duì)于這種綜合器,無(wú)法利用此類表述實(shí)現(xiàn)電平型觸發(fā)的時(shí)序元件,顯然,具體情況需要根據(jù)設(shè)計(jì)者使用的EDA 軟件的功能具體確定。在一般情況下,不推薦使用例3-14 的表達(dá)方式產(chǎn)生時(shí)序電
53、路。 由例3-9 至例3-14 可見(jiàn),時(shí)序電路的建立只能利用進(jìn)程中的順序語(yǔ)句來(lái)建立。此外,考慮到多數(shù)綜合器并不理會(huì)邊沿檢測(cè)語(yǔ)句中的信號(hào)的STD_LOGIC 數(shù)據(jù)類型,因此最常用和通用的邊沿檢測(cè)表式仍然是CLKEVENT AND CLK=1。,【例3-12】 . PROCESS BEGIN wait until CLK = 1 ; -利用wait語(yǔ)句 Q = D ; END PROCESS; 【例3-13】 . PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; -利用進(jìn)程的啟動(dòng)特性產(chǎn)生對(duì)CLK的邊沿檢測(cè) END IF; END PROCESS ;,【例3-1
54、4】 . PROCESS (CLK,D) BEGIN IF CLK = 1 -電平觸發(fā)型寄存器 THEN Q = D ; END IF; END PROCESS ;,Quartus II使用步驟,編輯VHDL文件 建立相關(guān)工程 編譯排錯(cuò) 設(shè)置波形仿真文件 仿真,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),首先,打開(kāi)Quartus II軟件:,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),在File菜單中選擇New,打開(kāi)新建對(duì)話框:,1.注意,我們使用的是VHDL語(yǔ)言,所以這里首先要選擇新建VHDL File,2.然后點(diǎn)擊OK,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),在出現(xiàn)的名字為VHDL1.vhd的文件里面可
55、以編輯VHDL文件:,1.在這里可以編輯VHDL語(yǔ)言描述的電路,2.然后點(diǎn)擊保存,保存到你所指定的文件夾中,例如E:/QuartusProject/MUX21A。注意,所有的關(guān)于本次設(shè)計(jì)的文件都要放到這個(gè)文件夾中,包括以后的一些文件!。,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),1.在這里填入文件名稱,注意文件名稱必須要和你VHDL文件中的實(shí)體名稱相同!,2. 點(diǎn)擊“保存”后,彈出該對(duì)話框,說(shuō)你是否要給這個(gè)文件建立一個(gè)工程,點(diǎn)擊“是”。我們必須要建立一個(gè)工程。,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),1.選擇一個(gè)文件夾,注意:大家一定要一個(gè)項(xiàng)目建立一個(gè)文件夾,不
56、要把好多個(gè)項(xiàng)目放在一個(gè)文件夾下面,那樣會(huì)很亂。,2.輸入項(xiàng)目的名稱,一般項(xiàng)目名稱和文件夾名稱相同即可。默認(rèn)情況項(xiàng)目名稱和上面建立的文件夾名稱相同。,3.輸入頂層設(shè)計(jì)實(shí)體的名稱,。默認(rèn)情況項(xiàng)目名稱和上面建立的文件夾名稱相同。,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),1.點(diǎn)擊Add All。,這就是加入的文件,即名字為max21a.vhd的文件。,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),1.選擇器件系列。,2.選擇具體器件型號(hào)。,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),1.注意,建立工程之后,這里有這樣的圖標(biāo)出現(xiàn)。,2.點(diǎn)擊該圖標(biāo)進(jìn)行編譯,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),該窗口顯示編譯狀態(tài),如果有錯(cuò)誤會(huì)給出錯(cuò)誤的大致情況。,顯示編譯進(jìn)度。,VHDL實(shí)例:2選1數(shù)據(jù)選擇器的設(shè)計(jì),編譯完成后,給出編譯的總體情況
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 成教學(xué)生藝術(shù)素養(yǎng)教育的現(xiàn)狀和提升路徑
- 2025年閘機(jī)系統(tǒng)項(xiàng)目合作計(jì)劃書(shū)
- 綠色插畫(huà)風(fēng)入職培訓(xùn)主題
- 智慧出行策略推廣模板
- 重陽(yáng)節(jié)文化講解模板
- 2025年納迪克酸酐項(xiàng)目發(fā)展計(jì)劃
- 工商資本投資農(nóng)業(yè)的引導(dǎo)機(jī)制
- 學(xué)術(shù)研究改革成果進(jìn)展評(píng)析論文
- 學(xué)習(xí)借鑒成功經(jīng)驗(yàn)加快兵團(tuán)農(nóng)工合作社發(fā)展-第六師奇臺(tái)農(nóng)場(chǎng)農(nóng)工合作社發(fā)展情況調(diào)查與啟示
- 低保申請(qǐng)書(shū) 個(gè)人
- 2025年一種板式過(guò)濾膜裝置項(xiàng)目投資可行性研究分析報(bào)告
- BMS基礎(chǔ)知識(shí)培訓(xùn)
- 質(zhì)保管理制度
- 2024年全國(guó)卷新課標(biāo)1高考英語(yǔ)試題及答案
- 2024新版《藥品管理法》培訓(xùn)課件
- 浙江省杭州市2024年中考英語(yǔ)真題(含答案)
- 《陸上風(fēng)電場(chǎng)工程設(shè)計(jì)概算編制規(guī)定及費(fèi)用標(biāo)準(zhǔn)》(NB-T 31011-2019)
- 第二講共振理論、有機(jī)酸堿理論
- 研究性學(xué)習(xí)課題——有趣對(duì)聯(lián)
- 電鍍工業(yè)園項(xiàng)目可行性研究報(bào)告-用于立項(xiàng)備案
- (精心整理)一元一次不等式組100道計(jì)算題
評(píng)論
0/150
提交評(píng)論