vhdl基本語素、語法、語句(楊)_第1頁
vhdl基本語素、語法、語句(楊)_第2頁
vhdl基本語素、語法、語句(楊)_第3頁
vhdl基本語素、語法、語句(楊)_第4頁
vhdl基本語素、語法、語句(楊)_第5頁
已閱讀5頁,還剩106頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、一、一、基于基于vhdl的組合邏輯分析的組合邏輯分析數(shù)字電路與邏輯設(shè)計(jì)數(shù)字電路與邏輯設(shè)計(jì)5-3-3 基于基于vhdl的組合邏輯設(shè)計(jì)的組合邏輯設(shè)計(jì)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity sswr isport(d:in std_logic_vector(3 downto 0); y:out std_logic);end sswr;實(shí)例實(shí)例1 某數(shù)字電路的某數(shù)字電路的vhdl程序代程序代碼如下,請分析其邏輯功能碼如下,請分

2、析其邏輯功能architecture behave of sswr isbegin y =0 and d=5 and d10 else z;end behave;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fbi isport(a,b,ci:in std_logic; y,cout:out std_logic);end fbi ;實(shí)例實(shí)例2 某數(shù)字電路的某數(shù)字電路的vhdl程序代程序代碼如下,請分析其邏輯功能碼如下,請分析

3、其邏輯功能architecture bh2 of fbi isbegin y = a xor b xor ci; cout = (a and b) or (a and ci) or (b and ci);end bh2;architecture bh1 of full_bit_adder isbegin y = (not a)and (not b)and ci) or (not a)and (b) and (not ci) or (a)and (not b)and(not ci) or (a) and (b)and(ci); cout = (b and ci) or (a and ci) or

4、 (a and b);end bh1;architecture bh2 of full_bit_adder isbegin y = a xor b xor ci; cout = (a and b) or (a and ci) or (b and ci);end bh2;configuration con1 of full_bit_adder isfor bh2end for;end con1;二、二、vhdl硬件描述語言基礎(chǔ)硬件描述語言基礎(chǔ)數(shù)字電路與邏輯設(shè)計(jì)數(shù)字電路與邏輯設(shè)計(jì)5-3-3 基于基于vhdl的組合邏輯設(shè)計(jì)的組合邏輯設(shè)計(jì)vhdl硬件描述語言硬件描述語言nvhdl概述概述nvhdl數(shù)據(jù)

5、類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象nvhdl命令語句命令語句一、一、vhdlvhdl概述概述 vhdl是超高速集成電路硬件描述語言是超高速集成電路硬件描述語言 ( (very high speed integrated circuit hardware description language)的英文縮寫。的英文縮寫。 語法和風(fēng)格語法和風(fēng)格:(1 1)類似與現(xiàn)代高級編程語言,如)類似與現(xiàn)代高級編程語言,如c語言。語言。(2)vhdl描述的是硬件,它包含許多硬件特描述的是硬件,它包含許多硬件特有的結(jié)構(gòu)。有的結(jié)構(gòu)。硬件描述語言硬件描述語言hdl:美國:美國iverson, 1962vhdl硬件描述語

6、言硬件描述語言: 20世紀(jì)世紀(jì)80年代初年代初, 美國國防部美國國防部vhsic計(jì)劃計(jì)劃目的目的:方便電子設(shè)計(jì)文檔的交流和成果的再利用方便電子設(shè)計(jì)文檔的交流和成果的再利用一、一、vhdl概述概述u vhdl發(fā)展歷史發(fā)展歷史 1983年提出了硬件描述語言的標(biāo)準(zhǔn)化問題。年提出了硬件描述語言的標(biāo)準(zhǔn)化問題。 1985年,第年,第1版版vhdl完成;完成; 1987年,國際電氣與電子工程師協(xié)會(年,國際電氣與電子工程師協(xié)會(ieee)將)將vhdl語言語言作為硬件描述語言的工業(yè)標(biāo)準(zhǔn)(作為硬件描述語言的工業(yè)標(biāo)準(zhǔn)(ieee1076);); 1988年,美國國防部規(guī)定所有官方的年,美國國防部規(guī)定所有官方的as

7、ic設(shè)計(jì)都必須以設(shè)計(jì)都必須以vhdl作為設(shè)計(jì)描述語言,此后作為設(shè)計(jì)描述語言,此后vhdl逐漸成為工業(yè)界標(biāo)準(zhǔn)。逐漸成為工業(yè)界標(biāo)準(zhǔn)。 1993年,年,ieee在在87版本的基礎(chǔ)上進(jìn)行了若干修訂,增修為版本的基礎(chǔ)上進(jìn)行了若干修訂,增修為ieee1164標(biāo)準(zhǔn);標(biāo)準(zhǔn); 1999年,年,ieee又將數(shù)字模擬混合又將數(shù)字模擬混合vhdl的版本作為工業(yè)標(biāo)準(zhǔn),的版本作為工業(yè)標(biāo)準(zhǔn),即即ieee1076.3;一、一、vhdl概述概述u vhdl與電路圖設(shè)計(jì)電路的方式不同:與電路圖設(shè)計(jì)電路的方式不同:和電路圖設(shè)計(jì)方式相比:和電路圖設(shè)計(jì)方式相比:(1)易于修改;)易于修改;(2)設(shè)計(jì)能力更強(qiáng);)設(shè)計(jì)能力更強(qiáng);(3)vh

