VHDL語(yǔ)言中信號的不同形式設置
end process;
End a;本文引用地址:http://dyxdggzs.com/article/150123.htm
備注:
(1) VHDL語(yǔ)言對所有字母的大小寫(xiě)狀態(tài)不敏感,關(guān)鍵在于語(yǔ)句要正確規范。
(2) 在VHDL語(yǔ)言中,所使用的標點(diǎn)符號均是英文標點(diǎn)符號。凡是設置單個(gè)的信號值均需使用 單引號,而設置序列信號值必須使用雙引號。
(3) 請參看相關(guān)資料。
3討論
3.1本例能否使用“Wait Until”表達方式
很遺憾,類(lèi)似此例的情況不能使用這個(gè)語(yǔ) 句。起碼筆者經(jīng)過(guò)多次嘗試之后均沒(méi)有通過(guò)編譯檢查。但是在使用此語(yǔ)句時(shí)應該注意以下事項:
(1) Wait Until 后面緊接的語(yǔ)句中不能出現序列信號的值,例如不能寫(xiě)成如下形式:
Wait Until s=000 也不能寫(xiě)成組合條件形式(無(wú)論是否使用括號):
Wait Until s=000 or s=011 or s=110 or s=111
(2) 使用此表達方式編寫(xiě)程序代碼時(shí),不能設定輸出引腳的初始值(通過(guò)第三方信號傳遞也不 行,但是在進(jìn)行仿真時(shí)可以設定初始輸出值),不能寫(xiě)成如下形式:
……
s: in std_logic;
……
Architecture a of hf is
Begin
z=0; --就算z的初、終值通過(guò)兩個(gè)常量信號(如c=‘0’,d=‘1 ’)傳遞
Process --也不行,因為z不能規定兩個(gè)狀態(tài)。否則編譯時(shí)出錯;
Begin
wait until s=‘0’; --此處也不可以寫(xiě)成序列信號形式,更不能使用邏輯運算符將其
z=1; --寫(xiě)成組合條件形式。Wait Until語(yǔ)句不支持組合條件。
End process;
END a;
3.2更簡(jiǎn)單的實(shí)現方法
順序語(yǔ)句除了前文所敘的幾種基本表達方式以 外,還有一種循環(huán)語(yǔ)句:For-Loop;而并行同時(shí)語(yǔ)句也還有方塊語(yǔ)句(Block)、組件定義(Component)與組件映像(Port Map)等多個(gè)模塊化語(yǔ)法。而使用“For-Loop”編寫(xiě)此類(lèi)有重復動(dòng)作需求的代碼無(wú)疑是最簡(jiǎn)單直觀(guān)的:
……
Architecture a OF hf IS
Begin
Process(s)
Variable Tmp: Std_Logic;
Begin
Tmp:=‘0’;
For I In 0 to 2 Loop
Tmp:=Tmp XOR s(I);
End Loop;
Z=s Tmp;
End Process;
End a;
其他更加簡(jiǎn)單的方法,限于篇幅與本文主 旨,在此就不予深究了。
4結束語(yǔ)
從以上不同解法可以看出,各種基本的表達
方式均有各自的特點(diǎn):采用“When -Else”表達式(解法1)與“When -Else-When”表達式(解法2)編寫(xiě)編寫(xiě)代碼的優(yōu)點(diǎn)是直觀(guān),但是代碼很多,欲實(shí)現復 雜的功能時(shí)工作量將會(huì )很大;采用“IF-Else”表達式(解法4)編寫(xiě)代碼的優(yōu)點(diǎn)是直觀(guān)與簡(jiǎn)單并舉,尤其是允許使用由邏輯運算符(And、Or等等)寫(xiě)成的組合條件更是精簡(jiǎn)了不少代碼。
另外,在編寫(xiě)VHDL程序的過(guò)程中,不同的 表達式中,表示語(yǔ)句結束的符號是不同的,這一點(diǎn)在 我們學(xué)習和使用VHDL的過(guò)程中值得特別留意。
參考文獻
[1]盧毅、賴(lài)杰.VHDL與數字電路設計.北京:科學(xué)出版社,2001-04
[2]李廣軍、孟憲元.可編程ASIC設計及應用.成都:電子科技大學(xué)出版社.2000-10
[3]徐志軍等.大規??删幊踢壿嬈骷捌鋺?成都:電子科技大學(xué)出版社.2000-11
何鋒 男,1979年出生,本科,研究方向為硬件描述語(yǔ)言設計,嵌入式系統開(kāi)發(fā)。
評論