VHDL電路設計語言中的表示式與運算子

格式
pdf
大小
605.31 KB
頁數
32
作者
Administrator
收藏 ⬇️ 下載檔案
提示: 文件格式为 pdf,轉換可能會出現排版或格式的些許差異,請以實際檔案為準。
此檔案建立於 2010-04-26,离现在 15 182 天,建議確認內容是否仍然適用。
PDF 加载中...
background image

第六章

第六章

第六章

第六章

VHDL電路設計語言中表示式

電路設計語言中表示式

電路設計語言中表示式

電路設計語言中表示式

background image

2

表示式

表示式

表示式

表示式

VHDL電路設計語言中的表示式,係用來計算出
一個式子中的算術或邏輯數值。

在一個表示式中,通常包含有2種的組成元素,
一為運算元(Operand),另一為運算子
(Operator)。

在VHDL電路設計語言中,表示式的語法構成了
一個程式執行或計算的基本單元,使程式具有實
質計算上的意義。

background image

3

運算子

運算子

運算子

運算子(Operator)

**  abs  not

*  /  mod  rem

乘法運算子

+  -

單一運算子

+  - &

加法運算子

=  /=  <  <=  >  >=

關係運算子

and  or  not  nand nor  xor xnor

邏輯運算子

優先順序

運 算

VHDL

電路設計語言中,所定義的標準運算子

background image

4

關係運算子

關係運算子

關係運算子

關係運算子(Relational 
Operators)

關係運算式所運算出來的結果,係為一個布林

型態的資料型別而存在,也就是只有二種狀態
TRUE或FALSE。關係運算子,通常使用在

VHDL電路設計語言中的條件判斷式上。

六種關係運算子。

「=」: 表示「等於」之比較。

「/=」: 表示「不等於」之比較。

「>」: 表示「大於」之比較。

「>=」: 表示「大於或等於,即不小於」之比較。

「<」: 表示「小於」之比較。

「<=」: 表示「小於或等於,即不大於」之比較。

background image

5

邏輯運算子

邏輯運算子

邏輯運算子

邏輯運算子(Logical 
Operators)

在VHDL電路設計語言中,使用邏輯運算子來表
示資料型別為BIT、BOOLEAN及STD_LOGIC的
訊號的邏輯運算關係。

邏輯運算子如下所示。

「and」: 用來表示「及」(And)的邏輯運算。

「or」: 用來表示「或」(Or)的邏輯運算。

「not」: 用來表示「非」(Not)的邏輯運算。

「nand」: 用來表示「反及」(Nand)的邏輯運算。

「nor」: 用來表示「反或」(Nor)的邏輯運算。

「xor」: 用來表示「互斥或」(Exclusive OR)的邏輯運算。

「xnor」: 用來表示「反互斥或」(Exclusive NOR)的邏輯運
算。

background image

6

算術運算子

算術運算子

算術運算子

算術運算子(Arithmetic 
Operators)

在VHDL電路設計語言中,使用算術運算子來表示各種資料
型別之間的相互算術運算。

VHDL電路設計語言所定義的算術運算子共有:加(‘+’)、減
(‘-’)、乘(‘*’)、除(‘/’)、次方(‘**’)、求餘數(‘rem’)等六種,但
大部份的VHDL電路合成器(Synthesizer)只支援加(‘+’)及減
(‘-’)兩種算術運算子的電路合成。

+」: 用來表示「加法」算術運算。

「-」: 用來表示「減法」算術運算。

「*」: 用來表示「乘法」算術運算。

「/」: 用來表示「除法」算術運算。

「**」: 用來表示「次方」算術運算。

「rem」: 用來表示「求餘數」算術運算。

background image

7

數值運算子

數值運算子

數值運算子

數值運算子(Value Operators)

在VHDL語法中,使用一些位元運算子來執行資料的數值

運算。

「rol」或「ROL」: 用來表示「位元向左旋轉」之數值運算。R代
表Rotate,即位元旋轉之意。其用法如下:

「ror」或「ROR」: 用來表示「位元向又旋轉」之數值運算。其用
法與ROL相似。

「sll」或「SLL」: 用來表示「位元向左移位」之數值運算。S代表
Shift,L代表Logic,即位元邏輯移位之意。其用法與ROL相似。

「srl」或「SRL」: 用來表示「位元向右移位」之數值運算。其用
法與ROL相似。

「sla」或「SLA」: 用來表示「有號數的位元向左移位」之數值運
算。A代表Arithmetic之意。其用法與ROL相似。

「sra」或「SRA」: 用來表示「有號數的位元向右移位」之數值運
算。其用法與ROL相似。

background image

8

其他常用的

其他常用的

其他常用的

其他常用的VHDL語法符號

語法符號

語法符號

語法符號

「SIG_A <= SIG_B;」中的「<=」: 用來表示訊號的數值指

定。

「VAR_A := ‘0’;」中的「:=」: 用來表示變數的數值指定。

「(SIG_M <= (others => ‘0’);」中的「=>」: 用來表示數值

或識別字的對應。

「port map(PORT_SIG => SIG_C);」中的「=>」: 用來代表

模組間輸出入埠訊號的指定。

「(”01” & SIG_D & ‘0’);」中的「&」: 用來表示資料型別BIT

或STD_LOGIC的數值連結。

「LABEL_A: . . .」中的「:」: 用來表示VHDL程式中元件、過

程(Process)等的標籤Label。

「SIG_A : in std_logic;」中的「:」: 用來表示VHDL程式中用

於模式、資料型別或標題的宣告時使用。

「-- This is a Remark line」中的「--」: 用來表示VHDL程式中

的註解文字,在此符號之後的同一列中任意文字對VHDL編譯

器來說,都看成是忽略的。

background image

9

運算元

運算元

運算元

運算元(Operand)

在一個VHDL電路設計語言的表示式中的運
算元提供數值或資料,以便運算子能藉此
數值加以運算。

background image

10

表示式

表示式

表示式

表示式(Expressions)

用左右括弧「(」及「)」所括起來的表
示式,可以看成是另外一個表示式中的
運算元,如:

(A and B)(A /= “00000000”). . .。

background image

11

文字

文字

文字

文字(Literals)

在VHDL電路設計語言中,文字(Literal)的代
表數值,直接代表了其在VHDL程式語言中
表示式的運算意義。如:

‘0’;“1010”;456;16#3F7#;. . .等。

background image

12

識別字

識別字

識別字

識別字(Identifier)

用識別字來代表的運算元,主要是代表
著所宣告的訊號(Signal)、變 數(Variable)
及常數(Constant)。如:

MY_VAR;MY_CONST;MY_SIG;MY_ARRA
Y_SIG; . . .等。

background image

13

指標式名稱

指標式名稱

指標式名稱

指標式名稱(Indexed Names)

此主要用來指出,在一個陣列物件中,
其內部的單一元素的資料內容。如:

MY_ARRAY_SIG(3);MY_ARRAY(5);MY_
RAM(19,168); . . .等。

background image

14

片段式名稱

片段式名稱

片段式名稱

片段式名稱(Slice Names)

此主要用來指示出,在一個陣列
物件中,其內部片段的資料內
容。如:

MY_ARRAY_SIG(7 downto

4);MY_ARRAY(25 to 
29);MY_RAM(1 to 6, 5 to 
18); . . .等。

background image

15

聚集式名稱

聚集式名稱

聚集式名稱

聚集式名稱(Aggregates)

此主要亦用來說明,在一個陣列資料型
別中,其內部資料的內容。如:

MY_ARRAY_TYPE’(others => 

‘0’);MY_ARRAY_SIG <= (others => 
‘0’); . . .等。

background image

16

紀錄資料型別的

紀錄資料型別的

紀錄資料型別的

紀錄資料型別的Field

此主要用來說明,在一個紀錄資
料型別的Field中,其內部資料的
內容。如:

MY_RECORD.FIELD_A; . . .等。

background image

17

屬性

屬性

屬性

屬性(Attributes)

此主要用來說明,在一個VHDL程式中屬
性資料的內容。如:

MY_SIG’EVENT;MY_VEC’LENGTH;. . .

等。

background image

18

函式呼叫

函式呼叫

函式呼叫

函式呼叫(Function Call)

此主要用來說明,在一個VHDL程式中
所呼叫函式計算後所return的內容。如:

MY_FUNC(VAR1, VAR2, VAR3);. . .

等。

background image

19

可計算的

可計算的

可計算的

可計算的(Computable)v.s.不可計

不可計

不可計

不可計

算的

算的

算的

算的(Non-Computable)運算元

運算元

運算元

運算元

若該運算元的數值或資料可以直接求得
的,即稱為可計算的運算元。

若該運算元的數值或資料,另需額外的
邏輯電路之處理才能得到。則稱為不可
計算的運算元。

background image

20

可計算運算元

可計算運算元

可計算運算元

可計算運算元

文字數值(Literal Values)。

由一個可計算的表示式所指定數值的變數。

當LOOP的範圍是可計算時的「FOR . . . LOOP」參數。
「FOR . . . LOOP」的使用。

只含有可計算表示式的聚集式(Aggregates)運算元。

RETURN值為可計算的函式呼叫。

表示式中的所有運算元均為可計算的,而所構成之表示
式運算元。

NAND或AND運算子所構成的表示式中,其中的運算元
有一 個為'0'。

NOR或OR運算子所構成的表示式中,其中的運算元有一
個為’1’。

background image

21

不可計算運算元

不可計算運算元

不可計算運算元

不可計算運算元

訊號(Signals)。

輸出入埠訊號(Ports)。

由不可計算的條件式,來決定變數的指定數
值,雖然該數值是 為可計算的。

由不可計算的數值,來指定給變數。

background image

22

VHDL電路設計語言中的文字

電路設計語言中的文字

電路設計語言中的文字

電路設計語言中的文字

(Literals)

在VHDL中所定義的文字(Literals),其所代表之意義
是直接由字母來決定其數值。該文字所表示的數
值,主要是用來直接當作表示式中的運算元來使
用。

可以分成:

1.數值類文字(Numeric Literals)。
2.字元類文字(Character Literals)。
3.列舉類文字(Enumeration Literals)。
4.字串類文字(String Literals)。

background image

23

數值類文字

數值類文字

數值類文字

數值類文字(Numeric 
Literals)

數值類文字係由阿拉伯數字及「#」,「_」,

符號所構成的整數數值。其用法說明如下:

166代表十進位的數值166。

各個阿拉伯數字間,可用底線符號「_」來區隔,

而不影響其數值,以增加數字的可讀性。如: 1_6_6

與166是相等的。

數字所構成的數值,其運算基底可用「#」符號來

予以設定,如:

10#166#與10#16_6#均代表10進位數值166。

2#1010_0110#代表2進位數值”10100110“其值恰為10進

位中的數值166。

16#A6#代表數值166的16進位表示法。

background image

24

字元類文字

字元類文字

字元類文字

字元類文字(Character 
Literals)

字元類的文字,係由一個字元,加
上2個單引號「'」而構成,:
‘A’, ‘0’, ‘Z’, ‘1’, ‘X’, …等等。

background image

25

列舉類文字

列舉類文字

列舉類文字

列舉類文字(Enumerated 
Literals)

列舉類文字,構成列舉式的資料型別
(Enumeration Type) ,其可由字元類文
字或識別字來構成,例如:

type ABC is (‘X’, ‘Y’, COW, ‘O’, ‘H’)

background image

26

字串類文字

字串類文字

字串類文字

字串類文字(String Literals)

字串類文字由一組字元,再加上2個雙引號而
構成「" . . . "」,如:

“ABCDEFG”

字串類文字可以分成2類,一為字元字串,如
上式所示。另一為位元字串(BIT String),位元
字串尚可在字串的一開頭加入一英文字母B(二
進位,Binary)、O(八進位)、或X(十六進位)來代
表其所代表的基底,如:

B“1010”;O”123”;X”A5DF”;

background image

27

識別字

識別字

識別字

識別字(Identifiers)運算元

運算元

運算元

運算元

識別字用來使常數(Constants)、變數
(Variables)、訊號(Signals)、單體
(Entity)、輸出入埠訊號(Ports),...等資
料物件,拿來當作表示式中的運算元使
用。

signal A: bit;
signal B: bit;
variable X,Y: bit;
. . . . .
A <= X nand B;
Y := (A or B) and X;

background image

28

陣列

陣列

陣列

陣列(Array)運算元

運算元

運算元

運算元

在VHDL程式中,經常使用陣列資料型別,來
表示巨集式的訊號或變數。如資料匯流排、位
址匯流排、RAM、ROM資料...等。

宣告為陣列資料型別的訊號可以使用陣列指標的方式
(Indexed Names),來指出該陣列資料中的某一個元素
(Element),其表示法如下所述: 

識別字(表示式); 

亦可以使用片段抽取的方式(Slice Names),來指示出
某一個區段內的陣列資料,其表示法如下: 

識別字(表示式1 to 表示式2);

識別字(表示式2 downto 表示式1);

background image

29

陣列運算元

陣列運算元

陣列運算元

陣列運算元表示式

表示式

表示式

表示式

在IEEE的標準VHDL電路設計語言,對於陣列資料的片段式抽取,有其所

規定的語法。下列的規則是用來說明VHDL電路設計語言中不合法的陣列

片段式表示式。

片段資料指標,所指示的區域,必須是有意義的。如:

signal A: bit_vector( 0 to 7);

則A(5 to 3),因為指示的範圍錯誤(5大於3),所以不合法。

又如A(5 to 9),則因為超出了訊號A所定義的範圍,所以亦是不合法的。

片段資料指標所指示的方向,必須與宣告時之資料型別同一方向。如:

signal A: bit_vector( 0 to 7);signal B: bit_vector( 5 downto 0);

則A(2 downto 0)及B(l to 4)都是因為指示指標表示式的方向與宣告的不符

合。所以都是不合法的陣列片段式表示法。

片段資料指標表示式,必須是可計算的(Computable)的表示式。如:

variable I: integer range 0 to 3;

則A(I to I+1),是不合法的表示法。。

background image

30

聚集式

聚集式

聚集式

聚集式(Aggregate)表示法

表示法

表示法

表示法

1

位置對應式之使用語法:

資料型別名稱’(表示式1, 表示式2, ...,表示式
n)

名稱對應式之使用語法:

資料型別名稱’(選擇式 => 表示式,

選擇式 => 表示式,

. . . . . 

選擇式 => 表示式);

其中的選擇式可以是陣列中元素的指標、指

標範圍或是保留字「others」。

background image

31

聚集式

聚集式

聚集式

聚集式(Aggregate)表示法

表示法

表示法

表示法

2

在同一個資料型別的聚集式表示法上,
位置對應式與名稱對應式,可以同時混
合存在同一行指令中。但名稱對應式的
表示法,一定要排放在位置表示法之
後。

使用聚集式表示式之陣列資料型別,其
範圍及維數必須是限制的
(Constrained)。

background image

32

定質化

定質化

定質化

定質化(Qualified)表示式

表示式

表示式

表示式

當一個VHDL電路設計語言程式中的表示式,其所定義

的資料型別發生定義不清楚時,就需要使用定質化的

表示式,來確切地指定該表示式所表示的資料型別。

為了明確表示運算式或表示式的資料型別,於是引進

了定質化的(Qualified)表示式,其語法如下: 

資料型別名稱’(表示式)

版權說明: 檔案資源由用戶上傳,僅供學習交流使用,尊重著作權。 若您認為內容涉及侵權,請點擊「侵權舉報」提交相關資料,我們將儘快核實並處理。