EDA筆記(4)--語言要素

目錄

VHDL文字規則

一.數字型文字

二.字符串型文字

三.標識符

四.下標名及下標段名

一.常量

二.變量

三.信號

數據類型

1.VHDL數據類型特點

1.布爾(BOOLEAN)數據類型

2.位(BIT)數據類型

3.位矢量(BIT_VECTOR)數據類型

4.字符(CHARACTER)數據類型

5.整數(INTEGER)數據類型

6.自然數(NATURAL)和正整數(POSITIVE)數據類型

7.實數(REAL)數據類型

8.字符串(STRING)數據類型

9.時間(TIME)數據類型

10.錯誤等級(SEVERITY_LEVEL)

三、IEEE預定義標準邏輯位與矢量

1.標準邏輯位(STD_L0GIC)數據類型

2.標準邏輯矢量(STD_LOGIC_VECTOR)數據類型

四、其他預定義標準數據類型

(1)無符號數據類型(UNSIGNED TYPE)

(2)有符號數據類型(SIGNED TYPE)

一、用戶自定義數據類型方式

1.TYPE語句用法

2.SUBTYPE語句用法

二、各種自定義數據類型

1.枚舉類型

2.數組類型

3.記錄類型

三.數據類型轉換

1.數據類型轉換的作用

2.數據類型轉換的方式

四.運算操作符及操作數

一.操作符及對應的操作數

VHDL操作符列表

VHDL操作符優先級

二.各種操作符的使用說明

三.重載操作符


 

 

VHDL文字規則

一.數字型文字

例如:16#E#E1 ( 14*16=224 )       16#F.01#E+2  ( [15*16^0+0*16^-1+1*16^-2]*16^2=3841 )

 

二.字符串型文字

三.標識符

 

1.標識符用來定義常數、變量、信號、端口、子程序或參數的名字。
2.VHDL的基本標識符就是以英文字母開頭,不連續使用下劃線“_”,不以下劃線“_”結尾的,由26個大小寫英文字母、數字0~9以及下劃線“_”組成的字符串。
3.標識符中的英語字母不分大小寫。VHDL的保留字不能用於作爲標識符使用。

四.下標名及下標段名

 

1.作用:下標名用於指示數組型變量或信號的某一元素,而下標段名則用於指示數組型變量或信號的某一段元素

2.語句格式:

 

3.實例:下標名及下標段名使用示例

signal A,B,C: bit_vector(0 to 7);
signal M: integer range 0 to 3;
signal Y,Z:bit;
Y<=A(M);    --M是不可計算型下標表示
Z<=B(3);    --3是可計算型下標表示
C (0 to 3)<=A (4 to 7);    --以段的方式進行賦值
C (4 to 7)<=A (0 to 3);    --以段的方式進行賦值

 

 

 


 

 

 


一.常量


1.常量(CONSTANT)的定義和設置主要是爲了使設計實體中的常數更容易閱讀和修改。
例如,將位矢的寬度定義爲一個常量,只要修改這個常量就能很容易地改變寬度,從而改變硬件結構。
2.常量的定義形式如下:
CONSTANT 常量名:數據類型:=表達式;
例如:
CONSTANT FBUS : BIT_VECTOR(5 DOWNTO 0):=“010111”(常量名爲FBUS,數據類型是位矢量,常量值是"010111")

二.變量


1.變量(VARIABLE)是一個局部量,只能在進程和子程序中使用。
變量不能將信息帶出對它作出定義的當前設計單元。
變量的賦值是一種理想化的數據傳輸,是立即發生,不存在任何延時的行爲。
變量常用在實現某種算法的賦值語句中。
2.定義變量的語法格式:
VARIABLE 變量名:數據類型:=初始值;
例如:
VARIABLE B,C: INTEGER:=2;--定義B和C爲整型變量,初始值爲2
變量賦值語句的語法格式:
目標變量名:=表達式;


三.信號


