第七、八講(1) VHDL語(yǔ)句-順序語(yǔ)句_第1頁(yè)
第七、八講(1) VHDL語(yǔ)句-順序語(yǔ)句_第2頁(yè)
第七、八講(1) VHDL語(yǔ)句-順序語(yǔ)句_第3頁(yè)
第七、八講(1) VHDL語(yǔ)句-順序語(yǔ)句_第4頁(yè)
第七、八講(1) VHDL語(yǔ)句-順序語(yǔ)句_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第七講(1) VHDL順序語(yǔ)句17.1 順序語(yǔ)句順序語(yǔ)句和并行語(yǔ)句是VHDL程序中的兩大基本描述語(yǔ)句系列;順序語(yǔ)句是相對(duì)于并行語(yǔ)句而言的;順序語(yǔ)句執(zhí)行順序(指仿真執(zhí)行)與書(shū)寫(xiě)順序基本一致。前面的執(zhí)行結(jié)果會(huì)直接影響后面各語(yǔ)句的執(zhí)行結(jié)果;順序語(yǔ)句結(jié)構(gòu)類似傳統(tǒng)的編程語(yǔ)言;賦值語(yǔ)句變量賦值語(yǔ)句和信號(hào)賦值語(yǔ)句流程控制語(yǔ)句If語(yǔ)句、case語(yǔ)句、loop語(yǔ)句、next語(yǔ)句、exit語(yǔ)句等待語(yǔ)句(wait)子程序調(diào)用語(yǔ)句過(guò)程調(diào)用、函數(shù)調(diào)用返回語(yǔ)句(return)空操作語(yǔ)句(null)VHDL具有六類基本順序語(yǔ)句一、賦值語(yǔ)句1. 將一個(gè)值或表達(dá)式的運(yùn)算結(jié)果傳遞給某一數(shù)據(jù)對(duì)象。如信號(hào)、變量或由信號(hào)、變量構(gòu)成的數(shù)

2、組。2. VHDL設(shè)計(jì)實(shí)體內(nèi)的數(shù)據(jù)傳遞以及對(duì)端口界面外部數(shù)據(jù)的讀寫(xiě)都必須通過(guò)賦值語(yǔ)句來(lái)實(shí)現(xiàn)。3. 兩種賦值語(yǔ)句:信號(hào)賦值語(yǔ)句和變量賦值語(yǔ)句 VHDL中所有對(duì)象均分為:變量和信號(hào) 變量賦值目標(biāo) := 賦值源; - 變量賦值,無(wú)延遲 信號(hào)賦值目標(biāo) = 賦值源; - 信號(hào)賦值,有延遲要求:表達(dá)式的值必須與目標(biāo)的類型、寬度一致。4. 賦值目標(biāo):標(biāo)識(shí)符、數(shù)組單元素、段下表元素、集合塊變量與信號(hào)的差異:1)賦值方式的不同: 變量:= 賦值源; 信號(hào)= 賦值源; 2)硬件實(shí)現(xiàn)的功能不同: 信號(hào)代表電路單元、功能模塊間的互聯(lián),代表實(shí)際的硬件連線; 變量代表電路單元內(nèi)部的操作,代表暫存的臨時(shí)數(shù)據(jù)。3)有效范圍的

3、不同: 信號(hào):程序包、實(shí)體、結(jié)構(gòu)體;-全局量。 變量:進(jìn)程、子程序;-局部量。SIGNAL Declarationslabel1: PROCESSVARIABLE Declarationslabel2: PROCESSVARIABLE Declarations4)賦值行為的不同: 信號(hào)賦值延遲更新數(shù)值、時(shí)序電路; 變量賦值立即更新數(shù)值、組合電路。5)信號(hào)的多次賦值 a. 一個(gè)進(jìn)程:最后一次賦值有效 b. 多個(gè)進(jìn)程: 多源驅(qū)動(dòng) 線與、線或、三態(tài)例:信號(hào)的多次賦值 architecture rtl of ex is signal a : std_logic;begin process() begi

4、n a = b; a = c; end process;end rtl;-后一個(gè)賦值語(yǔ)句有效architecture rtl of ex is signal a : std_logic;begin process() begin a = b; end process; process() begin a = c; . end process;end ex;例:信號(hào)賦值與變量賦值的比較 信號(hào)賦值: architecture rtl of sig is signal a, b : std_logic; - 定義信號(hào) begin process(a, b) begin a = b ; b = a ;

5、 end process ; end rtl ; - 結(jié)果是 a 和 b 的值互換 變量賦值: architecture rtl of var is begin process variable a, b : std_logic ; - 定義變量 begin a := b ; b := a ; end process ; end rtl ; - 結(jié)果是 a 和 b 的值都等于b 的初值二、流程控制語(yǔ)句流程控制語(yǔ)句通過(guò)條件控制開(kāi)關(guān)決定是否執(zhí)行一條或幾條語(yǔ)句,或重復(fù)執(zhí)行一條或幾條語(yǔ)句,或跳過(guò)一條或幾條語(yǔ)句。五種流程控制語(yǔ)句 If語(yǔ)句 Case語(yǔ)句 Loop語(yǔ)句 Next語(yǔ)句 Exit語(yǔ)句1、 if

