VHDL語言中信號的不同形式設置_第1頁
VHDL語言中信號的不同形式設置_第2頁
VHDL語言中信號的不同形式設置_第3頁
VHDL語言中信號的不同形式設置_第4頁
VHDL語言中信號的不同形式設置_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

VHDL語言中信號的不同形式設置

摘要:通過一個偶同位產生器邏輯功能的實現過程,介紹了VHDL語言中信號設置的不同方式及注意事項,并給出了完整的程序代碼。關鍵詞:VHDL;程序1概述VHDL是一種快速的電路設計工具,功能涵蓋了電路描述、電路合成、電路仿真等三大電路設計工作。目前廣泛使用的軟件有Altera公司出品的MAX+PLUSII,Xinlinx公司的Foundation等。VHDL語言中有兩種基本的語句命令:并行同時語句命令以及順序語句命令。兩者之間最大的不同點是,并行同時語句命令就像是電路板的動作方式,不論幾個命令,是一次且同時執行,產生結果;順序語句命令類似一般的程序語言,如BASIC等的執行方式,是一次一個命令,且依書寫方式由上而下地執行。并行同時語句命令主要有以下幾種表達方式:直接設置語句(使用<=運算符)、條件式信號設置語句(When-Else)與選擇式信號設置語句(With-Select-When)等;順序語句命令主要有以下幾種表達方式:Process(過程)、If-Else(判斷比較)、WaitUntil(等待)、Case-Is-When(描述選擇)等。熟練而靈活地使用上述兩類命令,可以節省大量的工作量,使程序簡單直觀、可讀性增強而且有利于提高程序的編譯執行效率。在數據通信過程中,同位器與同位檢查器常用于數據糾錯。本文就以一個簡單偶同位產生器(EvenParityBitGenerator)真值表功能的實現方法來探討上述表達方式選擇問題,以及編程過程中的注意事項。2編程舉例例:試設計VHDL程序完成如表1偶同位器的真值表功能:輸入輸出S2S1S0Z00000011010101101011101111001110

分析:由真值表可以看出,所要實現的是一個由三個數據位、一個同位位組成的偶同位產生器功能。不難得出各位之間的簡單邏輯關系:P=S0S1S2。但是本文的主要目的在于通過此例闡述如何靈活運用不同的基本表達式設置信號,因此某些可能更加簡單的方法以及比較高級一點語句本文不予詳細討論。解:(注:VHDL語言中使用“--”作為注釋符號)libraryieee;①useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;ENTITYhfis--假設建立的芯片電路名稱以及保存后的文件名為“hf”;Port(

s:instd_logic_vector(2downto0);

z:outstd_logic--最后一個管腳定義命令后面,不可加分號;

);endhf;--應該保證電路單元名稱與存盤的文件名一致,否則編譯時出錯;ARCHITECTUREaOFhfISBegin--以上是本例題解答過程中的公共部分,其后分別接各解法語句。--******************************--解法1:使用“hen-Else”表達方式②z<=‘0’when(s="000")else--此語句只能將s的各個值分開寫,而不能寫成如下形式:0’when(s="011")else--z<=‘0’when(s="000"ors="011"ors="110"ors="111")0’when(s="110")else--else‘1’;‘0’when(s="111")else‘1’when(s="001")else‘1’when(s="001")else‘1’when(s="001")else‘1’;Enda;--解法2:使用揥ith-Select-When表達方式:WithsSelectz<=‘0’when"000",--注意:除了最后一句的語句結束標志是分號外,其余各句均是逗號;‘0’when"011",‘0’when"110",‘0’when"111",--when后選擇信號的值也只能分別列出,不可寫成組合條件形式。

‘1’whenothers;

Enda;--解法3:使用“If-Else”表達方式:Process--If-Else語句必須要與process配合使用;Begin--Process中此句必不可少,否則編譯時出錯;ifs="000"ors="011"ors="110"ors="111"then--If后若為組合條件可用括號也可不用;z<=‘0’;

else

z<=‘1’;

endif;

endprocess;

Enda;--解法4:使用“Case-Is-When”表達方式:Process--“Case-Is-When”也只能與“Process”配合使用;Begincasesiswhen"000"|"011"|"110"|"111"=>--此處不能將“|”改成“or”但可以像解法1或解法1或解法2那樣將不同信號值分開寫;whenothers=>--When句末尾是“=>”而不是逗號或者分號。z<=‘1’;

endcase;

endprocess;

Enda;備注:(1)VHDL語言對所有字母的大小寫狀態不敏感,關鍵在于語句要正確規范。(2)在VHDL語言中,所使用的標點符號均是英文標點符號。凡是設置單個的信號值均需使用單引號,而設置序列信號值必須使用雙引號。(3)請參看相關資料。3討論3.1本例能否使用“WaitUntil”表達方式很遺憾,類似此例的情況不能使用這個語句。起碼筆者經過多次嘗試之后均沒有通過編譯檢查。但是在使用此語句時應該注意以下事項:(1)WaitUntil后面緊接的語句中不能出現序列信號的值,例如不能寫成如下形式:WaitUntils="000"也不能寫成組合條件形式(無論是否使用括號):WaitUntils="000"ors="011"ors="110"ors="111"(2)使用此表達方式編寫程序代碼時,不能設定輸出引腳的初始值(通過第三方信號傳遞也不行,但是在進行仿真時可以設定初始輸出值),不能寫成如下形式:……s:instd_logic;……ArchitectureaofhfisBeginz<=0;--就算z的初、終值通過兩個常量信號(如c=‘0’,d=‘1’)傳遞Process--也不行,因為z不能規定兩個狀態。否則編譯時出錯;Beginwaituntils=‘0’;--此處也不可以寫成序列信號形式,更不能使用邏輯運算符將其z<=1;--寫成組合條件形式。WaitUntil語句不支持組合條件。Endprocess;

ENDa;3.2更簡單的實現方法順序語句除了前文所敘的幾種基本表達方式以外,還有一種循環語句:For-Loop;而并行同時語句也還有方塊語句(Block)、組件定義(Component)與組件映像(PortMap)等多個模塊化語法。而使用“For-Loop”編寫此類有重復動作需求的代碼無疑是最簡單直觀的:……

ArchitectureaOFhfIS

Begin

Process(s)

VariableTmp:Std_Logic;

Begin

Tmp:=‘0’;

ForIIn0to2Loop

Tmp:=TmpXORs(I);

EndLoop;

Z<=s&Tmp;

EndProcess;

Enda;其他更加簡單的方法,限于篇幅與本文主旨,在此就不予深究了。4結束語從以上不同解法可以看出,各種基本的表達方式均有各自的特點:采用“When-Else”表達式(解法1)與“When-Else-When”表達式(解法2)編寫編寫代碼的優點是直觀,但是代碼很多,欲實現復雜的功能時工作量將會很大;采用“IF-Else”表達式(解法4)編寫代碼的優點是直觀與簡單并舉,尤其是允許使用由邏輯運算符(And、Or等等)寫成的組合條件更是精簡了不少代碼。另外,在編寫VHDL程序的過程中,不同的表達式中,表示語句結束的符號是不同的,這一點在我們學習和使用VHDL的過程中值得特別

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論