1.信號(SIGNAL)是描述硬件系統的基本數據對象,它類似於連接線。
信號可以作爲設計實體中並行語句模塊間的信息交流通道。
2.信號的定義格式:
SIGNAL 信號名:數據類型:=初始值;
例如:
SIGNAL S1:STD_LOGIC:=0;--定義了一個標準位的單值信號S1,初始值爲低電平
SIGNAL S4:STD_LOGIC_VECTOR(15 DOWNTO 0);   --定義了一個標準位矢的位矢量(數組、總線)信號,共有16個信號元素
信號的賦值語句表達式:
目標信號名〈=表達式;

數據類型

1.VHDL數據類型特點

VHDL是一種強類型語言,要求設計實體中的每一個常數、信號、變量、函數以及設定的各種參量都必須具有確定的數據類型,並且只有數據類型相同的量才能互相傳遞和作用。

 

1.布爾(BOOLEAN)數據類型


TYPE BOOLEAN IS(FALSE,TRUE);
布爾數據類型實際上是一個二值枚舉型數據類型,它的取值有FALSE和TRUE兩種。綜合器將用一個二進制位表示BOOLEAN型變量或信號。
例如,當A大於B時,在IF語句中的關係運算表達式(A>B)的結果是布爾量TRUE,反之爲FALSE。綜合器將其變爲1或0信號值,對應於硬件系統中的一根線。


2.位(BIT)數據類型


位數據類型也屬於枚舉型,取值只能是1或0。
位數據類型的數據對象,如變量、信號等,可以參與邏輯運算,運算結果仍是位的數據類型。
VHDL綜合器用一個二進制位表示BIT。在程序包STANDARD中定義的源代碼是:
TYPE BIT IS(‘0’,‘1’);


3.位矢量(BIT_VECTOR)數據類型


位矢量只是基於BIT數據類型的數組,在程序包STANDARD中定義的源代碼是:
TYPE BIT_VETOR IS ARRAY(NATURAL RANGE<>)OF BIT;
使用位矢量必須註明位寬,即數組中的元素個數和排序。
例如:
SIGNAL A : BIT_VECTOR(7 DOWNTO 0);--表示信號A被定義爲一個具有8位位寬的矢量,它的最左位是A(7),最右位是A(0)。


4.字符(CHARACTER)數據類型


字符類型通常用單引號引起來,如’A’。
字符類型區分大小寫,如‘B’不同於‘b’。


5.整數(INTEGER)數據類型


在VHDL中,整數的取值範圍:
-2 147 483 647 ~ +2 147 483 647 即可用32位有符號的二進制數表示。
在實際應用中,VHDL仿真器通常將INTEGER類型作爲有符號數處理,而VHDL綜合器則將INTEGER作爲無符號數處理。


6.自然數(NATURAL)和正整數(POSITIVE)數據類型


自然數是整數的一個子類型,是非負的整數,即零和正整數;
正整數也是整數的一個子類型,它包括整數中非零和非負的數值。


7.實數(REAL)數據類型


VHDL的實數類型類似於數學上的實數,或稱浮點數。
實數的取值範圍:
-1.0E38 ~ +1.0E38
通常情況下,實數類型僅能在VHDL仿真器中使用,VHDL綜合器不支持實數,因爲實數類型的實現相當複雜,目前在電路規模上難以承受。


8.字符串(STRING)數據類型


字符串數據類型是字符數據類型的一個非約束型數組,或稱爲字符串數組。字符串必須用雙引號標明。
例如:
VARIABLE STRING_VAR : STRING(1 TO 7);

STRING_VAR : “A B C D”;


9.時間(TIME)數據類型


VHDL中惟一的預定義物理類型是時間。
完整的時間類型包括整數和物理量單位兩部分,整數和單位之間至少留一個空格。
例如:
55 ms,20 ns


10.錯誤等級(SEVERITY_LEVEL)