8、dl語言很方便:獨(dú)立于器件設(shè)計(jì);語言很方便:獨(dú)立于器件設(shè)計(jì);相同的程序代碼可以用于不同廠家生產(chǎn)的相同的程序代碼可以用于不同廠家生產(chǎn)的器件。器件。 一、一、vhdl概述概述u vhdl語言的程序結(jié)構(gòu)語言的程序結(jié)構(gòu) library(use)- 庫庫 package - 程序包集合程序包集合 entity - 實(shí)體實(shí)體 architecture - 結(jié)構(gòu)體結(jié)構(gòu)體 configuration - 配置語句配置語句一、一、vhdl概述概述一、一、vhdl概述概述include “stdio.h”; include “math.h”;int main(void) int a,b,c; a=8; b=9;

9、c=a+b; return c; library std; use std.standard.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程序程序 library(庫)是用于存放預(yù)先編譯好的(庫)是用于存放預(yù)先編譯好的package(程(程序包)。序包)。package (程序包)中定義了基本的常數(shù),數(shù)據(jù)類型,(程序包)中定義了基本的常數(shù),數(shù)據(jù)類型,元件及子程序等。元件及子程序等。 作用:聲明在

10、實(shí)體和結(jié)構(gòu)體定義中將用到的作用:聲明在實(shí)體和結(jié)構(gòu)體定義中將用到的 數(shù)據(jù)類型、元件或子程序等。數(shù)據(jù)類型、元件或子程序等。聲明格式:聲明格式: library 庫名庫名; use 庫名庫名. package名名.all;一、一、vhdl概述概述(1)library和和package部部分分 作用:作用: entity(實(shí)體)用于定義電路的(實(shí)體)用于定義電路的外觀,即外觀,即i/o端口的類型和數(shù)量。端口的類型和數(shù)量。 定義格式:定義格式:entity 實(shí)體名實(shí)體名 is port( a : in bit; b : in bit; c : out bit);end 實(shí)體名實(shí)體名; ;(2)entit

11、y定義區(qū)定義區(qū)一、一、vhdl概述概述端口名端口名數(shù)據(jù)類型數(shù)據(jù)類型端口模式端口模式端口模式(端口模式(mode)有以下幾種類型)有以下幾種類型: in ;out;inout ;buffer 端口模式可用下圖說明:(黑框代表一個設(shè)計(jì)或模塊)端口模式可用下圖說明:(黑框代表一個設(shè)計(jì)或模塊) in out buffer inout一、一、vhdl概述概述(3)architecture定義區(qū)定義區(qū)實(shí)體的實(shí)現(xiàn)。即說明電路執(zhí)行什么動作或?qū)崿F(xiàn)功能。實(shí)體的實(shí)現(xiàn)。即說明電路執(zhí)行什么動作或?qū)崿F(xiàn)功能。定義格式:定義格式: architecture 結(jié)構(gòu)體名結(jié)構(gòu)體名 of 實(shí)體名實(shí)體名 is 聲明語句;聲明語句;(內(nèi)

12、部信號、變量、常數(shù),元件,子程序聲明內(nèi)部信號、變量、常數(shù),元件,子程序聲明) begin并行描述語句;并行描述語句;end 結(jié)構(gòu)體名;結(jié)構(gòu)體名;一、一、vhdl概述概述(4)configuration部分部分 一個完整一個完整vhdl電路設(shè)計(jì)必須有電路設(shè)計(jì)必須有一個實(shí)體一個實(shí)體和和對應(yīng)的對應(yīng)的結(jié)構(gòu)體結(jié)構(gòu)體,即,即實(shí)體和結(jié)構(gòu)體對實(shí)體和結(jié)構(gòu)體對構(gòu)成一個完整的構(gòu)成一個完整的vhdl設(shè)計(jì)。設(shè)計(jì)。 一個實(shí)體可對應(yīng)一個結(jié)構(gòu)體或多個結(jié)構(gòu)體一個實(shí)體可對應(yīng)一個結(jié)構(gòu)體或多個結(jié)構(gòu)體,即,即一個實(shí)體可以有不同的描述方式。一個實(shí)體可以有不同的描述方式。 作用:作用:當(dāng)實(shí)體有多個結(jié)構(gòu)體時,系統(tǒng)默認(rèn)實(shí)體選用當(dāng)實(shí)體有多個結(jié)構(gòu)

13、體時,系統(tǒng)默認(rèn)實(shí)體選用最后一個結(jié)構(gòu)體,利用最后一個結(jié)構(gòu)體,利用configuration語句可語句可以任意選擇采用哪一個結(jié)構(gòu)體。以任意選擇采用哪一個結(jié)構(gòu)體。一、一、vhdl概述概述定義格式:定義格式:configuration 配置名配置名 of 實(shí)體名實(shí)體名 isfor 選用的結(jié)構(gòu)體名選用的結(jié)構(gòu)體名end for;end configuration 配置名配置名 ;一、一、vhdl概述概述u 標(biāo)識符的定義原則:標(biāo)識符的定義原則:(1)標(biāo)識符由字母、數(shù)字和下劃線組成,)標(biāo)識符由字母、數(shù)字和下劃線組成,a7_;(2)標(biāo)識符不區(qū)分大小寫,)標(biāo)識符不區(qū)分大小寫,ab和和ab是一樣是一樣的;的;(3)

