【正文】
3 Basic Data Type in VHDL Code 一、 Data Objects(是數(shù)據(jù)類型的載體 ) Information is represented in VHDL code as data objects. Three kinds of data objects are provided: – Constant(常量) – Variable(變量) – Signal(信號) 對象的說明格式為: – 對象類別 標(biāo)識符表:類型標(biāo)識 [: =初值 ] 例 : 數(shù)據(jù)對象名 數(shù)據(jù)對象類型 數(shù)據(jù)對象值的類型 ( 1)常量聲明 常量是全局量 ,在結(jié)構(gòu)描述、程序包說明、實體說明、過程說明、函數(shù)調(diào)用說明和進程說明中使用。 constant delay :TIME:= 25ns。 例: variable A,B :BIT。 temp := x”AA” 。 ? 多位賦值 temp (7 downto 4) := “1010”。 ? 信號為器件內(nèi)部節(jié)點信號,數(shù)據(jù)的進出不像端口信號那樣受限制,不必定義其端口模式。 ? 用“ =”來給信號賦值 例: signal A,B :BIT。 ? 整體賦值 : temp = “10101010”。 ? 逐位賦值 : temp(7) = ?1?。 USE 。 g : OUT Std_Logic)。 ARCHITECTURE logic OF simp IS SIGNAL e, f : Std_Logic。 f=not(c or d)。 END logic。 Variable A: std_logic_vector(7 downto 0)。 賦值及賦值時刻 A = “1010”;(延時) A := “1010”。 若常數(shù)定義在結(jié)構(gòu)體中,適用范圍就是本結(jié)構(gòu)體。首先,由于信號 A發(fā)生變化使進程語句開始執(zhí)行。 盡管 D中先代入 A值,后代入 C值,在時間上有一個延時,但是在代入時由于不進行處理,因此仿真時認(rèn)為是時間 0值延時。 結(jié)果: 這里 D是變量?!?從而使 Y為 B+C。而變量的值一經(jīng)賦值就變成新的值。 =1=1c bxy執(zhí)行結(jié)果為: x=c xor b, y=c xor b 執(zhí)行結(jié)果為: x=c xor a, y=c xor b =1=1c axy b二、 Data Type 1. 標(biāo)準(zhǔn)定義的數(shù)據(jù)類型 不必用 USE說明而直接使用。 2) Character(字符):使用時用 單引號 括起來,如: ‘ A?。 3) String(字符串):使用時用 雙引號 括起來,如: ‘‘ 111000101 ?? 。 整數(shù)與單位之間至少留一個空格: 5 sec 8) Bit_vector(位矢量):基于 BIT數(shù)據(jù)類型的數(shù)組。 9) Natural(自然數(shù))和 Positive(正整數(shù) ):是整數(shù)的一個子類型。有四種狀態(tài)值: NOTE(注意 )、WARNING(警告 )、 ERROR(錯誤 )、 FAILURE(失敗 )。約束區(qū)間的說明通常跟在數(shù)據(jù)類型說明的后面。 TYPE level IS (?0?,?1?,?Z?)。 – 3)Array Types(數(shù)組類型)格式如下: TYPE 數(shù)據(jù)類型名 IS ARRAY(索引范圍) OF類型名稱 ; 例如 :TYPE a IS ARRAY(integer0 TO 9)OF std_logic。 – 1) std_logic:工業(yè)標(biāo)準(zhǔn)的邏輯類型。 – 2) std_logic_vector:工業(yè)標(biāo)準(zhǔn)的邏輯類型。 – 注意:使用這兩種數(shù)據(jù)時, 程序中必須聲明 : LIBRARY IEEE。 C,數(shù)據(jù)類型為整數(shù)型。 Library IEEE Use Signal A: std_logic_vector(1 to 8) Signal B: std_logic Signal C: integer Library Std Use A=“11001101” B=?0? 三、 Documentation in VHDL Code 標(biāo)識符是 VHDL語言的最基本的要素之一,是使用VHDL語言的基礎(chǔ)。 VHDL標(biāo)識符書寫規(guī)則如下: 1)使用的字符由 26個英文字母、數(shù)字 0~ 9以及下劃線組成; 2)標(biāo)識符必須以英文字母開始,不區(qū)分大小寫; 3)不能以下劃線結(jié)尾; 4)標(biāo)識符中不能有空格; 5)標(biāo)識符不能與 VHDL的關(guān)鍵字重名。 Signal c,d,z: integer。 z=c and d。 Signal e,f,g,h: std_logic_vector(1 downto 0)。 d=a or b or c。 h=e nor f nor g。 3. 運算符兩側(cè)的操作數(shù)要對稱 d=(e nor f) nor g。 ENTITY liti IS PORT(a,b,c,d: IN STD_LOGIC。 END liti 。 Signal tmp : std_logic。 END AA1 。abcde例: Variable a1 : std_logic_vector(3 to 0)。 a1 SLL 1 。 a1= 1100 a1 ROL 1 。 a1= 1101 a1 SLA 2 。 a := b + c 。 例 2: Signal a : std_logic_vector(4 to 0)。 Signal c : std_logic_vector(1 to 0)。一般需要了解VHDL中的數(shù)值類屬性、函數(shù)類屬性以及范圍類屬性。 1.?dāng)?shù)值類屬性 數(shù)值類屬性可用于返回 數(shù)組、塊或一般數(shù)據(jù)的有關(guān)屬性 。例如: TYPE number IS INTEGER RANGE 9 downto 0。 numberˊ right=0。 numberˊ high=9。如信號屬性函數(shù): ˊ event,它的值為布爾型,如果剛好有事件發(fā)生在該屬性所附著的信號上(即信號有變化),則其取值為 True,否則為 False。例如:時鐘邊沿表示 SIGNAL clk: IN std_logic 則: clkˊ event AND clk=ˊ 1ˊ ,表示時鐘的上升沿。 3.范圍類屬性 范圍 ( ˊ RANGE) 類屬性 , 用來生成一個限制性數(shù)據(jù)對象的范圍 。 Data_busˊ RANGE=15 DOWNTO 0。 練 習(xí) 編寫包含全加器的結(jié)構(gòu)體代碼。 Full_adder a b c sum co and3 a b y c ARCHITECTURE example1 OF Full_adder IS BEGIN sum= a XOR b XOR c。 END example1。 END exampl