在VHDL仿真器中,錯誤等級用來指示設計系統的工作狀態。
共有四種可能的狀態值:
NOTE(注意)、WARNING(警告)、ERROR(出錯)、FAILURE(失敗)。
在仿真過程中,可輸出這四種值來提示被仿真系統當前的工作情況。
其定義如下:
TYPE SEVERITY_LEVEL IS(NOTE,WARNING,ERROR,FAILURE);

三、IEEE預定義標準邏輯位與矢量


在IEEE庫的程序包STD_LOGIC_1164中,定義了兩個非常重要的數據類型,即標準邏輯位STD_L0GIC和標準邏輯矢量STD_L0GIC_VECTOR。


1.標準邏輯位(STD_L0GIC)數據類型


(1)數據類型STD_L0GIC的定義:
TYPE STD_LOGIC IS(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,’-’ );
(未初始化的,強未知,強0,強1,高阻態,弱未知,弱0,弱1,忽略他);
(2)在程序中使用此數據類型前,需加入下面的語句:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

(3)注意事項:
由於標準邏輯位數據類型的多值性,在編程時應當特別注意。因爲在條件語句中,如果未考慮到STD_LOGIC的所有可能的取值情況,綜合器可能會插入不希望的鎖存器。
就綜合而言,STD_LOGIC型數據能夠在數字器件中實現的只有其中的四種值,即“-”、“0”、“1”和“Z”。

2.標準邏輯矢量(STD_LOGIC_VECTOR)數據類型


STD_LOGIC_VECTOR數據類型的數據對象賦值的原則是:
同位寬、同數據類型的矢量間才能進行賦值。


四、其他預定義標準數據類型


1.VHDL綜合工具配帶的擴展程序包中,定義了一些有用的類型。如Synopsys公司在IEEE庫中加入的程序包STD_L0GIC_ARITH中定義瞭如下的數據類型:無符號型(UNSIGNED)、有符號型(SIGNED)和小整型(SMALL_lNT)。

2.在使用之前,請注意必須加入下面的語句:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;

UNSIGNED類型和SIGNED類型是用來設計可綜合的數學運算程序重要類型。
UNSIGNED 用於 無符號數的運算
SIGNED 用於 有符號數的運算


(1)無符號數據類型(UNSIGNED TYPE)


UNSIGNED數據類型代表一個無符號的數值,在綜合器中,這個數值被解釋爲一個二進制數,這個二進制數的最左位是其最高位。
示例如下:
VARIABLE VAR:UNSIGNED(0 TO 10);--變量VAR有11位數值,最高位是VAR(0),而非VAR(10);
SIGNAL SIG:UNSIGNED(5 DOWNTO 0);--信號SIG有6位數值,最高位是SlG(5)


(2)有符號數據類型(SIGNED TYPE)


SIGNED數據類型表示一個有符號的數值,綜合器將其解釋爲補碼,此數的最高位是符號位。
例如:
SIGNED(“0101”)代表+5,5;SIGNED(“1011”)代表-5。


一、用戶自定義數據類型方式


用戶自定義數據類型是用 類型定義語句TYPE子類型定義語句SUBTYPE 實現的。


1.TYPE語句用法

 

 

 


2.SUBTYPE語句用法


子類型SUBTYPE只是由TYPE所定義的原數據類型的一個子集,它滿足原數據類型的所有約束條件。
利用子類型定義數據對象,除了使程序提高可讀性和易處理外,還有利於提高綜合的優化效率。
子類型SUBTYPE的語句格式如下:
SUBTYPE 子類型名 IS 基本數據 RANGE 約束範圍;
例如:
(標準程序包中已定義過得數據類型)
SUBTYPE DIGITS INTEGER RANGE 0 TO 9;
(把INTEGER約束到
只含有10個值得數據類型)


二、各種自定義數據類型


VHDL自定義數據類型有多種,如枚舉類型、整數類型、數組類型、記錄類型、時間類型、實數類型等。


1.枚舉類型