14、第一個字符必須是字母,即)第一個字符必須是字母,即a666;(4)不允許有兩個連續(xù)的下劃線,)不允許有兩個連續(xù)的下劃線,a_b錯錯誤;誤;(5)末尾不能是下劃線,)末尾不能是下劃線,mname_錯誤;錯誤;(6)標(biāo)識符不能和關(guān)鍵字相同)標(biāo)識符不能和關(guān)鍵字相同,如如entity,is等。等。一、一、vhdl概述概述u 設(shè)計(jì)范例:設(shè)計(jì)范例:2輸入與門輸入與門abc電路真值表電路真值表abc000100010111一、一、vhdl概述概述library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std

15、_logic_unsigned.all;entity and2 is port( a : in bit; b : in bit; c : out bit);end and2;-實(shí)體定義結(jié)束。實(shí)體定義結(jié)束。 雙減號雙減號-為為vhdl程序的程序的注釋符,類似注釋符,類似c語言中的語言中的/注釋符。注釋符。一、一、vhdl概述概述architecture na of and2 is begin c =0 when a=0 and b = 0 else 0 when a=1 and b = 0 else 0 when a=0 and b = 1 else 1; - 符號符號=為信號直接賦值符。為信號

16、直接賦值符。 end na; - 結(jié)構(gòu)體結(jié)構(gòu)體na architecture nb of and2 is begin c = a and b; - and 為邏輯與操作為邏輯與操作end nb; -結(jié)構(gòu)體結(jié)構(gòu)體nb一、一、vhdl概述概述configuration s1 of and2 isfor naend for;end configuration s1;-結(jié)構(gòu)體配置結(jié)束。結(jié)構(gòu)體配置結(jié)束。一、一、vhdl概述概述二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象在在vhdl程序中,我們經(jīng)常會遇到這樣的語句:程序中,我們經(jīng)常會遇到這樣的語句:port( x: in std_logic);s

17、ignal a : std_logic;variable b : std_logic_vector(7 downto 0); constant c : integer;數(shù)據(jù)對象類型數(shù)據(jù)對象類型數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)對象名數(shù)據(jù)對象名u vhdl語言中的基本數(shù)據(jù)類型語言中的基本數(shù)據(jù)類型邏輯類型邏輯類型數(shù)值類型數(shù)值類型布爾代數(shù)布爾代數(shù)(boolean)位位 (bit)標(biāo)準(zhǔn)邏輯標(biāo)準(zhǔn)邏輯 (std_logic)整數(shù)整數(shù) (integer)實(shí)數(shù)實(shí)數(shù) (real)二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象n 邏輯數(shù)據(jù)邏輯數(shù)據(jù)類型類型 (1)布爾代數(shù)()布爾代數(shù)(boolean)型)型 ; 標(biāo)識關(guān)鍵字

18、:標(biāo)識關(guān)鍵字:boolean, 取值空間:取值空間:false, true ; (2)位()位(bit);); 標(biāo)識關(guān)鍵字:標(biāo)識關(guān)鍵字:bit ,取值空間:取值空間: 0, 1 示例示例: port( a:in bit); signal b: bit;二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象標(biāo)識關(guān)鍵字:標(biāo)識關(guān)鍵字: std_logic;取值空間:取值空間: x , -forcing unknown 0 , -forcing 0 1 , -forcing 1 z , -hign impedance w, -weak unknown l , -weak 0 h , -weak 1 u,

