2010-04-26
,离现在 15
年 182
天,建議確認內容是否仍然適用。第六章
第六章
第六章
第六章
VHDL電路設計語言中表示式
電路設計語言中表示式
電路設計語言中表示式
電路設計語言中表示式
2
表示式
表示式
表示式
表示式
VHDL電路設計語言中的表示式,係用來計算出
一個式子中的算術或邏輯數值。
在一個表示式中,通常包含有2種的組成元素,
一為運算元(Operand),另一為運算子
(Operator)。
在VHDL電路設計語言中,表示式的語法構成了
一個程式執行或計算的基本單元,使程式具有實
質計算上的意義。
3
運算子
運算子
運算子
運算子(Operator)
** abs not
其
他
* / mod rem
乘法運算子
+ -
單一運算子
+ - &
加法運算子
= /= < <= > >=
關係運算子
低
高
and or not nand nor xor xnor
邏輯運算子
優先順序
運 算
子
種
類
VHDL
電路設計語言中,所定義的標準運算子
4
關係運算子
關係運算子
關係運算子
關係運算子(Relational
Operators)
關係運算式所運算出來的結果,係為一個布林
型態的資料型別而存在,也就是只有二種狀態
TRUE或FALSE。關係運算子,通常使用在
VHDL電路設計語言中的條件判斷式上。
六種關係運算子。
「=」: 表示「等於」之比較。
「/=」: 表示「不等於」之比較。
「>」: 表示「大於」之比較。
「>=」: 表示「大於或等於,即不小於」之比較。
「<」: 表示「小於」之比較。
「<=」: 表示「小於或等於,即不大於」之比較。
5
邏輯運算子
邏輯運算子
邏輯運算子
邏輯運算子(Logical
Operators)
在VHDL電路設計語言中,使用邏輯運算子來表
示資料型別為BIT、BOOLEAN及STD_LOGIC的
訊號的邏輯運算關係。
邏輯運算子如下所示。
「and」: 用來表示「及」(And)的邏輯運算。
「or」: 用來表示「或」(Or)的邏輯運算。
「not」: 用來表示「非」(Not)的邏輯運算。
「nand」: 用來表示「反及」(Nand)的邏輯運算。
「nor」: 用來表示「反或」(Nor)的邏輯運算。
「xor」: 用來表示「互斥或」(Exclusive OR)的邏輯運算。
「xnor」: 用來表示「反互斥或」(Exclusive NOR)的邏輯運
算。
6
算術運算子
算術運算子
算術運算子
算術運算子(Arithmetic
Operators)
在VHDL電路設計語言中,使用算術運算子來表示各種資料
型別之間的相互算術運算。
VHDL電路設計語言所定義的算術運算子共有:加(‘+’)、減
(‘-’)、乘(‘*’)、除(‘/’)、次方(‘**’)、求餘數(‘rem’)等六種,但
大部份的VHDL電路合成器(Synthesizer)只支援加(‘+’)及減
(‘-’)兩種算術運算子的電路合成。
「
+」: 用來表示「加法」算術運算。
「-」: 用來表示「減法」算術運算。
「*」: 用來表示「乘法」算術運算。
「/」: 用來表示「除法」算術運算。
「**」: 用來表示「次方」算術運算。
「rem」: 用來表示「求餘數」算術運算。
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相似。
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編譯
器來說,都看成是忽略的。
9
運算元
運算元
運算元
運算元(Operand)
在一個VHDL電路設計語言的表示式中的運
算元提供數值或資料,以便運算子能藉此
數值加以運算。
10
表示式
表示式
表示式
表示式(Expressions)
用左右括弧「(」及「)」所括起來的表
示式,可以看成是另外一個表示式中的
運算元,如:
(A and B)(A /= “00000000”). . .。
11
文字
文字
文字
文字(Literals)
在VHDL電路設計語言中,文字(Literal)的代
表數值,直接代表了其在VHDL程式語言中
表示式的運算意義。如:
‘0’;“1010”;456;16#3F7#;. . .等。
12
識別字
識別字
識別字
識別字(Identifier)
用識別字來代表的運算元,主要是代表
著所宣告的訊號(Signal)、變 數(Variable)
及常數(Constant)。如:
MY_VAR;MY_CONST;MY_SIG;MY_ARRA
Y_SIG; . . .等。
13
指標式名稱
指標式名稱
指標式名稱
指標式名稱(Indexed Names)
此主要用來指出,在一個陣列物件中,
其內部的單一元素的資料內容。如:
MY_ARRAY_SIG(3);MY_ARRAY(5);MY_
RAM(19,168); . . .等。
14
片段式名稱
片段式名稱
片段式名稱
片段式名稱(Slice Names)
此主要用來指示出,在一個陣列
物件中,其內部片段的資料內
容。如:
MY_ARRAY_SIG(7 downto
4);MY_ARRAY(25 to
29);MY_RAM(1 to 6, 5 to
18); . . .等。
15
聚集式名稱
聚集式名稱
聚集式名稱
聚集式名稱(Aggregates)
此主要亦用來說明,在一個陣列資料型
別中,其內部資料的內容。如:
MY_ARRAY_TYPE’(others =>
‘0’);MY_ARRAY_SIG <= (others =>
‘0’); . . .等。
16
紀錄資料型別的
紀錄資料型別的
紀錄資料型別的
紀錄資料型別的Field
此主要用來說明,在一個紀錄資
料型別的Field中,其內部資料的
內容。如:
MY_RECORD.FIELD_A; . . .等。
17
屬性
屬性
屬性
屬性(Attributes)
此主要用來說明,在一個VHDL程式中屬
性資料的內容。如:
MY_SIG’EVENT;MY_VEC’LENGTH;. . .
等。
18
函式呼叫
函式呼叫
函式呼叫
函式呼叫(Function Call)
此主要用來說明,在一個VHDL程式中
所呼叫函式計算後所return的內容。如:
MY_FUNC(VAR1, VAR2, VAR3);. . .
等。
19
可計算的
可計算的
可計算的
可計算的(Computable)v.s.不可計
不可計
不可計
不可計
算的
算的
算的
算的(Non-Computable)運算元
運算元
運算元
運算元
若該運算元的數值或資料可以直接求得
的,即稱為可計算的運算元。
若該運算元的數值或資料,另需額外的
邏輯電路之處理才能得到。則稱為不可
計算的運算元。
20
可計算運算元
可計算運算元
可計算運算元
可計算運算元
文字數值(Literal Values)。
由一個可計算的表示式所指定數值的變數。
當LOOP的範圍是可計算時的「FOR . . . LOOP」參數。
「FOR . . . LOOP」的使用。
只含有可計算表示式的聚集式(Aggregates)運算元。
RETURN值為可計算的函式呼叫。
表示式中的所有運算元均為可計算的,而所構成之表示
式運算元。
NAND或AND運算子所構成的表示式中,其中的運算元
有一 個為'0'。
NOR或OR運算子所構成的表示式中,其中的運算元有一
個為’1’。
21
不可計算運算元
不可計算運算元
不可計算運算元
不可計算運算元
訊號(Signals)。
輸出入埠訊號(Ports)。
由不可計算的條件式,來決定變數的指定數
值,雖然該數值是 為可計算的。
由不可計算的數值,來指定給變數。
22
VHDL電路設計語言中的文字
電路設計語言中的文字
電路設計語言中的文字
電路設計語言中的文字
(Literals)
在VHDL中所定義的文字(Literals),其所代表之意義
是直接由字母來決定其數值。該文字所表示的數
值,主要是用來直接當作表示式中的運算元來使
用。
可以分成:
1.數值類文字(Numeric Literals)。
2.字元類文字(Character Literals)。
3.列舉類文字(Enumeration Literals)。
4.字串類文字(String Literals)。
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進位表示法。
24
字元類文字
字元類文字
字元類文字
字元類文字(Character
Literals)
字元類的文字,係由一個字元,加
上2個單引號「'」而構成,:
‘A’, ‘0’, ‘Z’, ‘1’, ‘X’, …等等。
25
列舉類文字
列舉類文字
列舉類文字
列舉類文字(Enumerated
Literals)
列舉類文字,構成列舉式的資料型別
(Enumeration Type) ,其可由字元類文
字或識別字來構成,例如:
type ABC is (‘X’, ‘Y’, COW, ‘O’, ‘H’)
26
字串類文字
字串類文字
字串類文字
字串類文字(String Literals)
字串類文字由一組字元,再加上2個雙引號而
構成「" . . . "」,如:
“ABCDEFG”
字串類文字可以分成2類,一為字元字串,如
上式所示。另一為位元字串(BIT String),位元
字串尚可在字串的一開頭加入一英文字母B(二
進位,Binary)、O(八進位)、或X(十六進位)來代
表其所代表的基底,如:
B“1010”;O”123”;X”A5DF”;
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;
28
陣列
陣列
陣列
陣列(Array)運算元
運算元
運算元
運算元
在VHDL程式中,經常使用陣列資料型別,來
表示巨集式的訊號或變數。如資料匯流排、位
址匯流排、RAM、ROM資料...等。
宣告為陣列資料型別的訊號可以使用陣列指標的方式
(Indexed Names),來指出該陣列資料中的某一個元素
(Element),其表示法如下所述:
識別字(表示式);
亦可以使用片段抽取的方式(Slice Names),來指示出
某一個區段內的陣列資料,其表示法如下:
識別字(表示式1 to 表示式2);
或
識別字(表示式2 downto 表示式1);
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),是不合法的表示法。。
30
聚集式
聚集式
聚集式
聚集式(Aggregate)表示法
表示法
表示法
表示法
1
位置對應式之使用語法:
資料型別名稱’(表示式1, 表示式2, ...,表示式
n)
名稱對應式之使用語法:
資料型別名稱’(選擇式 => 表示式,
選擇式 => 表示式,
. . . . .
選擇式 => 表示式);
其中的選擇式可以是陣列中元素的指標、指
標範圍或是保留字「others」。
31
聚集式
聚集式
聚集式
聚集式(Aggregate)表示法
表示法
表示法
表示法
2
在同一個資料型別的聚集式表示法上,
位置對應式與名稱對應式,可以同時混
合存在同一行指令中。但名稱對應式的
表示法,一定要排放在位置表示法之
後。
使用聚集式表示式之陣列資料型別,其
範圍及維數必須是限制的
(Constrained)。
32
定質化
定質化
定質化
定質化(Qualified)表示式
表示式
表示式
表示式
當一個VHDL電路設計語言程式中的表示式,其所定義
的資料型別發生定義不清楚時,就需要使用定質化的
表示式,來確切地指定該表示式所表示的資料型別。
為了明確表示運算式或表示式的資料型別,於是引進
了定質化的(Qualified)表示式,其語法如下:
資料型別名稱’(表示式)
「侵權舉報」
提交相關資料,我們將儘快核實並處理。