(1)VHDL中的枚舉數據類型是用文字符號來表示一組實際的二進制數的類型。
其目的是爲了更便於閱讀和編譯。
(2)枚舉數據類型定義示例
TYPE M_STATE IS(STATE1,STATE2,STATE3,STATE4,STATE5);
SIGNAL CURRENT_STATE,NEXT_STATE : M_STATE;

(3)在綜合過程中,枚舉類型文字元素的編碼通常是自動的,編碼順序是默認的,一般將第一個枚舉量編碼爲0,以後依次加1。
一般而言,編碼方法因綜合器不同而不同。爲了某些特殊的需要,編碼順序也可以人爲設置。


2.數組類型


(1)數組類型是將一組具有相同數據類型的元素集合在一起,作爲一個數據對象來處理的數據類型。
數組可以是一維數組或多維數組。VHDL仿真器支持多維數組,但VHDL綜合器只支持一維數組
(2)VHDL允許定義兩種不同類型的數組,即限定性數組和非限定性數組
它們的區別是:
限定性數組下標的取值範圍在數組定義時就被確定了,而非限定性數組下標的取值範圍需留待隨後根據具體數據對象再確定。
(3)限定性數組定義語句格式:
(即指數組各元素的數據類型)
TYPE 數組名 IS ARRAY(數組範圍)0F 數據類型
(明確指出數組元素的定義數量和排序方式,
以整數來表示其數組的下標)

(4)非限制性數組的定義語句格式:
(下標範圍待定符號,用到該數組類型時,再
填入具體的數值範圍)

TYPE 數組名 IS ARRAY(數組下標名 RANGE< >)0F 數據類型;
(以整數類型設定的一個數組下標名稱)

比如:
TYPE BIT_VECTOR IS ARRAY(NATURAL RANE< >)OF BIT;
VARABLE VA : BIT_VECTOR(1 TO 6);–將數組取值範圍定在1~6

 

3.記錄類型

 

1.由已定義的、數據類型不同的對象元素構成的數組稱爲記錄類型的對象。

2.定義記錄類型的語句格式:

 

三.數據類型轉換

 

1.數據類型轉換的作用


由於VHDL是一種強類型語言,要求各種數據類型相同的參量,才能相互作用和傳遞。
因此對於數據類型不同的參量需要進行相互作用和傳遞時,首先必須進行數據類型的轉換。

 

2.數據類型轉換的方式

 

(1)類型轉換函數方式
類型轉換函數方式,就是通過定義一個數據類型轉換函數,將屬於某種數據類型的數據對象轉換成屬於另一種數據類型的數據對象。
(2)直接類型轉換方式
直接類型轉換方式,就是將一個需要轉換數據類型的表達式,通過指定一種特定的數據類型的方式,即數據類型標識符(表達式),將表達式的值轉換成指定的數據類型。

(3)應用舉例

 

四.運算操作符及操作數

 

一.操作符及對應的操作數

 

VHDL操作符列表

 

VHDL操作符優先級

 

二.各種操作符的使用說明

 

1.嚴格遵循基本操作符間操作數是同數據類型的規則嚴格遵循操作數的數據類型必須與操作符所要求的數據類型完全一致的規則
2.注意操作符之間的優先級別。當一個表達式中有兩個以上的運算符時,可使用括號將這些運算分組。

 

三.重載操作符

 

爲了方便各種不同數據類型間的運算,VHDL允許用戶對原有的基本操作符重新定義,賦予新的含義和功能,從而建立一種新的操作符,這就是重載操作符,定義這種操作符的函數稱爲重載函數。
Synopsys的程序包STD_LOGIC_ARITHSTD_LOGIC_UNSIGNEDSTD_LOGIC_SIGNED中已經爲許多類型的運算重載了算術運算符和關係運算符,因此只要引用這些程序包SIGNEND、UNSIGEND、STD_LOGIC和INTEGER之間即可混合運算INTEGER、STD_LOGIC和STD_LOGIC_VECTOR之間也可以混合運算。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章