19、 -undefined -, -dont care;二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象 標(biāo)準(zhǔn)邏輯類型(9值邏輯)對數(shù)字邏輯電路的邏輯特性描述更加完整,真實(shí),因此在vhdl程序中,對邏輯信號的定義通常采用標(biāo)準(zhǔn)邏輯類型(3)標(biāo)準(zhǔn)邏輯()標(biāo)準(zhǔn)邏輯(std_logic););l 邏輯序列邏輯序列位序列位序列 (bit_vector)標(biāo)準(zhǔn)邏輯序列標(biāo)準(zhǔn)邏輯序列 (std_logic_vector)二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象port( a : in std_logic_vector( 7 downto 0) );port( b : in bit_vector (

20、0 to 3) );signal c: std_logic_vector( 3 downto 0);序列范圍的聲明方式:序列范圍的聲明方式:to, downtol 序列的聲明序列的聲明二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象多位寬度的邏輯變量多位寬度的邏輯變量用序列表示。用序列表示。序列的含義:聲明一個多位寬度的邏輯變量,序列的含義:聲明一個多位寬度的邏輯變量,邏輯變量的最高位與聲明時的最左序號對應(yīng),邏輯變量的最高位與聲明時的最左序號對應(yīng),以此類推,定義并命名一個多位邏輯變量。以此類推,定義并命名一個多位邏輯變量。l 序列的分解與合成序列的分解與合成port(a: in std_l

21、ogic_vector( 3 downto 0); b: in std_logic_vector( 1 downto 0);signal c: std_logic_vector( 0 to 1);signal d: std_logic_vector( 0 to 3);將將a邏輯變量的中間兩路信號與邏輯變量的中間兩路信號與c相連相連c= a( 2 downto 1);將將a的最高一路、的最高一路、b的全部位和常量的全部位和常量1與與d相連相連d= a(3) & b & 1;二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象序列賦值原則:左右寬度相等。序列賦值原則:左右寬度相等。

22、n 數(shù)值類型數(shù)值類型(1)整數(shù))整數(shù) 聲明標(biāo)識字:聲明標(biāo)識字:integer,取值空間:,取值空間:-231 231-1示例示例port( a:in integer);port( c:in integer range 0 to 7);(限定整數(shù)取值范圍的方法)(限定整數(shù)取值范圍的方法)signal b: integer;二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象l 無符號數(shù)無符號數(shù) unsigned與標(biāo)準(zhǔn)邏輯序列相似,聲明時必須指明其與標(biāo)準(zhǔn)邏輯序列相似,聲明時必須指明其位數(shù)。位數(shù)。port (a : in unsigned( 7 downto 0);signal b : unsign

23、ed( 3 downto 0);注意注意: 必須使用必須使用downto形式。形式。port (a : in std_logic_vector( 7 downto 0);unsigned 與與std_logic_vector 的聯(lián)系與區(qū)別的聯(lián)系與區(qū)別二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(2)實(shí)數(shù))實(shí)數(shù)type real is range -1.7e38 to 1.7e38; 實(shí)數(shù)類型的表示可用科學(xué)計(jì)數(shù)形式或者帶實(shí)數(shù)類型的表示可用科學(xué)計(jì)數(shù)形式或者帶小數(shù)點(diǎn)的形式。小數(shù)點(diǎn)的形式。二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象l vhdl中的運(yùn)算符中的運(yùn)算符二、二、vhdl數(shù)據(jù)類

24、型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象 算術(shù)運(yùn)算符:算術(shù)運(yùn)算符: +加加-減減*乘乘/除除*乘方乘方mod 求模求模 rem 求余求余 abs求絕對值求絕對值 邏輯運(yùn)算:邏輯運(yùn)算: and 邏輯與邏輯與or邏輯或邏輯或nand與非與非nor 或非或非xor 異或異或xnor同或同或not 邏輯非邏輯非關(guān)系運(yùn)算符:關(guān)系運(yùn)算符: = 等于等于/= 不等于不等于小于小于大于大于= 大于或等于大于或等于注:其中注:其中=操作符也操作符也用于表示信號的賦值用于表示信號的賦值操作。操作。 &連接符連接符,將兩個數(shù)將兩個數(shù)據(jù)對象或矢量連接成維據(jù)對象或矢量連接成維數(shù)更大的矢量,它可給數(shù)更大的矢量,它可給代碼書

25、寫帶來方便。代碼書寫帶來方便。 例如:例如: vabc=a & b & c;如果如果a=1 , b=0 , c=1 ,則則 vabc=“101” 。二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象u 用戶自定義數(shù)據(jù)類型:用戶自定義數(shù)據(jù)類型:(1) 列舉數(shù)據(jù)類型列舉數(shù)據(jù)類型type 列舉名稱列舉名稱 is (元素元素1,元素,元素2,)例子:例子:type state is(s0,s1,s2,s3);signal s: state;二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(2) 數(shù)組類型數(shù)組類型type 數(shù)組名稱數(shù)組名稱 is arrary(范圍范圍) of 數(shù)據(jù)

26、類型;數(shù)據(jù)類型;例子:例子: type byte is arrary(7 downto 0) of bit; signal sdo: byte;二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象u 數(shù)據(jù)類型的轉(zhuǎn)換數(shù)據(jù)類型的轉(zhuǎn)換 在在vhdl語言里,語言里,不同類型的數(shù)據(jù)信號之間不同類型的數(shù)據(jù)信號之間不能互相賦值不能互相賦值。當(dāng)需要不同類型數(shù)據(jù)之間。當(dāng)需要不同類型數(shù)據(jù)之間傳遞信息時,就需要傳遞信息時,就需要類型轉(zhuǎn)換函數(shù)類型轉(zhuǎn)換函數(shù)將其中將其中的一種類型數(shù)據(jù)轉(zhuǎn)換為另一中數(shù)據(jù)類型后,的一種類型數(shù)據(jù)轉(zhuǎn)換為另一中數(shù)據(jù)類型后,再進(jìn)行信號的傳遞。再進(jìn)行信號的傳遞。二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型

27、與數(shù)據(jù)對象例如:例如:signal y : std_logic_vector(7 downto 0);signal x : integer range 0 to 255;y= conv_std_logic_vector(x,8);二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象conv_integer 將數(shù)據(jù)類型將數(shù)據(jù)類型 unsigned, signed轉(zhuǎn)換為轉(zhuǎn)換為integer 類型類型. conv_unsigned 將數(shù)據(jù)類型將數(shù)據(jù)類型integer, signed轉(zhuǎn)換為轉(zhuǎn)換為unsigned 類型類型.conv_signed 將數(shù)據(jù)類型將數(shù)據(jù)類型integer, unsigned轉(zhuǎn)

28、換為轉(zhuǎn)換為signed類型類型.conv_std_logic_vector 將數(shù)據(jù)類型將數(shù)據(jù)類型integer, unsigned, signed, std_logic轉(zhuǎn)換為轉(zhuǎn)換為std_logic_vector 類型類型. 二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象u 數(shù)據(jù)對象數(shù)據(jù)對象常常 量量信信 號號變變 量量(data objects)二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象u 數(shù)據(jù)對象數(shù)據(jù)對象常常 量量信信 號號變變 量量(data objects)二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(1) 常量常量定義格式定義格式:constant 常量名稱常

29、量名稱: 數(shù)據(jù)類型數(shù)據(jù)類型 :=給定值;給定值; 常量通常來來定義延遲和功耗等參數(shù)。常量通常來來定義延遲和功耗等參數(shù)。注意!常數(shù)定義的同時進(jìn)行賦初值。注意!常數(shù)定義的同時進(jìn)行賦初值。常數(shù)在程序包說明、實(shí)體說明、結(jié)構(gòu)體描常數(shù)在程序包說明、實(shí)體說明、結(jié)構(gòu)體描述、過程說明、函數(shù)調(diào)用中使用。述、過程說明、函數(shù)調(diào)用中使用。二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; -必需定義必需定義+entity exam1 is port (ip : in std

30、_logic_vector(3 downto 0); op : out std_logic_vector(3 downto 0);end exam1; architecture m1 of exam1 isconstant num : integer := 6;beginop = ip + num;end m1; 二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象(2) 信號信號定義格式定義格式i.(端口端口)信號信號port(端口信號名稱:數(shù)據(jù)類型);端口信號名稱:數(shù)據(jù)類型);例如:例如:port(a:in std_logic);ii.內(nèi)部信號內(nèi)部信號signal 信號名稱信號名稱: 數(shù)據(jù)

31、類型數(shù)據(jù)類型 :=初始值初始值;例如:例如:signal b: std_logic;二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象l“信號信號”數(shù)據(jù)對象的物理意義數(shù)據(jù)對象的物理意義 信號代表電路元件的端口和內(nèi)部的物理連線信號代表電路元件的端口和內(nèi)部的物理連線, , 因此信號的賦值有一定的延遲時間因此信號的賦值有一定的延遲時間. . 端口信號端口信號代表電路的輸入代表電路的輸入/輸出輸出(在實(shí)體中說明在實(shí)體中說明); 內(nèi)部信號內(nèi)部信號代表電路中間信號或中間連接線路,其在代表電路中間信號或中間連接線路,其在元件之間起互連作用元件之間起互連作用(在結(jié)構(gòu)體中說明和使用在結(jié)構(gòu)體中說明和使用)。l信

32、號賦值的語法格式為:信號賦值的語法格式為: 信號名信號名 = 表達(dá)式;表達(dá)式; 例如:例如: 【signal s1 : std_logic_vector(3 downto 0);】 s1 = “0000”;(3)變量)變量定義格式定義格式variable 變量名稱變量名稱: 數(shù)據(jù)類型數(shù)據(jù)類型 :=初始值初始值;變量只能用于進(jìn)程之中變量只能用于進(jìn)程之中,變量的賦值是立即生變量的賦值是立即生效的效的,常用于高層次抽象的算法描述當(dāng)中。常用于高層次抽象的算法描述當(dāng)中。二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對象 “ “變量變量”數(shù)據(jù)對象,它用于對中間數(shù)據(jù)的臨時存數(shù)據(jù)對象,它用于對中間數(shù)據(jù)的臨時

