VHDL語言中信號(hào)的不同形式設(shè)置_第1頁
VHDL語言中信號(hào)的不同形式設(shè)置_第2頁
VHDL語言中信號(hào)的不同形式設(shè)置_第3頁
VHDL語言中信號(hào)的不同形式設(shè)置_第4頁
VHDL語言中信號(hào)的不同形式設(shè)置_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

VHDL語言中信號(hào)的不同形式設(shè)置

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

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

s:instd_logic_vector(2downto0);

z:outstd_logic--最后一個(gè)管腳定義命令后面,不可加分號(hào);

);endhf;--應(yīng)該保證電路單元名稱與存盤的文件名一致,否則編譯時(shí)出錯(cuò);ARCHITECTUREaOFhfISBegin--以上是本例題解答過程中的公共部分,其后分別接各解法語句。--******************************--解法1:使用“hen-Else”表達(dá)方式②z<=‘0’when(s="000")else--此語句只能將s的各個(gè)值分開寫,而不能寫成如下形式: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表達(dá)方式:WithsSelectz<=‘0’when"000",--注意:除了最后一句的語句結(jié)束標(biāo)志是分號(hào)外,其余各句均是逗號(hào);‘0’when"011",‘0’when"110",‘0’when"111",--when后選擇信號(hào)的值也只能分別列出,不可寫成組合條件形式。

‘1’whenothers;

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

else

z<=‘1’;

endif;

endprocess;

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

endcase;

endprocess;

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

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

ArchitectureaOFhfIS

Begin

Process(s)

VariableTmp:Std_Logic;

Begin

Tmp:=‘0’;

ForIIn0to2Loop

Tmp:=TmpXORs(I);

EndLoop;

Z<=s&Tmp;

EndProcess;

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論