1、按一下以編輯母片標題樣式,按一下以編輯母片,第二層,第三層,第四層,第五層,*,VHDL,的物件(,Objects),宣告,物件種類,(1)訊號,(2)變數,(3)常數,VHDL,的物件(,Objects),宣告語法,:=;,VHDL,的物件(,Objects),宣告,訊號:,在,VHDL,中的訊號是指電路上的連接點,它包括實體中在埠(,Port),後宣告的接腳及在結構(,Architecture),中宣告的訊號,(,Signal),接點,VHDL,的物件(,Objects),宣告,(1)訊號例:,VHDL,的物件(,Objects),宣告,(2),變 數(,Variable),VHDL,中的
2、變數與一般電腦語言中的變數一樣,提供在程式中做計數或運算用,例:,variable example_var1:std_logic:=0;,example_var1:=1;,-,使用變數,example_var1,及設定值=1,變數,變數物件被宣告在,process,或,副程式,中,我們稱它為,process,或,副程式,的,區域變數,VHDL,的物件(,Objects),宣告,常 數(,Constant),常數可以宣告在任何可宣告,區域,但它的數值經宣告後是,不可更改的,例,:,constant enable_bits:integer:=0;,VHDL,標準的資料型態,VHDL,標準的資料型態
3、整數(,integer),整數(,integer),型態是資料長度最長是32,bits,整數型態資料又可分,有正負號,(,Signed),及,無正負號,(,Unsigned),等兩種,指定資料型態前 您必需先宣告相關零件庫及使用相關包裝,包裝,std_logic_1164,及,std_logic_signed,主要是提供,有正負號,(,Signed),型態,用。,包裝,std_logic_1164,及,std_logic_unsigned,主要是提供,無正負號,(,unsigned),型態用,。,VHDL,標準的資料型態,整數資料型態其長度雖然是32,bits,但它會隨實際的數值調整資料長度
4、到最短。,以調整最節省硬體的大小,。,例:,a:=15;,則,a,的資料長度只有4,bits,VHDL,標準的資料型態,資料型態,說 明,實數,Real,在設計時物件宣告資料型態用,例如:,variable float_m:real:=1.25;,這個資料型態並不被許多合成工具支援。,自然數,Natural,它與整數定義相同,值域範圍是0最大整數例如:,variable index:natural;,這個資料型態因與整數型態相同所以在設計時大多數會使用整數方式宣告。,正整數,Positive,值域在1最大正整數值,宣告範例如下:,variable pos,_val,:positive;,VH
5、DL,標準的資料型態,布林代數,Boolean,值域在,TRUE,FALSE,或1,0宣告範例如下:,variable logic,_val,:,boolean,;,數值設定範例如:,logic,_val,:=TRUE;,位元,Bit,值域在1,0宣告範例如下:,signal en_bit:bit;,數值設定範例如:,en_bit=1;,位元向量,Bit_vector,它是個位元陣列資料型態,宣告範例如下:,signal data_bus:bit_vector(31,downto,0);,數值設定範例如:,data_bus=“0100011100100101010101011010101010
6、VHDL,標準的資料型態,字元,Character,字元型態資料長度為8位元,宣告範例如下:,variable char,_val,:character;,數值設定範例如:,char,_val,:=A;,字串,String,它是字元陣列的資料型態,宣告範例如下:,variable text,_val,:string;,數值設定範例如:,text,_val,:=”Hello”,時間,Time,在設計時利用它來訂出時間資料型態,宣告範例如:,variable Td:time;,數值設定範例如:,Td:=100nS;,資料型態的轉換,在,VHDL,的,std_logic,_arith,包裝中提
7、供了轉換功能函數,做為不同型態資料的轉換,如:,CONV_INTEGER(,參數),將括號內的參數轉換成整數型態,轉換後的數值範圍在-2147483647,to 2147483647,之間。,CONV_UNSIGNED(,參數),將括號內的參數轉換成無正負號型態。,CONV_SIGNED(,參數),將括號內的參數轉換成有正負號型態。,CONV_STD_LOGIC_VECTOR(,參數),將括號內的參數轉換成,STD_LOGIC_VECTOR。,配合資料型態的數值設定,狀態字,代表意義,U,未初始化的未知值,X,強制性的未知值,隨意值(,Dont care),0,邏輯狀態:0,1,邏輯狀態:1,
8、Z,高阻抗狀態,Hi-Z,配合資料型態的數值設定,w,弱制約性的未知值,隨意值(,Dont care),l,邏輯狀態:低電位0,h,邏輯狀態:高電位1,-,隨意值(,Dont care),Std_Logic/Std_Logic_Vector,標準邏輯資料型態,Std_Logic,及,Std_Logic_Vector,可指定以上九種數值,配合資料型態的數值設定,狀態字,代表意義,False,邏輯狀態:0,True,邏輯狀態:1,在一般邏輯數值系統時,底下兩個值及其代表意義,Two drivers onto a bus,R,esolution function R A,B,predicts the
9、 result of two drivers to drive signals with values A and B onto a bus.,R A,B B=0 B=1 B=X B=Z,A=0 0 X X 0,A=1 X 1 X 1,A=X X X X X,A=Z 0 1 X Z,使用者自訂資料型態,列舉資料型態:,type,is,();,例:,type,traffic_light,is,(red,yellow,green);,signal,lighting,:,traffic_light,;,lighting,=red;,使用者自訂資料型態,如果要設定,lighting,物件數值時只有,r
10、ed、yellow,及,green,三者之一才會被接受。,電路合成器會將列舉資料由左至右作二進制邏輯編碼,例如這個例子而言,red,將編碼成為”00”,yellow,為”01”及,green,為”10”。,使用者自訂資料型態,陣列資料型態,例:,TYPE,nibble,IS ARRAY(3 DOWNTO 0);,TYPE,byte,IS ARRAY(7 DOWNTO 0);,TYPE,word,IS ARRAY(15 DOWNTO 0);,TYPE,balls,IS ARRAY(0 TO 199);,使用者自訂資料型態,記錄資料型態,多種資料型態組成一個記錄(,Record),群集,例:,-記
11、錄資料型態宣告如下:,TYPE,clock,_rec,IS,RECORD,Seconds :integer 0 to 59;,Minutes :integer 0 to 59;,Hours :integer 0 to 24;,END,RECORD,;,.,使用者自訂資料型態,使用記錄資料型態,SIGNAL T1,T2,T3 :,clock,_rec,;,設定訊號物件,T1.Seconds=30;,T1.Minutes=10;,T1.Hours=23;,T2.Hours=3;,VHDL,的運算敘述,VHDL,的運算表示式分成:訊號設定表示式與變數表示式兩種。,對於變數(,Variable),我們
12、使用“,:=,”當做類似”等於”的運算,對於訊號則使用“,=,”當做類似”設定”的運算,VHDL,的運算敘述,例:,example_var1:=0;,訊號表示式是以,=,來設定運算。,例:,example_signal=001;,例:,在圖7.1.2中我們可以看到運算元如何使用,特,別將它們截取如下:,SUM=(A,xor,B),xor,C;,-,全加器”和”的布林函數,CY=(A and B)or(B and C)or(A and C);,-,全加器”進位”,的布林函數,VHDL,的算術運算,+,加,-,減,*,乘,/,除,*只在編譯時設定數值運算用,*,指數*只在編譯時設定數值運算用,Ab
13、s,絕對值,取正值,Mod,求模數*只在編譯時設定數值運算用,Rem,求餘數*只在編譯時設定數值運算用,VHDL,的算術運算,=,等於,如果兩值相等則為真(,true),否則為假(,false),如果其中有一未知值,則輸出未知值,X,/=,不等於,如果兩值不相等則為真(,true),否則為假(,false),如果其中有一未知值,則輸出未知值,X,小於,如果左值小於右值則為真(,true),否則為假(,false),如果其中有一未知值,則輸出未知值,X,大於,如果左值大於右值則為真(,true),否則為假(,false),如果其中有一未知值,則輸出未知值,X,=,大於等於,如果左值大於等於右值則
14、為真(,true),否則為假(,false),如果其中有一未知值,則輸出未知值,X,VHDL,的邏輯運算,Not,取相反,And,及,Or,或,Nand,反及,Nor,反或,Xor,互斥或,Xnor,反互斥或,VHDL,的位移運算,Sll,邏輯性左移,Srl,邏輯性右移,Sla,算術性左移(牽涉正負號),Sra,算術性右移(牽涉正負號),Rol,向左旋轉,Ror,向右旋轉,VHDL,的其它運算,-,取負值,&,字元或字串串接運算,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,USE IEEE.STD_LOGIC_ARITH.ALL;,USE IEEE.S
15、TD_LOGIC_UNSIGNED.ALL;,ENTITY exercise is,PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);,B:IN STD_LOGIC_VECTOR(3 DOWNTO 0);C:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);,END exercise;,ARCHITECTURE,architec,OF exercise IS,BEGIN,C(0)=Not A(0);,C(2,downto,1)=A(2,downto,1)and B(2,downto,1);,C(3)=1,xor,A(3);,C(7,downto,4)=1111 WHEN(A/=B)else 0000;,END,architec,;,