33、存儲,并不一定代表電路的某一組件。儲,并不一定代表電路的某一組件。 注意!變量定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。注意!變量定義的時候盡管可以直接賦初值,但系統(tǒng)往往忽略。建議變量對象定義后再進(jìn)行賦值。建議變量對象定義后再進(jìn)行賦值。變量為局部量。變量為局部量。僅限于進(jìn)程(僅限于進(jìn)程(process)或子程序中使用。)或子程序中使用。 變量賦值的語法格式為:變量賦值的語法格式為:目標(biāo)信號值目標(biāo)信號值:=表達(dá)式;表達(dá)式;如:如:variable s1 : std_logic_vector(3 downto 0); s1 := “0000”;二、二、vhdl數(shù)據(jù)類型與數(shù)據(jù)對象數(shù)據(jù)類型與數(shù)據(jù)對

34、象信號和變量的比較信號和變量的比較 (1)信號和變量的對應(yīng)關(guān)系不同信號和變量的對應(yīng)關(guān)系不同:信號代表電路內(nèi)部信號或連:信號代表電路內(nèi)部信號或連接線路;而變量則不是。接線路;而變量則不是。 (2)信號和變量聲明的位置不同信號和變量聲明的位置不同:信號聲明在子程序、進(jìn)程的外:信號聲明在子程序、進(jìn)程的外部;而變量聲明在子程序、進(jìn)程的內(nèi)部。部;而變量聲明在子程序、進(jìn)程的內(nèi)部。 (3)信號為全局量,而變量只在定義它的域中才可見信號為全局量,而變量只在定義它的域中才可見。因此,。因此,變量不能在兩個進(jìn)程之間傳遞信息。變量不能在兩個進(jìn)程之間傳遞信息。 (4)在一個進(jìn)程中多次為一個信號賦值時,只有最后一個值會