6、 語(yǔ)句 if 語(yǔ)句是一種條件語(yǔ)句,它根據(jù)語(yǔ)句中所設(shè)置的一種或多種條件,有選擇地執(zhí)行指定的順序語(yǔ)句。有3種結(jié)構(gòu): 1)if 語(yǔ)句的門(mén)閂控制 例: if (ena = 1) then q = d; end if; 綜合后生成鎖存器(latch)if 條件 then 順序處理語(yǔ)句;end if ;條件改為時(shí)鐘沿,則生成 D觸發(fā)器:2)if 語(yǔ)句的2選1選擇控制 格式: 用條件來(lái)選擇兩條不同程序執(zhí)行的路徑。if 條件 then 順序處理語(yǔ)句;else 順序處理語(yǔ)句;end if ;此描述的典型電路是二選一電路: architecture rtl of mux2 is begin process(a,

7、b, sel) begin if (sel = 1) then y = a ; else y = b ; end if ; end process ; end rtl ;3)if 語(yǔ)句的多選擇控制 if 語(yǔ)句的多選擇控制又稱為 if 語(yǔ)句的嵌套。 格式: if 條件 then 順序處理語(yǔ)句;elsif 條件 then 順序處理語(yǔ)句; elsif 條件 then 順序處理語(yǔ)句;else 順序處理語(yǔ)句;end if; 通過(guò)else if設(shè)定了多個(gè)判斷條件,(或條件嵌套),當(dāng)滿足條件之一時(shí),就執(zhí)行條件后的順序處理語(yǔ)句;當(dāng)所設(shè)置的條件都不滿足時(shí),程序執(zhí)行else和end if之間的順序處理語(yǔ)句。典型電

8、路:多選一(四選一)電路。 if_then_elsif 語(yǔ)句中隱含了優(yōu)先級(jí)別的判斷,最先出現(xiàn)的條件優(yōu)先級(jí)最高,可用于設(shè)計(jì)具有優(yōu)先級(jí)的電路。如8-3優(yōu)先級(jí)編碼器。 library ieee;use ieee.std_logic_1164.all;entity coder is port(din: in std_logic_vector(7 downto 0); output: out std_logic_vector(2downto 0);end coder; architecture behav of coder issignal sint: std_logic_vector(4 downto

9、 0); begin process(dint) begin if dint (7)=0 then output=“000”; elsif dint ( 6)=0 then output=“001”; elsif dint ( 5)=0 then output=“010”; elsif dint ( 4)=0 then output=“011”; elsif dint ( 3)=0 then output=“100”; elsif dint ( 2)=0 then output=“101”; elsif dint ( 1)=0 then output=“110”; else output 順序

10、處理語(yǔ)句; when 選擇值 = 順序處理語(yǔ)句; . . . when 選擇值 = 順序處理語(yǔ)句; end case;其中的選擇值可有以下的形式1、單個(gè)普通數(shù)值:如:when 值 = 順序處理語(yǔ)句;2、數(shù)值選擇范圍:when 值 to 值 = 順序處理語(yǔ)句; 3、并列數(shù)值: when 值|值|值|值 = 順序處理語(yǔ)句;4、三種方式的混合; when others = 順序處理語(yǔ)句;Case 語(yǔ)句使用注意: 1)分支條件的值必須在表達(dá)式的取值范圍內(nèi)。 2)兩個(gè)分支條件不能重疊。 3)語(yǔ)句執(zhí)行時(shí)必須選中且只能選中 一個(gè)分支條件. 4)如果沒(méi)有 others 分支條件存在,則分支條件必須覆蓋表達(dá)式所

11、有可能的值。 對(duì)std_logc, std_logic_vector數(shù)據(jù)類型要特別注意使用others分支條件。例:用case 語(yǔ)句描述四選一電路【例7-1】:描述了一個(gè)4選1數(shù)據(jù)選擇器,用IF語(yǔ)句和Case語(yǔ)句共同完成。它可以根據(jù)4位輸入碼來(lái)確定4位輸出中哪一位輸出為1 library ieee; use ieee.std_logic_1164.all; entity mux41 is port(s4, s3, s2, s1 : in std_logic; z4, z3, z2, z1 : out std_logic); end mux41; architecture artive of m

12、ux41 is begin 注意此程序和書(shū)上程序的不同之處 process(s4, s3, s2, s1) variable sel : integer range 0 to 15; begin sel:=0; if s1=1 then sel:=sel+1; end if; if s2=1 then sel:=sel+2; end if; if s3=1 then sel:=sel+4; end if; if s4=1 then sel;:=sel+8; end if; z1=0; z2=0; z3=0; z4z1z2z3z4 out_1 out_1 out_1 out_1 10; end

