




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第二章第二章 VHDL語(yǔ)言語(yǔ)言程序的基本結(jié)構(gòu)程序的基本結(jié)構(gòu)2本章內(nèi)容本章內(nèi)容:nVHDL語(yǔ)言設(shè)計(jì)的基本單元及其構(gòu)成語(yǔ)言設(shè)計(jì)的基本單元及其構(gòu)成nVHDL語(yǔ)言構(gòu)造體的子結(jié)構(gòu)描述語(yǔ)言構(gòu)造體的子結(jié)構(gòu)描述塊語(yǔ)句塊語(yǔ)句進(jìn)程語(yǔ)句進(jìn)程語(yǔ)句子程序語(yǔ)句子程序語(yǔ)句n包集合、庫(kù)及配置包集合、庫(kù)及配置3一個(gè)完整的一個(gè)完整的VHDLVHDL語(yǔ)言程序通??珊Z(yǔ)言程序通??珊形鍌€(gè)部分有五個(gè)部分: :n實(shí)體實(shí)體(Entity)Entity) :描述所設(shè)計(jì)系統(tǒng)的外部接口信號(hào):描述所設(shè)計(jì)系統(tǒng)的外部接口信號(hào) 。n構(gòu)造體構(gòu)造體(Architecture)Architecture) :用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu):用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和
2、行為。和行為。n包集合包集合(package):存放各設(shè)計(jì)模塊都能共享的數(shù)據(jù):存放各設(shè)計(jì)模塊都能共享的數(shù)據(jù)類型、常數(shù)和子程序等類型、常數(shù)和子程序等 。n配置配置(configuration):用于從庫(kù)中選取所需單元來(lái):用于從庫(kù)中選取所需單元來(lái)組成系統(tǒng)設(shè)計(jì)的不同版本。組成系統(tǒng)設(shè)計(jì)的不同版本。n庫(kù)庫(kù)(library):存放已經(jīng)編譯的實(shí)體、構(gòu)造體、包集合:存放已經(jīng)編譯的實(shí)體、構(gòu)造體、包集合和配置。和配置??捎捎脩羯苫蛴煽捎捎脩羯苫蛴葾SICASIC芯片制造商提供。芯片制造商提供。4 實(shí)體說(shuō)明實(shí)體說(shuō)明(ENTITY) 結(jié)構(gòu)體結(jié)構(gòu)體(ARCHITECTURE) 進(jìn)程進(jìn)程或其它并行結(jié)構(gòu)或其它并行結(jié)構(gòu)配
3、置(配置(CONFIGURATION) 庫(kù)、程序包程序包VHDL程序程序 5一、一、VHDL語(yǔ)言設(shè)計(jì)的基本單元及其構(gòu)成語(yǔ)言設(shè)計(jì)的基本單元及其構(gòu)成nVHDL語(yǔ)言程序是用于描述硬件連接的結(jié)構(gòu)語(yǔ)言程序是用于描述硬件連接的結(jié)構(gòu)性程序,采用文本文件編寫。性程序,采用文本文件編寫。n電路模塊具有電路模塊具有外部接口外部接口和和內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)。6nVHDL用程序模塊表達(dá)硬件模塊:設(shè)定用程序模塊表達(dá)硬件模塊:設(shè)定外部外部端口端口、設(shè)計(jì)、設(shè)計(jì)內(nèi)部結(jié)構(gòu)內(nèi)部結(jié)構(gòu)。outputninput1inputnoutput1EntitySymbolCLRNENADQclkclrmux_outadsel2bcArchitec
4、ture SchematicnVHDL語(yǔ)言程語(yǔ)言程序設(shè)計(jì)的基本序設(shè)計(jì)的基本單元由實(shí)體說(shuō)單元由實(shí)體說(shuō)明明(entity declaration)和和構(gòu)造體構(gòu)造體(Architecture body)兩部分構(gòu)兩部分構(gòu)成。成。實(shí)體說(shuō)明部分:實(shí)體說(shuō)明部分:規(guī)定設(shè)計(jì)單元的規(guī)定設(shè)計(jì)單元的輸入輸出接口信輸入輸出接口信號(hào)或引腳。號(hào)或引腳。構(gòu)造體部分:定構(gòu)造體部分:定義設(shè)計(jì)單元的具義設(shè)計(jì)單元的具體構(gòu)造和操作體構(gòu)造和操作(行為行為)。7VHDL語(yǔ)言程序設(shè)計(jì)的基本單元語(yǔ)言程序設(shè)計(jì)的基本單元nVHDL語(yǔ)言程序設(shè)計(jì)的基本單元由實(shí)體說(shuō)明語(yǔ)言程序設(shè)計(jì)的基本單元由實(shí)體說(shuō)明(entity declaration)和構(gòu)造體和構(gòu)造
5、體(Architecture body)兩部分構(gòu)成。兩部分構(gòu)成。n實(shí)體說(shuō)明部分:規(guī)定設(shè)計(jì)單元的輸入輸出實(shí)體說(shuō)明部分:規(guī)定設(shè)計(jì)單元的輸入輸出接口信號(hào)或引腳。接口信號(hào)或引腳。n構(gòu)造體部分:定義設(shè)計(jì)單元的具體構(gòu)造和構(gòu)造體部分:定義設(shè)計(jì)單元的具體構(gòu)造和操作操作(行為行為)。8n以原理圖作比喻可以把實(shí)體想象成原理圖上的子圖符號(hào),構(gòu)造體就好比是與子圖符號(hào)對(duì)應(yīng)的子圖。n以一個(gè)3-8譯碼器的子圖符號(hào)和子圖作比。9entity mux isgeneric(m: time :=1 ns);port(d0,d1,sel: in bit; q: out bit);end mux;architecture connec
6、t of mux issignal tmp: bit;begin cale:process(d0,d1,sel) variable tmp1,tmp2,tmp3: bit; begin tmp1:=d0 and sel; tmp2 :=d1 and (not sel); tmp3 :=tmp1 or tmp2; tmp=tmp3; q=tmp after m; end process;end connect;n二選一電路的二選一電路的VHDL語(yǔ)言描述語(yǔ)言描述101、實(shí)體說(shuō)明實(shí)體說(shuō)明1) 實(shí)體說(shuō)明基本格式:實(shí)體說(shuō)明基本格式:entity 實(shí)體名實(shí)體名 is類屬參數(shù)說(shuō)明類屬參數(shù)說(shuō)明;-確定局部常量
7、或?qū)嶓w時(shí)限確定局部常量或?qū)嶓w時(shí)限端口說(shuō)明端口說(shuō)明;-確定輸入確定輸入/輸出端口數(shù)量及類型輸出端口數(shù)量及類型end 實(shí)體名;實(shí)體名;entity mux isgeneric (m: time :=1 ns);port (d0,d1,sel: in bit; q: out bit);end mux;11nVHDL語(yǔ)言語(yǔ)言不區(qū)分大小寫不區(qū)分大小寫n除了第一行除了第一行 entity is 以外,每一句以分號(hào)以外,每一句以分號(hào)“;”結(jié)束結(jié)束 ;n編寫程序時(shí),一行可以含若干句(以分號(hào)間隔),編寫程序時(shí),一行可以含若干句(以分號(hào)間隔),一句也可以寫若干行;一句也可以寫若干行;n在一句結(jié)束后,可以用在一句結(jié)
8、束后,可以用“-”符號(hào)后接說(shuō)明文字符號(hào)后接說(shuō)明文字,這些文字用于幫助理解程序,不會(huì)對(duì)編譯產(chǎn)生影這些文字用于幫助理解程序,不會(huì)對(duì)編譯產(chǎn)生影響;響;n單詞之間必須使用空格;并列信號(hào)間使用逗號(hào);單詞之間必須使用空格;并列信號(hào)間使用逗號(hào);n根據(jù)不同的層次關(guān)系最好設(shè)定不同的根據(jù)不同的層次關(guān)系最好設(shè)定不同的縮進(jìn)縮進(jìn)。122)類屬參數(shù)說(shuō)明格式類屬參數(shù)說(shuō)明格式:generic(類屬常量名:類型類屬常量名:類型 :=靜態(tài)表達(dá)式靜態(tài)表達(dá)式; 類屬常量名:類型類屬常量名:類型 :=靜態(tài)表達(dá)式靜態(tài)表達(dá)式););n要點(diǎn):要點(diǎn):1 generic 為關(guān)鍵字,靜態(tài)表達(dá)式為可選項(xiàng)為關(guān)鍵字,靜態(tài)表達(dá)式為可選項(xiàng)2 類屬說(shuō)明必須類
9、屬說(shuō)明必須在端口說(shuō)明之前在端口說(shuō)明之前,為設(shè)計(jì)實(shí)體和外,為設(shè)計(jì)實(shí)體和外部環(huán)境提供靜態(tài)數(shù)據(jù)傳輸通道。部環(huán)境提供靜態(tài)數(shù)據(jù)傳輸通道。3 示例:示例: generic(m: time :=1 ns); q=tmp after m;133)端口說(shuō)明格式端口說(shuō)明格式:n格式:格式: port (端口名端口名,端口名,端口名:方向:方向 數(shù)據(jù)類型名;數(shù)據(jù)類型名; 端口名端口名,端口名,端口名:方向:方向 數(shù)據(jù)類型名數(shù)據(jù)類型名);n端口說(shuō)明是對(duì)基本設(shè)計(jì)實(shí)體端口說(shuō)明是對(duì)基本設(shè)計(jì)實(shí)體(單元單元)與與外部接口外部接口的的描述,也可以說(shuō)是對(duì)描述,也可以說(shuō)是對(duì)外部引腳信號(hào)外部引腳信號(hào)的名稱,數(shù)據(jù)的名稱,數(shù)據(jù)類型和輸入、
10、輸出方向的描述。類型和輸入、輸出方向的描述。14端口說(shuō)明語(yǔ)法要點(diǎn)端口說(shuō)明語(yǔ)法要點(diǎn)(1)nport為關(guān)鍵字為關(guān)鍵字n端口名是賦予每個(gè)外部引腳的名稱端口名是賦予每個(gè)外部引腳的名稱 n命名規(guī)則:命名規(guī)則:英文字母和數(shù)字構(gòu)成,英文字母和數(shù)字構(gòu)成,字母開頭字母開頭;可在名稱中使用可在名稱中使用單個(gè)下劃線單個(gè)下劃線符號(hào)符號(hào)_;字母不分大小寫;字母不分大小寫;名稱應(yīng)具有意義,方便記憶;名稱應(yīng)具有意義,方便記憶;名稱不能重復(fù)使用;名稱不能重復(fù)使用;VHDL中的關(guān)鍵字保留字不能用做名稱。中的關(guān)鍵字保留字不能用做名稱。注:該命名規(guī)則適用于實(shí)體、端口、信號(hào)、變量、注:該命名規(guī)則適用于實(shí)體、端口、信號(hào)、變量、文件的命
11、名文件的命名15端口說(shuō)明語(yǔ)法要點(diǎn)端口說(shuō)明語(yǔ)法要點(diǎn)(2)n端口方向:定義外部引腳的端口方向:定義外部引腳的信號(hào)信號(hào)方向是輸入還是輸出方向是輸入還是輸出 。n常用端口方向:常用端口方向:n輸入端口輸入端口(in):僅允許信號(hào)從端口輸入到構(gòu)造體。:僅允許信號(hào)從端口輸入到構(gòu)造體。n輸出端口輸出端口(out):僅允許信號(hào)從構(gòu)造體內(nèi)經(jīng)端口輸出。輸:僅允許信號(hào)從構(gòu)造體內(nèi)經(jīng)端口輸出。輸出端口信號(hào)不能用于實(shí)體內(nèi)部信號(hào)的反饋。出端口信號(hào)不能用于實(shí)體內(nèi)部信號(hào)的反饋。 n緩沖端口緩沖端口(buffer):用于輸出及構(gòu)造體內(nèi)部反饋。:用于輸出及構(gòu)造體內(nèi)部反饋。n雙向端口雙向端口(inout):可作為:可作為inoutb
12、uffer使用。使用。16端口說(shuō)明語(yǔ)法要點(diǎn)端口說(shuō)明語(yǔ)法要點(diǎn)(3)n所有端口都必須規(guī)定其數(shù)據(jù)類型,所有端口都必須規(guī)定其數(shù)據(jù)類型,VHDL語(yǔ)語(yǔ)言中有言中有10種數(shù)據(jù)類型種數(shù)據(jù)類型,在,在數(shù)字電路設(shè)計(jì)數(shù)字電路設(shè)計(jì)中中最常用的類型為:最常用的類型為:bit和和bit_vector 。nBit:單個(gè)邏輯量單個(gè)邏輯量nBit_vector:邏輯數(shù)組、總線邏輯量邏輯數(shù)組、總線邏輯量n在在VHDL語(yǔ)言的標(biāo)準(zhǔn)庫(kù)語(yǔ)言的標(biāo)準(zhǔn)庫(kù)IEEE庫(kù)當(dāng)中的包集庫(kù)當(dāng)中的包集合合std_logic_1164提供的提供的std_logic和和std_logic_vector分別與分別與bit和和bit_vector對(duì)應(yīng),完全等效。只是
13、在使用時(shí)要聲明使對(duì)應(yīng),完全等效。只是在使用時(shí)要聲明使用了該包集合。下面給出一個(gè)例子用了該包集合。下面給出一個(gè)例子。17例2-1Entity mu isPort(d0,d1,sel : in bit; q : out bit; bus : out bit_vector(7 downto 0);End mu; 例2-2Library ieee;Use ieee.std_logic_1164.allEntity mu isPort(d0,d1,sel : in std_logic; q : out std_logic; bus : out std_logic _vector(7 downto 0);
14、End mu;實(shí)體說(shuō)明示例實(shí)體說(shuō)明示例18練習(xí)n編寫一個(gè)n選1數(shù)據(jù)選擇器的實(shí)體實(shí)體說(shuō)明,端口數(shù)據(jù)類型使用std_logic 和std_logic_vector。 library ieee; use ieee.std_logic_1164.all entity kmux_n is generic (n:integer :=4; m:integer :=2); port (d : in std_logic_vector (n-1 downto 0); a : in std_logic_vector (m-1 downto 0); s : in std_logic; y : out std_logi
15、c); end kmux_n;19練習(xí)Library ieee;Use ieee.std_logic_1164.all;Entity kdecoder38 is port(din:in std_logic_vector(2 downto 0); en: in std_logic; dout:out std_logic_vector(7 downto 0);End kdecoder38;為為3-8線譯碼器編寫實(shí)體說(shuō)明線譯碼器編寫實(shí)體說(shuō)明202、構(gòu)造體(結(jié)構(gòu)體)構(gòu)造體(結(jié)構(gòu)體)n具體指明基本設(shè)計(jì)單元的行為、元件及內(nèi)部的連接具體指明基本設(shè)計(jì)單元的行為、元件及內(nèi)部的連接關(guān)系,也就是說(shuō)它定義了設(shè)計(jì)單元關(guān)
16、系,也就是說(shuō)它定義了設(shè)計(jì)單元具體的功能具體的功能 。1)構(gòu)造體的基本格式:)構(gòu)造體的基本格式: architecture 構(gòu)造體名構(gòu)造體名 of 實(shí)體名實(shí)體名 is 定義語(yǔ)句定義語(yǔ)句;-內(nèi)部信號(hào),常數(shù),數(shù)據(jù)類型,函數(shù)等的定義內(nèi)部信號(hào),常數(shù),數(shù)據(jù)類型,函數(shù)等的定義 begin 并行處理語(yǔ)句并行處理語(yǔ)句;-構(gòu)造體中所有語(yǔ)句同時(shí)執(zhí)行,不以書寫構(gòu)造體中所有語(yǔ)句同時(shí)執(zhí)行,不以書寫 順序?yàn)閳?zhí)行順序。順序?yàn)閳?zhí)行順序。 end 構(gòu)造體名;構(gòu)造體名;212)構(gòu)造體的命名構(gòu)造體的命名n每個(gè)構(gòu)造體每個(gè)構(gòu)造體必須屬于必須屬于一個(gè)實(shí)體;一個(gè)實(shí)體;n每個(gè)構(gòu)造體必須有一個(gè)名稱:每個(gè)構(gòu)造體必須有一個(gè)名稱: 命名要符合命名規(guī)則
17、命名要符合命名規(guī)則 命名可根據(jù)設(shè)計(jì)者命名可根據(jù)設(shè)計(jì)者 采用何種描述方式采用何種描述方式 來(lái)描述來(lái)描述模塊的功能模塊的功能 來(lái)命名,給閱讀程序的人帶來(lái)方便。來(lái)命名,給閱讀程序的人帶來(lái)方便。 如:如: beh (行為描述,基本設(shè)計(jì)單元的數(shù)學(xué)模型描述行為描述,基本設(shè)計(jì)單元的數(shù)學(xué)模型描述) rtl(寄存器傳輸描述,數(shù)據(jù)流描述寄存器傳輸描述,數(shù)據(jù)流描述) str(結(jié)構(gòu)描述,邏輯元件的連接結(jié)構(gòu)描述,邏輯元件的連接)例:例: architecture str of mux2_1 is223)定義語(yǔ)句定義語(yǔ)句n位于位于is-begin 之間之間 :n type declarations; 類型說(shuō)明類型說(shuō)明n
18、signal declarations; 信號(hào)說(shuō)明信號(hào)說(shuō)明n constant declarations; 常量說(shuō)明常量說(shuō)明n component declarations; 元件說(shuō)明元件說(shuō)明n function definitions; 函數(shù)說(shuō)明函數(shù)說(shuō)明n procedure definitions; 過(guò)程說(shuō)明過(guò)程說(shuō)明 例:例:architecture beh of mux2_1 is signal nes1 : bit; -內(nèi)部連接信號(hào)無(wú)須說(shuō)明方向內(nèi)部連接信號(hào)無(wú)須說(shuō)明方向 begin end beh;234)并行處理語(yǔ)句并行處理語(yǔ)句例:例:entity mux is port(d0,d1,
19、sel: in bit; q: out bit);end mux;architecture dataflow of mux isbegin q=(d0 and sel) or (not sel and d1);end dataflow;nbegin-end 之間語(yǔ)句部分是各種之間語(yǔ)句部分是各種并行語(yǔ)句并行語(yǔ)句,具體地,具體地描述了構(gòu)造體的行為及其連接關(guān)系,各語(yǔ)句處于并列描述了構(gòu)造體的行為及其連接關(guān)系,各語(yǔ)句處于并列狀態(tài),執(zhí)行時(shí)不分先后次序狀態(tài),執(zhí)行時(shí)不分先后次序 :n信號(hào)賦值語(yǔ)句信號(hào)賦值語(yǔ)句 數(shù)據(jù)流描述數(shù)據(jù)流描述n元件例化語(yǔ)句元件例化語(yǔ)句 結(jié)構(gòu)描述結(jié)構(gòu)描述n進(jìn)程語(yǔ)句進(jìn)程語(yǔ)句 行為描述行為描述2
20、4二、二、VHDL語(yǔ)言構(gòu)造體的子結(jié)構(gòu)描述語(yǔ)言構(gòu)造體的子結(jié)構(gòu)描述n一個(gè)構(gòu)造體可以用幾個(gè)子結(jié)構(gòu)來(lái)構(gòu)成,即使用一個(gè)構(gòu)造體可以用幾個(gè)子結(jié)構(gòu)來(lái)構(gòu)成,即使用相對(duì)比較獨(dú)立的幾個(gè)模塊來(lái)構(gòu)成。相對(duì)比較獨(dú)立的幾個(gè)模塊來(lái)構(gòu)成。VHDL有以下有以下三種形式的子結(jié)構(gòu)描述語(yǔ)句:三種形式的子結(jié)構(gòu)描述語(yǔ)句:n block塊語(yǔ)句結(jié)構(gòu);塊語(yǔ)句結(jié)構(gòu);n process進(jìn)程語(yǔ)句結(jié)構(gòu);進(jìn)程語(yǔ)句結(jié)構(gòu);n subprograms子程序結(jié)構(gòu)子程序結(jié)構(gòu)procedure過(guò)程過(guò)程Function函數(shù)函數(shù) 251、block塊語(yǔ)句結(jié)構(gòu)描述塊語(yǔ)句結(jié)構(gòu)描述architecture connect of mux issignal tmp1,tmp2,t
21、mp3: bit;begin cale:block begin tmp1=d0 and sel; tmp2 =d1 and (not sel); tmp3 =tmp1 or tmp2; q=tmp3; end block cale;end connect;1)格式:格式:塊結(jié)構(gòu)名:塊結(jié)構(gòu)名:block并發(fā)語(yǔ)句并發(fā)語(yǔ)句;end block 塊結(jié)構(gòu)名塊結(jié)構(gòu)名;entity mux isport(d0,d1,sel: in bit; q: out bit);end mux;262)block塊和子原理圖的關(guān)系塊和子原理圖的關(guān)系273)block中語(yǔ)句的并發(fā)性中語(yǔ)句的并發(fā)性 begin到到end bl
22、ock cale 之間的語(yǔ)句為并發(fā)語(yǔ)句。之間的語(yǔ)句為并發(fā)語(yǔ)句。4)衛(wèi)式衛(wèi)式block (guarded block) 格式:格式:block 衛(wèi)式布爾表達(dá)式衛(wèi)式布爾表達(dá)式 entity latch is port(d,clk : in bit; q,qb: out bit);end latch; architecture latch_guard of latch is begin g1: block (clk=1) begin q= guarded d after 5 ns; qb= guarded not(d) after 7 ns; end block g1; end latch_guar
23、d;衛(wèi)式塊不能進(jìn)行邏輯綜合衛(wèi)式塊不能進(jìn)行邏輯綜合282、process進(jìn)程語(yǔ)句結(jié)構(gòu)描述進(jìn)程語(yǔ)句結(jié)構(gòu)描述1)格式:)格式: 進(jìn)程名進(jìn)程名: process (敏感量列表敏感量列表) 聲明部分聲明部分; begin 順序語(yǔ)句順序語(yǔ)句; end process ;architecture connect of mux isbegin cale:process(d0,d1,sel)variable tmp1,tmp2,tmp3: bit; begin tmp1 :=d0 and sel; tmp2 :=d1 and (not sel); tmp3 :=tmp1 or tmp2; q=tmp3; end
24、 process;end connect;entity mux isport ( d0,d1,sel: in bit; q: out bit);end mux;292)進(jìn)程中語(yǔ)句的順序性)進(jìn)程中語(yǔ)句的順序性 process結(jié)構(gòu)中的語(yǔ)句是按順序一條一條向結(jié)構(gòu)中的語(yǔ)句是按順序一條一條向下執(zhí)行的,與下執(zhí)行的,與C語(yǔ)言的執(zhí)行一樣。語(yǔ)言的執(zhí)行一樣。3)進(jìn)程的啟動(dòng))進(jìn)程的啟動(dòng) 敏感量敏感量列表中列表中任意任意一個(gè)一個(gè)信號(hào)信號(hào)發(fā)生變化就可以發(fā)生變化就可以啟動(dòng)這個(gè)進(jìn)程的執(zhí)行啟動(dòng)這個(gè)進(jìn)程的執(zhí)行30abselcCLRNENADQdclkclrqsensitivity list includes all input
25、s used in the combinatorial logic sensitivity list does not include the d input, only the clock or/and control signals Sequential Process Sensitive to Specific Inputs (i.e. Clock and/or Control Signals) Example PROCESS(clr, clk) Combinatorial Process Sensitive to All Inputs Example PROCESS(a, b, sel
26、)Types of Processes31例:具有兩個(gè)進(jìn)程的構(gòu)造體例:具有兩個(gè)進(jìn)程的構(gòu)造體nENTITY pros_com ISENTITY pros_com ISn PORT(event_a PORT(event_a:IN BIT)IN BIT);nEND pros_comEND pros_com;nARCHITECTURE catch_ball OF pros_com ISARCHITECTURE catch_ball OF pros_com ISn SIGNAL to_a SIGNAL to_a, to_b: BITto_b: BIT:=0=0;n BEGINBEGIN4)進(jìn)程的同步描述
27、)進(jìn)程的同步描述 構(gòu)造體中的多個(gè)進(jìn)程可以進(jìn)行通信、并行構(gòu)造體中的多個(gè)進(jìn)程可以進(jìn)行通信、并行同步執(zhí)行。同步執(zhí)行。32n a a:n PROCESS (event_aPROCESS (event_a,to_a)to_a)n BEGIN BEGIN n IF (event_aEVENT AND event_a IF (event_aEVENT AND event_a =1)=1)n OR ORn (to_aEVENT AND to_a=1) (to_aEVENT AND to_a=1)n THEN to_b=1 AFTER 20 ns, THEN to_b=1 AFTER 20 ns, n 0 AF
28、TER 30 ns 0 AFTER 30 ns;n END IFEND IF;n END PROCESSEND PROCESS;33 b b: PROCESS (to_b)PROCESS (to_b)BEGINBEGINn IF (to_b EVENT AND to_b=1) IF (to_b EVENT AND to_b=1) THENTHENn to_a =1 AFTER 10 ns, to_a =1 AFTER 10 ns,n 0 AFTER 20 ns 0 AFTER 20 ns;n END IFEND IF;nEND PROCESSEND PROCESS;END catch_ball
29、END catch_ball;34兩個(gè)進(jìn)程兩個(gè)進(jìn)程a,ba,b35在上面的程序中在上面的程序中n一個(gè)結(jié)構(gòu)體中有兩個(gè)進(jìn)程一個(gè)結(jié)構(gòu)體中有兩個(gè)進(jìn)程a a和和b bn當(dāng)當(dāng)a a進(jìn)程處理結(jié)束或者有一個(gè)進(jìn)程處理結(jié)束或者有一個(gè)B B進(jìn)程啟動(dòng)所需要的(信進(jìn)程啟動(dòng)所需要的(信號(hào)變化)數(shù)據(jù)號(hào)變化)數(shù)據(jù)n就使信號(hào)量就使信號(hào)量to_b=“1” to_b=“1” nto_bto_b是進(jìn)程是進(jìn)程B B的輸入信號(hào)的輸入信號(hào)n當(dāng)進(jìn)程當(dāng)進(jìn)程B B敏感到敏感到to_bto_b有變化有變化n且且to_b=“1”to_b=“1”時(shí),則進(jìn)程時(shí),則進(jìn)程B B就被啟動(dòng)就被啟動(dòng)n同樣,進(jìn)程同樣,進(jìn)程B B處理結(jié)束或當(dāng)進(jìn)程處理結(jié)束或當(dāng)進(jìn)程A
30、A敏感到敏感到to_ato_a有變化且有變化且to_a=“1”to_a=“1”n則進(jìn)程則進(jìn)程A A就啟動(dòng)就啟動(dòng)n如此反復(fù)循環(huán),使兩個(gè)進(jìn)程能并發(fā)地同步工作如此反復(fù)循環(huán),使兩個(gè)進(jìn)程能并發(fā)地同步工作36Subprogram語(yǔ)句結(jié)構(gòu)描述n子程序就是在主程序調(diào)用它以后能子程序就是在主程序調(diào)用它以后能將處理結(jié)果返將處理結(jié)果返回主程序回主程序的程序模塊,其含義和其它高級(jí)語(yǔ)言中的程序模塊,其含義和其它高級(jí)語(yǔ)言中的子程序概念相當(dāng)。它可以的子程序概念相當(dāng)。它可以反復(fù)調(diào)用反復(fù)調(diào)用,使用非常,使用非常方便。子程序在調(diào)用時(shí)首先要進(jìn)行初始化,執(zhí)行方便。子程序在調(diào)用時(shí)首先要進(jìn)行初始化,執(zhí)行結(jié)束后子程序就終止。再調(diào)用時(shí)要再進(jìn)
31、行初始化。結(jié)束后子程序就終止。再調(diào)用時(shí)要再進(jìn)行初始化。因此因此子程序內(nèi)部的值不能保持子程序內(nèi)部的值不能保持,子程序返回以后,子程序返回以后才能被再調(diào)用,它是個(gè)才能被再調(diào)用,它是個(gè)非重入非重入的程序。的程序。n子程序的兩種類型:過(guò)程子程序的兩種類型:過(guò)程(procedure) 函數(shù)函數(shù)(function)37過(guò)程語(yǔ)句n格式:Procedure 過(guò)程名( 參量1:方向 類型; ; 參量n:方向 類型)is 定義語(yǔ)句;begin順序語(yǔ)句;end 過(guò)程名; nprocedure的調(diào)用格式 過(guò)程名(信號(hào)列表);38procedure結(jié)構(gòu)要點(diǎn) 1 過(guò)程依靠參量與主程序交換信息,參量說(shuō)明緊跟在過(guò)程名后面的括
32、號(hào)中;可視為多輸入/多輸出電路模塊。2 參量模式為 in 輸入 作為常量 out 輸出 作為變量或信號(hào) inout 輸入輸出 作為變量或信號(hào) 若要作為信號(hào),則應(yīng)在參量名前加注signal 3 在主程序中,函數(shù)調(diào)用通常在表達(dá)式中,過(guò)程調(diào)用通常在語(yǔ)句中;調(diào)用結(jié)束時(shí),輸出量將賦值給調(diào)用時(shí)指定的信號(hào)或變量; 4 過(guò)程內(nèi)部可以定義局部使用的類型、常量、變量、函數(shù)、過(guò)程,不能定義信號(hào);5 過(guò)程可以進(jìn)行并行調(diào)用,也可以進(jìn)行順序調(diào)用;并行過(guò)程的參量應(yīng)該為信號(hào)量;順序過(guò)程的參量為變量,可以利用順序賦值語(yǔ)句將輸出結(jié)果傳遞給信號(hào)量;39過(guò)程語(yǔ)句及其調(diào)用示例library ieee;use ieee.std_logi
33、c_1164.all;entity butnot1 is port (x,y: in std_logic; z: out std_logic);end butnot1;architecture str of butnot1 isprocedure kinv1(a: in std_logic; f: out std_logic) is begin f := not a; end kinv1;procedure kand21(a,b: in std_logic; f: out std_logic) is begin f:= a and b; end kand21;beginprocess(x,y)
34、variable z1,temp:std_logic;begin kinv1(y,temp); kand21 (x,temp,z1); z=z1;end process;end str;yxz40函數(shù)語(yǔ)句函數(shù)語(yǔ)句n格式:格式:function function-name ( signal-list) return return-type is declarations and definitions;beginsequential-statement;sequential-statement;return variable_name;end function-name;41function結(jié)構(gòu)
35、要點(diǎn)結(jié)構(gòu)要點(diǎn) 1 函數(shù)可以看作是一種函數(shù)可以看作是一種多輸入多輸入/單輸出單輸出的電路模塊;的電路模塊; 2 函數(shù)信號(hào)表中帶有若干形式參量,在調(diào)用時(shí)由實(shí)際信函數(shù)信號(hào)表中帶有若干形式參量,在調(diào)用時(shí)由實(shí)際信號(hào)取代,實(shí)現(xiàn)主程序向函數(shù)的輸入;在函數(shù)內(nèi)部,信號(hào)取代,實(shí)現(xiàn)主程序向函數(shù)的輸入;在函數(shù)內(nèi)部,信號(hào)被作為常量對(duì)待;號(hào)被作為常量對(duì)待;3 函數(shù)應(yīng)用時(shí),為了返回函數(shù)值,可在函數(shù)體中函數(shù)應(yīng)用時(shí),為了返回函數(shù)值,可在函數(shù)體中設(shè)置變?cè)O(shè)置變量量,在函數(shù)執(zhí)行過(guò)程中為該變量賦值;然后用,在函數(shù)執(zhí)行過(guò)程中為該變量賦值;然后用return語(yǔ)句將該變量返回(賦值給函數(shù)名);該變量應(yīng)與規(guī)語(yǔ)句將該變量返回(賦值給函數(shù)名);該
36、變量應(yīng)與規(guī)定的返回類型一致;在一次調(diào)用中,只有一個(gè)返回語(yǔ)定的返回類型一致;在一次調(diào)用中,只有一個(gè)返回語(yǔ)句帶回函數(shù)值;句帶回函數(shù)值;4 函數(shù)內(nèi)部可以定義局部使用的類型、常量、變量、函函數(shù)內(nèi)部可以定義局部使用的類型、常量、變量、函數(shù)、過(guò)程;數(shù)、過(guò)程;但不能定義信號(hào)但不能定義信號(hào);5 函數(shù)的可執(zhí)行部分由順序語(yǔ)句構(gòu)成;函數(shù)的可執(zhí)行部分由順序語(yǔ)句構(gòu)成;不包含信號(hào)賦值不包含信號(hào)賦值語(yǔ)句語(yǔ)句;6 函數(shù)通常在賦值語(yǔ)句的表達(dá)式中調(diào)用,函數(shù)返回類型函數(shù)通常在賦值語(yǔ)句的表達(dá)式中調(diào)用,函數(shù)返回類型應(yīng)與該表達(dá)式類型一致;應(yīng)與該表達(dá)式類型一致; 42函數(shù)語(yǔ)句及其調(diào)用示例library ieee;use ieee.std_
37、logic_1164.all;entity kdec38 is port (x,y,z: in std_logic; f: out std_logic_vector (7 downto 0);end kdec38;architecture d of kdec38 is function kand3 (a,b,c:std_logic) return std_logic is variable result: std_logic; begin result:= a and b and c; return result; end kand3;begin f(0)=kand3(not x,not y,
38、not z); f(1)=kand3(not x,not y, z); f(2)=kand3(not x, y,not z); f(3)=kand3(not x, y, z); f(4)=kand3( x,not y,not z); f(5)=kand3( x,not y, z); f(6)=kand3( x, y,not z); f(7) null; when 1|H = result := result+1; when others = null; end case; end loop; return result;end conv_integer;end upac;調(diào)用該用戶自定義包集合
39、的格式:Use work.upac.cpu_bus;51配置 configurationn在一個(gè)實(shí)體內(nèi)可以編寫多種不同的構(gòu)造體,通過(guò)配置語(yǔ)句來(lái)進(jìn)行選擇;便于在仿真時(shí)進(jìn)行性能對(duì)比試驗(yàn),得到性能最佳的構(gòu)造體。 n配置語(yǔ)句格式: configuration 配置名配置名 of 實(shí)體名實(shí)體名 is for 選擇的構(gòu)造體名選擇的構(gòu)造體名 end for; end 配置名;配置名;52library std;use std.std_logic.all;entity counter is port(load,clear,clk: in t_wlogic; data_in: in integer; data_
40、out: out integer);end counter;architecture count_255 of counter isbegin process (clk)variable count: integer:=0; begin if clear=1 then count:=0; elsif load=1 then count:=data_in; elsif (clkevent) and (clk=1 ) and (clklast_value=0) then if count=255 then count:=0; else count:=count+1; end if; data_ou
41、t=count; end process;end count_255;28=256例2-14 兩種形式計(jì)數(shù)器的配置?53architecture count_64k of counter isbegin process (clk) variable count: integer:=0; begin if clear=1 then count:=0; elsif load=1 then count:=data_in; elsif (clkevent) and (clk=1 ) and (clklast_value=0) then if count=65535 then count:=0; els
42、e count:=count+1; end if; data_out=count; end process;end count_64k;216=6553654configuration small_count of counter is for count_225 end for;end small_count;configuration big_count of counter is for count_64k end for;end big_count;55例例2-15 2-15 反相器和三輸入與門電路描述反相器和三輸入與門電路描述 LIBRARY STD; USE STD.STD_LOGIC.ALL; USE STD.STD_TTL.ALL; ENTITY inv IS PORT (a:IN T_WLOGIC;b:OUT T_WLOGIC); END inv; ARCHITECTURE behave OF inv IS BEGIN B = NOT(a) AFTER 5 ns; END behave; CONFIGURATION invcon
溫馨提示
- 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é)生國(guó)防教育合作協(xié)議
- XX廣告噴繪制作合同5篇
- 醫(yī)療居間服務(wù)合同范本
- 華為配件采購(gòu)合同范本
- 個(gè)人辭職申請(qǐng)報(bào)告
- 個(gè)人車位轉(zhuǎn)讓合同
- 護(hù)理學(xué)試題(含答案)
- 醫(yī)療房屋租賃合同范本
- 保健按摩師初級(jí)題庫(kù)+參考答案
- 公司美甲店入股合同范本
- 外研版小學(xué)英語(yǔ)五年級(jí)下冊(cè)課文翻譯
- 口語(yǔ)教程4整套課件完整版教學(xué)教程最全電子講義教案
- 高壓氧艙課件
- 加德納多元智能測(cè)評(píng)量表【復(fù)制】
- 譯林英語(yǔ)四年級(jí)下冊(cè)4B各單元教學(xué)反思
- QC成果提高大跨度多節(jié)點(diǎn)曲面鋼桁架一次安裝合格率
- 國(guó)家電網(wǎng)有限公司十八項(xiàng)電網(wǎng)重大反事故措施(修訂版)
- 環(huán)氧乙烷固定床反應(yīng)器課程設(shè)計(jì)
- 班、團(tuán)、隊(duì)一體化建設(shè)實(shí)施方案
- 如何建構(gòu)結(jié)構(gòu)性思維 課后測(cè)試
- 施工方案(行車拆除)
評(píng)論
0/150
提交評(píng)論