35、起)在一個進(jìn)程中多次為一個信號賦值時,只有最后一個值會起作用;而變量則不同,每次賦值都會改變它的值。作用;而變量則不同,每次賦值都會改變它的值。(5)賦值不同。賦值不同。在進(jìn)程中,信號賦值只有在進(jìn)程結(jié)束時起作用,在進(jìn)程中,信號賦值只有在進(jìn)程結(jié)束時起作用,而變量賦值是立即進(jìn)行的。而且賦值符號不同:信號賦值為而變量賦值是立即進(jìn)行的。而且賦值符號不同:信號賦值為“=”,變量賦值為,變量賦值為“:=”。數(shù)據(jù)對象屬性數(shù)據(jù)對象屬性(1)數(shù)值類屬性:)數(shù)值類屬性: (數(shù)組類型的數(shù)據(jù)對象)(數(shù)組類型的數(shù)據(jù)對象)數(shù)值類屬性有數(shù)值類屬性有 left, right, low, high, length。其中用符號其

36、中用符號 隔開對象名及其屬性。隔開對象名及其屬性。 left表示數(shù)組的左邊界;表示數(shù)組的左邊界; right表示數(shù)組的右邊界;表示數(shù)組的右邊界; low表示數(shù)組的下邊界;表示數(shù)組的下邊界; high表示數(shù)組的上邊界;表示數(shù)組的上邊界; length表示數(shù)組的長度。表示數(shù)組的長度。如:如:signal a : std_logic_vector(7 downto 0);signal b : std_logic_vector(0 to 3);則這兩個信號的屬性值分別為:則這兩個信號的屬性值分別為: aleft=7; aright=0; alow=0; ahigh=7; alength=8; blef

37、t=0; bright=3; blow=0; bhigh=3; blength=4;數(shù)據(jù)對象屬性數(shù)據(jù)對象屬性(2)event屬性:屬性: event屬性,它的屬性,它的值為布爾型值為布爾型,如果剛好有事,如果剛好有事件發(fā)生在該屬性所附著的信號上(即信號有變件發(fā)生在該屬性所附著的信號上(即信號有變化),則其取值為化),則其取值為true,否則為,否則為false。 利用此屬性可決定時鐘信號的變化情況,即時利用此屬性可決定時鐘信號的變化情況,即時鐘是否發(fā)生。鐘是否發(fā)生。數(shù)據(jù)對象屬性數(shù)據(jù)對象屬性例如:時鐘邊沿表示:例如:時鐘邊沿表示:signal clk : in std_logic;則則clkev

38、ent and clk=1表示時鐘的上升沿。表示時鐘的上升沿。即時鐘變化了,且其值為即時鐘變化了,且其值為1。 clkevent and clk=0表示時鐘的下降沿。表示時鐘的下降沿。即時鐘變化了,且其值為即時鐘變化了,且其值為0。此外,還可利用兩個函數(shù)來表示時鐘的邊沿。此外,還可利用兩個函數(shù)來表示時鐘的邊沿。rising_edge(clk) 表示時鐘的上升沿表示時鐘的上升沿falling_edge(clk) 表示時鐘的下降沿表示時鐘的下降沿數(shù)據(jù)對象屬性數(shù)據(jù)對象屬性三、三、vhdl命令語句命令語句并列語句并列語句順序語句順序語句vhdl命令語句命令語句并列語句并列語句 并列語句一般處于進(jìn)程(并

39、列語句一般處于進(jìn)程(process)的外)的外部。所有并列語句都是并行執(zhí)行的,即與部。所有并列語句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無關(guān)。它們出現(xiàn)的先后次序無關(guān)。 并列語句有三個特點(diǎn):并列語句有三個特點(diǎn):a. 所有語句的執(zhí)行是并行的;所有語句的執(zhí)行是并行的;b. 每條語句的執(zhí)行和其所在的位置無關(guān);每條語句的執(zhí)行和其所在的位置無關(guān);c. 并列語句的輸出僅僅依賴于輸入,沒有其并列語句的輸出僅僅依賴于輸入,沒有其它的限制條件。它的限制條件。 并列語句并列語句(1)直接賦值語句直接賦值語句:= 賦值運(yùn)算符賦值運(yùn)算符(2)條件賦值語句條件賦值語句:when-else(3)選擇賦值語句選擇賦值語句:w

40、ith-select-when(4) process(進(jìn)程)語句(進(jìn)程)語句(5) block(塊)語句(塊)語句(6) 函數(shù)調(diào)用語句(后面章節(jié)講)函數(shù)調(diào)用語句(后面章節(jié)講)(7) component(元件)例化語句(元件)例化語句(8)for-generate語句語句直接賦值語句直接賦值語句直接賦值語句的格式:直接賦值語句的格式:signal_name=expression;如:如:signal a,b: std_logic_vector(7 downto 0); a=”00000000”; b=”10000000”;我們也可以這樣賦值:我們也可以這樣賦值:a0); 結(jié)果信號結(jié)果信號a的每一

