VHDL电路设计语言中的属性
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章
VHDL電路設計語言中的屬性
屬性
1
VHDL電路設計語言中的屬性可應用在相當多的場合中,例如:用來偵測出訊號的邊緣變化(如時脈訊號的上升緣)、用來表示不限定邊界的陣列的維數與範圍、完成時序正確與否的驗証...等。
屬性種類:
數值類(Value Kind): 回應出一個數值。
函式類(Function Kind): 使用一個函式來回應出一個
數值。
訊號類(Signal Kind) :回應出一個訊號值。
型別類(Type Kind) :回應出一個資料型別值。
範圍類(Range Kind) :回應出一個範圍數值。
屬性
2
VHDL 電路設計語言中用來表示屬性的寫法為
使用單引號使用單引號「「'」來表示來表示。
「CLK'EVENT 」代表資料物件CLK(通常是訊
號或變數)發生數值變化時為「TRUE 」,如:「(CLK’EVENT and CLK=’1’)」代表CLK 發生變化且變化之後的數值為’1’,也就是發生上升緣變化的描述。
數值類(Value Kind)屬性
數值類屬性用來回應一個資料型別(Type),陣列(Array)或程式區塊(Block)的一些屬性參數。
數值類屬性參數,可以再細分成三類,分別為數值型別屬性(Value Type Attribute)、數值陣列屬性(Value Array Attribute)及數值區塊屬性(Value Block Attribute)。
Attribute)
1
數值型別屬性回應一個資料型別或次資料型別的上、下限數值,或是左、右限數值。
在VHDL電路設計語言中,共定義了四種數值型別屬性。
TYPE_NAME'HIGH: 用來回應資料型別TYPE_NAME的上限
值(Upper Bound)。
TYPE_NAME'LOW: 用來回應資料型別TYPE_NAME的下限
值(Lower Bound)。
TYPE_NAME'LEFT: 用來回應資料型別TYPE_NAME的左限
值(Left Bound)。
TYPE_NAME'RIGHT: 用來回應資料型別TYPE_NAME的右限
值(Right Bound)。
Attribute)
2
Attribute)
1
VHDL電路設計語言中所定義的數值陣列屬性只有一個,即「‘LENGTH」。
它的意義為回應一個指定陣列的長度。
ARRAY_NAME'LENGTH: 用來回應陣列ARRAY_NAME的長度。
ARRAY_NAME'LENGTH(i): 用來回應一個多維陣列ARRAY_NAME中的第i維陣列的長度。
Attribute)
2
數值區塊屬性(Value Block Attribute)
數值區塊屬性用來描述VHDL電路設計語言程式中的架構(Architecture)或區塊(Block)內所描述的電路的VHDL 電路設計語言描述風格(Description Style)。
BLK_NAME'BEHAVIOR
用來判斷BLK_NAME架構或區塊中的VHDL程式是否為電路行為式(Behavior)的VHDL電路描述風格,即在BLK_NAME 架構或區塊中是否全無元件啟動(Component Instantiation)的敘述。
若是則回應「TURE」,若否則回應「FALSE」。
BLK_NAME' STRUCTURE
用來判斷BLK_NAME架構或區塊中的VHDL 程式是否為電路結構式(Structure)的描述風格。
即在BLK_NAME架構或區塊中是否全是元件啟動的敘述,而無其他訊號設定或電路行為描述的敘述存在。
若是則回應「TURE」,若否則回應「FALSE」。
函式類屬性(Function Kind
Attributes)
函式類屬性使用函式呼叫的方式,以得到一個資料型別(Type)、訊號(Signal)及陣列(Array)的屬性參數。
函式類屬性可分為三類屬性。
函式型別屬性(Function Type Attribute): 用來回應一個資料型別的數值。
函式陣列屬性(Function Array Attribute): 用來回應一個陣列資料的上下限範圍。
函式訊號屬性(Function Signal Attribute): 用來回應一個
訊號的時序軌跡,也就是隨著時間的變化此訊號所變動的情形。
Attribute)
1
函式型別屬性用來回應一個資料型別的一些相關資訊。
Attribute)
2
在VHDL電路設計語言中共定義了下列六種函式型別屬性。
FT'POS(Value): 用來回應輸入Value值時的FT資料
型別的編排位置(Position)號碼。
FT'VAL(Value): 用來回應所輸入Value號碼之編排位置號碼的對應數值。
FT'SUCC(Value): 用來回應所輸入數值Value的該資
料型別內的下一個(Successor)數值。
FT'PRED(Value): 用來回應所輸入數值的該資料型
別內的前一個(Predecessor)數值。
FT'LEFTOF(Value): 用來回應所輸入數值Value的該
資料型別內的左邊一個(Left of)的數值。
FT'RIGHTOF (Value): 用來回應所輸入數值Value的
該資料型別內的右邊一個(Right of)的數值。
函式陣列屬性(Function Array Attribute)
1
函式陣列屬性用來回應出一個陣列資料型別的上、下限值。
當在描述硬體電路的功能行為時時,需要隨時知道一個陣列資料型別的維數或範團時,即可使用函式陣列屬性的方式來得出。
函式陣列屬性(Function Array Attribute)
2
A'LEFT(n): 用來回應出陣列A中的第n個指標中的左限值(Left Bound)。
若陣列A的維數為1時,則(n)可省
略,即使用A'LEFT。
A'RIGHT(n): 用來回應出陣列A中的第n個指標中的右限值(Right Bound)。
若陣列A的維數為1時,則(n)可省略,即使用A'RIGHT。
A'HIGH(n): 用來回應出陣列A中的第n個指標中的上限值(Upper Bound)。
若陣列A的維數為1時,則(n)可省略,即使用A'HIGH。
A'LOW(n): 用來回應出陣列A中的第n個指標中的下限值(Lower Bound)。
若陣列A的維數為1時,則(n)可省略,即使用A'LOW。
函式訊號屬性(Function Signal Attribute)
函式訊號屬性可用來回應一個訊號的行為資訊(Behavior Information)。
可以用來回報一個訊號是否有數值變化的情形,或是一個訊號發生變化後的前一數值為何?
函式訊號屬性—SIG'EVENT
SIG‘EVENT: 回應一個訊號SIG在系統模擬的極小的單位計算時間內是否變動(註:該系統模擬的極小的單位計算時間,通常又稱為δ時間或Delta時間,以下稱δ時間或Delta時間)。
若是,則回應Boolean資料型別中的TRUE。
若否,則回應Boolean資料型別中的FALSE。
函式訊號屬性SIG‘EVENT時常用來檢查訊號是否有邊緣觸發的情形。
用來檢查訊號CLK是否發生上升緣(Rising Edge)的變化。
用來檢查訊號CLK是否發生下降緣(Falling Edge)的變化。
函式訊號屬性—SIG'ACTIVE
回應一個訊號SIG在δ時間時是否發生數值的處理計算(Transactions)。
若是,則回應Boolean資料型別中的TRUE。
若否,則回應Boolean資料型別中的FALSE。
函式訊號屬性—
SIG'LAST_EVENT
用來回應一個訊號值在此δ時間時刻時的前一次發生數值變化到目前的時間。
可以使用在電路時序(Timing)的驗証上,例如: 建立時間(Setup time)檢查、保持時間(Hold Time)檢查、脈波寬度(Pulse Width)的檢查等。
建立時間(Setup Time)與保持時間(Hold Time)的時序說明圖。
函式訊號屬性—SIG'LAST VALUE
用來回應一個訊號值在前一次發生數值變化前的訊號數值(Signal Value)。
函式訊號屬性SIG'LAST_VALUE,可以用來配合SIG'EVENT屬性一起使用,以確保訊號是由'0'變化到’1’,或是由'1'變化到'0',而不是由其他的數值變化而來。
用來檢查訊號CLK是否發生由'0'到'1'的變化。
用來檢查訊號CLK是否發生由'1'到'0'的變化。
'ACTIVE v.s. 'EVENT
函式訊號屬性'ACTIVE 與'EVENT的差別乃是'ACTIVE是用來檢查訊號是否遭到處置(Transactions) ,而'EVENT是用來檢查訊號的數值是否發生變化。
訊號類屬性(Signal Kind Attributes)
訊號類屬性的使用,可以用來產生新的訊號,而其產生的法則係以該屬性的種類來決定。
這一類的訊號類屬性,可以像在VHDL電路設計語言程式中的任何訊號一般,其可以存在架構程式中的任何位置。
訊號類屬性的唯一限制在其不可使用於VHDL電路設計語言程式中的次程式(Subprograms)內,即函式
(Functions)或程序(Procedures)中。
在次程式中使用訊號類屬性的VHDL程式,會在編譯的階段,由編譯器檢查出來,並回報錯誤訊息。
訊號類屬性的主要用途可用來描述一個訊號延遲一段時間的訊號,在某一段時間內保持穩定的訊號...等
等。
訊號類屬性—
SIG'DELAYED(time)
用來製造一個訊號,其為訊號SIG延遲time時間所得之訊號。
訊號類屬性SIG‘DELAYED(time),常用來描述電路模型中的傳遞延遲(Propagation Delay),其用法與transport的傳遞延遲時間描述的使用方式相似。
但用SIG'DELAYED(time)的描述方式,可以省卻一些暫時性訊號的宣告,使得程式較為簡潔。
SIG'STABLE(time)
用來製造一個布林(Boolean)資料型別的訊號,其為判斷訊號SIG在time時間內的值是否保持穩定不變,即沒有數值變化的發生。
若是,則回應Boolean資料型別中的TRUE。
若否,則回應Boolean資料型別中的
FALSE。
SIG‘STABLE(time)屬性若省略掉時間參數time,則其所代表的意義與SIG’EVENT屬性相同,只是其布林代數值恰好相反。
訊號類屬性SIG'STABLE省去了時間參數值時,其意義與函式類屬性SIG'EVENT的意義相同。
SIG'QUIET(time)
用來製造一個布林(Boolean)資料型別的訊號,而其值係由判斷訊號SIG在time時間內是否保持安靜,即沒有訊號處置(transaction)發生。
若是,則回應Boolean資料型別中的TRUE。
若否,則回應Boolean資料型別中的FALSE。
訊號類屬性SIG'QUIET,係依據訊號SIG是否發生處置的情形(Transaction)來回報一個布林代數值,其與SIG'STABLE訊號屬性相似,只是SIG'STABLE(time)是判斷訊號SIG是否發生數值改變,而SIG'QUIET(time)是判斷訊號SIG是否發生處置的情形。
訊號類屬性—
SIG'TRANSACTION
用來製造一個位元(Bit)資料型別的訊號,而其數值將會隨著訊號SIG的處置(Transaction)或變化而反覆更換其值(toggle the value),即由「'0'→'1'」或由「'1'→'0'」。
訊號類屬性SIG'TRANSACTION同樣是判斷訊號SIG是否發生處置的情形,但其所回報的資料型別為位元(Bit)而不是布林代數。
型別類屬性(Type Kind Attributes)
TYPE_NAME'BASE,用來說明資料型別TYPE_NAME的基底型別為何。
範圍類屬性(Range Type Attributes)
ARRAY_TYPE’RANGE: 用來回應陣列資料型別的ARRAY_TYPE的範圍。
ARRAY_TYPE’REVERSE_RANGE: 用來回應陣列資料型別的ARRAY_TYPE的反向範圍。
使用者自訂屬性(User Defined Attribute)
VHDL電路設計語言亦提供使用者自訂屬性的功能,以便利設計者方便來使用VHDL電路設計語言所提供的屬性功能。
使用者所自訂的屬性,僅限於常數的資料物件上來使用,但其可為任意的資料型別。
在使用者自訂屬性的設定上,分成屬性名稱的宣告與屬性值的設定。
使用者自訂屬性的最主要應用在VHDL電路設計語言所描述的電路行為特性的注釋(Annotating)上。