13、loop L1; -當(dāng)a大于10時(shí)跳出循環(huán) 2)for loop 語(yǔ)句特點(diǎn): 循環(huán)變量是 loop 內(nèi)部自動(dòng)聲明的局部量,僅 在 loop 內(nèi)可見(jiàn),不必事先定義,只能做賦值源 循環(huán)次數(shù)范圍必須是可計(jì)算的整數(shù)范圍: 整數(shù)表達(dá)式 to 整數(shù)表達(dá)式 整數(shù)表達(dá)式 downto 整數(shù)表達(dá)式 標(biāo)號(hào):for 循環(huán)變量 in 循環(huán)次數(shù)范圍 loop 順序語(yǔ)句; end loop 標(biāo)號(hào);例:用 for loop 語(yǔ)句描述的8位奇偶校驗(yàn)電路-奇校驗(yàn)4、 Next 語(yǔ)句 在loop 語(yǔ)句中 next語(yǔ)句用來(lái)跳出本次循環(huán)。 格式: 分三種情況: 1) 無(wú)條件終止當(dāng)前的循環(huán),跳回到本次循環(huán) LOOP語(yǔ)句開(kāi)始處,開(kāi)始下次

14、循環(huán)。next 標(biāo)號(hào) when 條件表達(dá)式;next ; 2) 無(wú)條件終止當(dāng)前的循環(huán),跳轉(zhuǎn)到指定標(biāo)號(hào)的LOOP語(yǔ)句開(kāi)始處,重新開(kāi)始執(zhí)行循環(huán)操作。 3) 當(dāng)條件表達(dá)式的值為true,則執(zhí)行next語(yǔ)句,進(jìn)入跳轉(zhuǎn)操作,否則繼續(xù)向下執(zhí)行。next 標(biāo)號(hào) ; next 標(biāo)號(hào) when 條件表達(dá)式;5、 Exit 語(yǔ)句 exit 語(yǔ)句將結(jié)束循環(huán)狀態(tài)。格式: next語(yǔ)句與exit語(yǔ)句的格式與操作功能非常相似,區(qū)別是:next語(yǔ)句是跳向loop語(yǔ)句的起始點(diǎn),而exit語(yǔ)句則是跳向loop語(yǔ)句的終點(diǎn)。exit 標(biāo)號(hào) when 條件表達(dá)式;5、 wait 語(yǔ)句進(jìn)程在仿真時(shí)的兩個(gè)狀態(tài): 執(zhí)行或掛起。 進(jìn)程狀態(tài)的

15、變化受wait 語(yǔ)句或敏感信號(hào)量變化的控制。 可設(shè)置 4種不同的條件: wait - 無(wú)限等待 wait on - 敏感信號(hào)量變化 wait until - 條件滿足(可綜合) wait for - 時(shí)間到1)、wait on 語(yǔ)句 格式:例:以下兩種描述是完全等價(jià)的 敏感信號(hào)量列表和 wait 語(yǔ)句只能選其一,兩者不能同時(shí)使用。wait on 信號(hào),信號(hào);process(a, b) begin y= a and b;end process; processbegin y= a and b; wait on a, b; end process;2)、wait until 語(yǔ)句(可綜合) 格式:

16、 當(dāng)表達(dá)式的值為“真”時(shí),進(jìn)程被啟動(dòng),否則進(jìn)程被掛起。 wait until 語(yǔ)句的三種表達(dá)方式: wait until 信號(hào) = value; wait until 信號(hào)event and 信號(hào) = value; wait until not(信號(hào)stable) and 信號(hào) = value;wait until 表達(dá)式;時(shí)鐘信號(hào) clk 的上升沿的描述: wait until clk = 1; wait until rising_edge(clk); wait until clkevent and clk = 1; wait until not(clkstable) and clk = 1

17、;由以上描述可實(shí)現(xiàn)相同的硬件電路結(jié)構(gòu)。如何實(shí)現(xiàn)時(shí)鐘信號(hào)下降沿的描述?例:用wait until 語(yǔ)句描述時(shí)鐘沿,實(shí)現(xiàn)D觸發(fā)器 architecture rtl of d is begin process begin wait until clkevent and clk=1; q = d; end process; end rtl; 例:同步復(fù)位功能電路 process begin rst_loop: loop wait until clkevent and clk=1; if rst=1 then x=0; else x=a; end if; end loop rst_loop; end process;6、 return 語(yǔ)句 return 語(yǔ)句只能用于子程序中,并用來(lái)終止一個(gè)子程序的執(zhí)行。格式:分為:1)return ; 用于過(guò)程,只是結(jié)束過(guò)程,不返回任何值。 2)return 表達(dá)式;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論