41、位的值都為的每一位的值都為0。b0);信號對象的位數(shù)很多時,采用信號對象的位數(shù)很多時,采用others來賦值很方便。來賦值很方便。直接賦值語句直接賦值語句直接賦值語句的格式:直接賦值語句的格式: signal_name = expression;如:如:signal a,b: std_logic_vector(7 downto 0); a=”00000000”; b=”10000000”;when-else條件賦值語句條件賦值語句語法格式為:語法格式為:signal_name= expression1 when logic_expression1 else expression2 when l

42、ogic_expression2 else expression3;例如:例如:f = 1 when (x1=x2) else 0;entity and2 is port( a : in bit; b : in bit; c : out bit);end and2;architecture na of and2 is begin c = 0 when a= 0 and b = 0 else 0 when a= 1 and b = 0 else 0 when a= 0 and b = 1 else 1; end na; with-select-when選擇式賦值選擇式賦值with express

43、ion selectsignal_name=expression1 when constant_value1, expression2 when constant_value2, expression3 when constant_value3;entity example is port(x,y: in std_logic; z :out std_logic_vector(1 downto 0);end example;architecture a of example issignal tmp : std_logic_vector(1 downto 0);begintmp = x&

44、y;with tmp selectz= 1 when “01”, -注意結(jié)束為注意結(jié)束為“,”不是不是“;” 1 when 10, 0 when others;end a;with-select-when選擇式賦值選擇式賦值順序語句順序語句 (1)順序語句每一條語句的執(zhí)行都是順序進(jìn)行的。)順序語句每一條語句的執(zhí)行都是順序進(jìn)行的。如同高級編程語言中的命令執(zhí)行方式,一次一條命如同高級編程語言中的命令執(zhí)行方式,一次一條命令,按書寫順序由上而下執(zhí)行。令,按書寫順序由上而下執(zhí)行。 (2)順序語句只能出現(xiàn)在進(jìn)程和子程序內(nèi)部。)順序語句只能出現(xiàn)在進(jìn)程和子程序內(nèi)部。 (3)由于順序語句的次序很重要,因此,順序

45、語句)由于順序語句的次序很重要,因此,順序語句要與并行語句分割開,這可以通過要與并行語句分割開,這可以通過process語句來語句來實(shí)現(xiàn)。實(shí)現(xiàn)。process語句出現(xiàn)在結(jié)構(gòu)體中,它將其內(nèi)部語句出現(xiàn)在結(jié)構(gòu)體中,它將其內(nèi)部的語句進(jìn)行封裝。的語句進(jìn)行封裝。順序語句有三個特點(diǎn):順序語句有三個特點(diǎn): a.所有語句的執(zhí)行是順序進(jìn)行的;所有語句的執(zhí)行是順序進(jìn)行的; b.每條語句的執(zhí)行和其所在的位置有關(guān);每條語句的執(zhí)行和其所在的位置有關(guān); c.順序語句的輸出不僅依賴于輸入,而且還受位置的影響。順序語句的輸出不僅依賴于輸入,而且還受位置的影響。順序語句順序語句(1)process語句語句 (2)if-else語

46、句語句 (3)case-when語句語句 (4)null語句語句 (5)for-loop語句語句 (6)wait until語句語句 (7)變量賦值語句)變量賦值語句 (8) procedure(過程)調(diào)用語句(過程)調(diào)用語句 并列語句并列語句語句的順序不影響代碼的含義。例如:whenelse;withselect;順序語句順序語句語句的順序可能影響代碼的含義。例如:ifelse;case語句;因此,為了在代碼段中區(qū)分順序語句,因此,為了在代碼段中區(qū)分順序語句,vhdlvhdl規(guī)定順序語句一定要放在規(guī)定順序語句一定要放在processprocess語句內(nèi)部;語句內(nèi)部;進(jìn)程語句進(jìn)程語句proce

47、ss process process 語句格式語句格式process-label:process(sensitivity list) variable declarations -變量聲明變量聲明beginif statementscase statementsprocedure調(diào)用語句調(diào)用語句 wait until statementvariable assignment statementsend process;entity abc is port( w0,w1,s:in std_logic; f : out std_logic);end abc;architecture bh of a

48、bc is begin proc1:process(w0,w1,s) begin f= w0; -語句語句a if s=1 then f=w1; end if; - 語句語句b end process;end bh;(1)一個結(jié)構(gòu)體當(dāng)中可以有多個一個結(jié)構(gòu)體當(dāng)中可以有多個process 語句,語句, 不同不同process 語句是同時起作用的并列語句。語句是同時起作用的并列語句。(2)process內(nèi)的語句卻是按順序內(nèi)的語句卻是按順序“執(zhí)行執(zhí)行”(被被編譯器解釋編譯器解釋 )的順序語句。的順序語句。(3)多進(jìn)程之間的信息通過信號對象來傳遞多進(jìn)程之間的信息通過信號對象來傳遞。進(jìn)程語句進(jìn)程語句pro

49、cess特點(diǎn)特點(diǎn)進(jìn)程語句進(jìn)程語句process的的語義語義 敏感表敏感表 每當(dāng)任何信號的取值發(fā)生變化時,每當(dāng)任何信號的取值發(fā)生變化時,進(jìn)程就會有效。進(jìn)程就會有效。 只要進(jìn)程有效:進(jìn)程中的語句就會順序執(zhí)只要進(jìn)程有效:進(jìn)程中的語句就會順序執(zhí)行。行。 在進(jìn)程內(nèi)部所有語句執(zhí)行完畢之前,進(jìn)程在進(jìn)程內(nèi)部所有語句執(zhí)行完畢之前,進(jìn)程內(nèi)部的信號賦值對于進(jìn)程外部都不可見。內(nèi)部的信號賦值對于進(jìn)程外部都不可見。如果對相同信號進(jìn)行了多次賦值,那么只如果對相同信號進(jìn)行了多次賦值,那么只有最后一次賦值在進(jìn)程外部可見。有最后一次賦值在進(jìn)程外部可見。 敏感表敏感表(sensitivity list)包括進(jìn)程的一包括進(jìn)程的一些信

50、號,當(dāng)敏感表中的某個信號變化時進(jìn)些信號,當(dāng)敏感表中的某個信號變化時進(jìn)程才被激活,進(jìn)程內(nèi)的順序語句被執(zhí)行。程才被激活,進(jìn)程內(nèi)的順序語句被執(zhí)行。 當(dāng)進(jìn)程結(jié)束時,進(jìn)程內(nèi)的輸出信號值被當(dāng)進(jìn)程結(jié)束時,進(jìn)程內(nèi)的輸出信號值被更新,進(jìn)程進(jìn)入等待(睡眠)狀態(tài),直到更新,進(jìn)程進(jìn)入等待(睡眠)狀態(tài),直到敏感表中的某一信號發(fā)生變化,進(jìn)程被再敏感表中的某一信號發(fā)生變化,進(jìn)程被再次激活。次激活。進(jìn)程語句進(jìn)程語句process的的語義語義process 模型模型-基本形式基本形式process()beginif-elseend process;process()begincase-whenend process;條件語句條

51、件語句if-elseif expression1 then statement1; statement;else statement2; statement;end if; if-else語句 選擇分支語句:從多個條件中選擇一個滿選擇分支語句:從多個條件中選擇一個滿足條件的足條件的子句子句執(zhí)行;如果條件都不滿足則執(zhí)行;如果條件都不滿足則無操作;無操作;條件的排列方式有兩種基本形式:條件的排列方式有兩種基本形式:1. 并列;并列;2. 嵌套(分層);嵌套(分層);每個每個if-else語句都有明確的語句都有明確的語句控制域語句控制域:控制域控制域以以“if”開始,以開始,以“end if”結(jié)束。

52、結(jié)束。ifelse語句塊語句塊常用樣式常用樣式ifthen 子句子句1 end if; ifthen 子句子句1 else 子句子句2 end if;ifthen 子句子句1elsif .then 子句子句2 elsif .then 子句子句3 end if;ifthen 子句子句1 elsif .then 子句子句2 elsif .then 子句子句3 else 子句子句4 end if;嵌套嵌套if-else if(clkevent and clk=1)then if(up_down=0 )then if( q9)then q=q+1; else q=0000; end if; elsif

53、(up_down=1)then _ end if;end if; architecture behavior of mux4 is begin process(i0,i1,i2,i3,sel)beginif(sel=00)then q= i0;elsif(sel=01)then q= i1;elsif(sel=10)then q= i2;elsif(sel=11)then q= i3;else q 子句子句1; when 值值2 = 子句子句2; when others = 子句子句3;end case; 選擇分支語句:根據(jù)選擇分支語句:根據(jù)選擇信號選擇信號的值從多個的值從多個子句子句中選擇一

54、個子句執(zhí)行;中選擇一個子句執(zhí)行;architecture behavior of mux4 is begin process(i0,i1,i2,i3,sel)begincase sel is when 00= q q q q q端口信號;端口信號;電路的內(nèi)部電路節(jié)點(diǎn)電路的內(nèi)部電路節(jié)點(diǎn)=內(nèi)部信號;內(nèi)部信號;邏輯關(guān)系邏輯關(guān)系=代碼的含義;代碼的含義;代碼的兩種代碼的兩種模型模型并列模型并列模型進(jìn)程模型進(jìn)程模型組合電路組合電路組合電路組合電路時序電路時序電路直接賦值語句,when-else,with-select直接賦值語句,if-else,case-when二、常用時序邏輯電路設(shè)計(jì)二、常用時序邏輯電路設(shè)計(jì)(1)觸發(fā)器設(shè)計(jì)()觸發(fā)器設(shè)計(jì)(d、jk)(2)計(jì)數(shù)器設(shè)計(jì)(分頻器)計(jì)數(shù)器設(shè)計(jì)(分頻器)(3)移位寄存器設(shè)計(jì))移位寄存器設(shè)計(jì) (4)狀態(tài)機(jī)設(shè)計(jì):序列信號發(fā)生器及檢測器)狀態(tài)機(jī)設(shè)計(jì):序列信號發(fā)生器及檢測器 狀態(tài)機(jī)示例狀態(tài)機(jī)示例序列信號發(fā)生器序列信號發(fā)生器序列信號:序列信號:110序列發(fā)生器clkzarchitecture a of mealy is type state_type is (s0, s1, s2); signal state: state_type;

溫馨提示

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

評論

0/150

提交評論