版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 E D A 技 術(shù) 與 應(yīng) 用 第第10章章 VerilogVerilog狀態(tài)機(jī)狀態(tài)機(jī) 設(shè)計(jì)技術(shù)設(shè)計(jì)技術(shù) 1章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.1 Verilog狀態(tài)機(jī)的一般形式狀態(tài)機(jī)的一般形式 廣義而論,只要涉及觸發(fā)器的電路,無論電路大小,都廣義而論,只要涉及觸發(fā)器的電路,無論電路大小,都 能歸結(jié)為狀態(tài)機(jī)。能歸結(jié)為狀態(tài)機(jī)。 有限狀態(tài)機(jī)用來有限狀態(tài)機(jī)用來實(shí)現(xiàn)一個(gè)數(shù)字電路的控制部分實(shí)現(xiàn)一個(gè)數(shù)字電路的控制部分。與。與CPU 的功能類似,綜合了時(shí)序邏輯和組合邏輯電路的功能類似,綜合了時(shí)序邏輯和組合邏輯電路。 CPU是通過操作指令和硬件操作單元來實(shí)現(xiàn)控制功能,是通過操作指令和硬件操作單元
2、來實(shí)現(xiàn)控制功能, 而有限狀態(tài)機(jī)是而有限狀態(tài)機(jī)是通過狀態(tài)轉(zhuǎn)移來實(shí)現(xiàn)控制功能通過狀態(tài)轉(zhuǎn)移來實(shí)現(xiàn)控制功能。 綜合器能從不同表述形態(tài)的綜合器能從不同表述形態(tài)的HDL代碼中輕易萃取出狀態(tài)代碼中輕易萃取出狀態(tài) 機(jī),并加以多側(cè)面、多目標(biāo)和多種形式的優(yōu)化。機(jī),并加以多側(cè)面、多目標(biāo)和多種形式的優(yōu)化。 2章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.1.1 狀態(tài)機(jī)的特點(diǎn)與優(yōu)勢狀態(tài)機(jī)的特點(diǎn)與優(yōu)勢 面對同一個(gè)設(shè)計(jì)項(xiàng)目的不同形式的邏輯設(shè)計(jì)方案中,利用有面對同一個(gè)設(shè)計(jì)項(xiàng)目的不同形式的邏輯設(shè)計(jì)方案中,利用有 限狀態(tài)機(jī)的設(shè)計(jì)方案來描述和實(shí)現(xiàn)將可能是最佳選擇。限狀態(tài)機(jī)的設(shè)計(jì)方案來描述和實(shí)現(xiàn)將可能是最佳選擇。 有限狀態(tài)機(jī)的優(yōu)越
3、性有限狀態(tài)機(jī)的優(yōu)越性: (1)高效的順序控制模型)高效的順序控制模型 (2)容易利用現(xiàn)成的)容易利用現(xiàn)成的EDA工具進(jìn)行優(yōu)化設(shè)計(jì)工具進(jìn)行優(yōu)化設(shè)計(jì) (3)性能穩(wěn)定)性能穩(wěn)定 (4)高速性能)高速性能 (5)高可靠性能)高可靠性能 3章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.1.2 狀態(tài)機(jī)的一般結(jié)構(gòu)狀態(tài)機(jī)的一般結(jié)構(gòu) 用用Verilog設(shè)計(jì)的狀態(tài)機(jī)根據(jù)不同的設(shè)計(jì)的狀態(tài)機(jī)根據(jù)不同的分類分類標(biāo)準(zhǔn)可以分為多種不標(biāo)準(zhǔn)可以分為多種不 同形式:同形式: 從狀態(tài)機(jī)的信號輸出方式上分:從狀態(tài)機(jī)的信號輸出方式上分:Mealy型型和和Moore型型狀態(tài)機(jī)狀態(tài)機(jī) 從狀態(tài)機(jī)的結(jié)構(gòu)描述上分:從狀態(tài)機(jī)的結(jié)構(gòu)描述上分:單過
4、程單過程狀態(tài)機(jī)和狀態(tài)機(jī)和多過程多過程狀態(tài)機(jī)狀態(tài)機(jī) 從狀態(tài)表達(dá)方式上分:從狀態(tài)表達(dá)方式上分:符號化符號化狀態(tài)機(jī)和狀態(tài)機(jī)和確定狀態(tài)編碼確定狀態(tài)編碼的狀的狀 態(tài)機(jī)態(tài)機(jī) 從狀態(tài)機(jī)編碼方式上分:從狀態(tài)機(jī)編碼方式上分:順序編碼順序編碼、一位熱編碼一位熱編碼或或其他編其他編 碼方式碼方式狀態(tài)機(jī)狀態(tài)機(jī) 最一般和最常用的狀態(tài)機(jī)結(jié)構(gòu)中通常包含了最一般和最常用的狀態(tài)機(jī)結(jié)構(gòu)中通常包含了說明部分說明部分、主控主控 時(shí)序過程時(shí)序過程、主控組合過程主控組合過程、輔助過程輔助過程等幾個(gè)部分等幾個(gè)部分 4章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 說明部分說明部分中包含狀態(tài)轉(zhuǎn)換變量的定義和所有可能狀態(tài)的說明,中包含狀態(tài)轉(zhuǎn)換變量的
5、定義和所有可能狀態(tài)的說明, 必要時(shí)還要確定每一狀態(tài)的編碼形式,最好是純抽象的符號必要時(shí)還要確定每一狀態(tài)的編碼形式,最好是純抽象的符號 化狀態(tài)機(jī),即所定義的狀態(tài)序列和狀態(tài)轉(zhuǎn)換變量都不涉及具化狀態(tài)機(jī),即所定義的狀態(tài)序列和狀態(tài)轉(zhuǎn)換變量都不涉及具 體的數(shù)值、編碼,甚至數(shù)據(jù)類型或變量類型。體的數(shù)值、編碼,甚至數(shù)據(jù)類型或變量類型。 1、狀態(tài)機(jī)說明部分、狀態(tài)機(jī)說明部分 parameter2: 0 s0=0, s1=1, s2=2 , s3=3, s4=4; reg 2: 0 current_state, next_state; 狀態(tài)元素狀態(tài)元素s0、s1等用關(guān)鍵詞等用關(guān)鍵詞parameter來定義,各狀態(tài)元
6、素來定義,各狀態(tài)元素 所取得數(shù)值或編碼必須寫出具體值。所取得數(shù)值或編碼必須寫出具體值。 parameter旁的位寬說明可寫可不寫旁的位寬說明可寫可不寫 current_state是是現(xiàn)態(tài)變量現(xiàn)態(tài)變量和和next_state是次態(tài)變量是次態(tài)變量 5章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 2005版本的版本的System Verilog 1、狀態(tài)機(jī)說明部分、狀態(tài)機(jī)說明部分 typedef enum s0, s1, s2, s3, s4 type_user; type_user current_state, next_state; typedef是用戶數(shù)據(jù)類型自定義語句關(guān)鍵詞是用戶數(shù)據(jù)類型自定義語
7、句關(guān)鍵詞 enum是定義枚舉類型關(guān)鍵詞是定義枚舉類型關(guān)鍵詞 type_user是用戶定義狀態(tài)元素是用戶定義狀態(tài)元素s0、s1、s2、s3、s4為為 type_user類型的標(biāo)識符類型的標(biāo)識符 第二第二句將狀態(tài)變量句將狀態(tài)變量current_state、next_state定義為定義為 type_user類型類型 6章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 2、主控時(shí)序過程、主控時(shí)序過程 主控時(shí)序過程主控時(shí)序過程指負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動下負(fù)責(zé)狀態(tài)指負(fù)責(zé)狀態(tài)機(jī)運(yùn)轉(zhuǎn)和在時(shí)鐘驅(qū)動下負(fù)責(zé)狀態(tài) 轉(zhuǎn)換的過程。轉(zhuǎn)換的過程。 狀態(tài)機(jī)是隨外部時(shí)鐘信號,以同步時(shí)序方式工作的,狀態(tài)狀態(tài)機(jī)是隨外部時(shí)鐘信號,以同步時(shí)
8、序方式工作的,狀態(tài) 機(jī)中必須包含一個(gè)機(jī)中必須包含一個(gè)對工作時(shí)鐘敏感對工作時(shí)鐘敏感的過程,狀態(tài)機(jī)向下一的過程,狀態(tài)機(jī)向下一 狀態(tài)轉(zhuǎn)換的實(shí)現(xiàn)僅取決于時(shí)鐘信號的到來。狀態(tài)轉(zhuǎn)換的實(shí)現(xiàn)僅取決于時(shí)鐘信號的到來。 當(dāng)時(shí)鐘的有效跳變到來時(shí),時(shí)序過程只是當(dāng)時(shí)鐘的有效跳變到來時(shí),時(shí)序過程只是機(jī)械地將代表次機(jī)械地將代表次 態(tài)的信號態(tài)的信號next_state中的內(nèi)容送入現(xiàn)態(tài)的信號中的內(nèi)容送入現(xiàn)態(tài)的信號current_state 中中,而信號,而信號next_state中的內(nèi)容完全由其他過程根據(jù)實(shí)際情中的內(nèi)容完全由其他過程根據(jù)實(shí)際情 況來決定。況來決定。 此時(shí)序過程中也可放置一些同步或異步清此時(shí)序過程中也可放置一些同
9、步或異步清0或置位方面的控或置位方面的控 制信號。制信號。 7章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 3、主控組合過程、主控組合過程 主控組合過程主控組合過程根據(jù)當(dāng)前狀態(tài)和外部的信號發(fā)出控制信號,根據(jù)當(dāng)前狀態(tài)和外部的信號發(fā)出控制信號, 同時(shí)確定下一狀態(tài)的走向。同時(shí)確定下一狀態(tài)的走向。 在時(shí)鐘的作用下,在時(shí)鐘的作用下,REG時(shí)序過程將次態(tài)信號的內(nèi)容時(shí)序過程將次態(tài)信號的內(nèi)容next_state傳遞傳遞 給現(xiàn)態(tài)信號給現(xiàn)態(tài)信號current_state COM組合過程通過信號組合過程通過信號current_state中的狀態(tài)值,進(jìn)入相應(yīng)的狀態(tài)中的狀態(tài)值,進(jìn)入相應(yīng)的狀態(tài); 在此狀態(tài)中根據(jù)外部的信號(如
10、在此狀態(tài)中根據(jù)外部的信號(如state_inputs)向內(nèi)或向外發(fā)出控制)向內(nèi)或向外發(fā)出控制 信號(如信號(如com_outputs);); 同時(shí)根據(jù)外部信號(如同時(shí)根據(jù)外部信號(如state_inputs)向次態(tài)信號)向次態(tài)信號next_state中賦相中賦相 應(yīng)的狀態(tài)值,確定下一狀態(tài)的走向;應(yīng)的狀態(tài)值,確定下一狀態(tài)的走向; 此狀態(tài)值通過此狀態(tài)值通過next_state傳給傳給REG時(shí)序過程,直到下一個(gè)時(shí)鐘脈沖時(shí)序過程,直到下一個(gè)時(shí)鐘脈沖 的到來。的到來。 8章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 4、輔助過程、輔助過程 輔助過程輔助過程用于配合狀態(tài)機(jī)工作的組合過程或時(shí)序過程。例用于配合狀
11、態(tài)機(jī)工作的組合過程或時(shí)序過程。例 如為了完成某種算法的過程,或?yàn)榱舜鎯?shù)據(jù)的存儲過程,如為了完成某種算法的過程,或?yàn)榱舜鎯?shù)據(jù)的存儲過程, 或用于配合狀態(tài)機(jī)工作的其他時(shí)序過程等?;蛴糜谂浜蠣顟B(tài)機(jī)工作的其他時(shí)序過程等。 例例10-1 module FSM_EXP (clk, reset, state_inputs, comb_outputs); input clk;/狀態(tài)機(jī)工作時(shí)鐘狀態(tài)機(jī)工作時(shí)鐘 input reset;/狀態(tài)機(jī)復(fù)位控制狀態(tài)機(jī)復(fù)位控制 input 0: 1 state_inputs;/來自外部的狀態(tài)機(jī)控制信號來自外部的狀態(tài)機(jī)控制信號 output 3: 0 comb_output
12、s;/狀態(tài)機(jī)對外部發(fā)出的控制信號輸出狀態(tài)機(jī)對外部發(fā)出的控制信號輸出 reg 3: 0 comb_outputs; parameter s0=0, s1=1, s2=2, s3=3, s4=4; /定義狀態(tài)參數(shù)定義狀態(tài)參數(shù) reg 4: 0 c_st, next_state; /定義現(xiàn)態(tài)和次態(tài)的狀態(tài)變量定義現(xiàn)態(tài)和次態(tài)的狀態(tài)變量 always (posedge clk or negedge reset) begin/主控時(shí)序過程主控時(shí)序過程 if (!reset) c_st=s0; /復(fù)位有效時(shí),下一狀態(tài)進(jìn)入初態(tài)復(fù)位有效時(shí),下一狀態(tài)進(jìn)入初態(tài)s0 else c_st=next_state; end
13、9章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-1-續(xù)續(xù) always (c_st or state_inputs) begin/主控組合過程主控組合過程 case (c_st) /為了在仿真波形中容易看清為了在仿真波形中容易看清,將將current_state簡寫為簡寫為c_st s0 : begin comb_outputs=5; /進(jìn)入狀態(tài)進(jìn)入狀態(tài)s0時(shí),輸出控制碼時(shí),輸出控制碼5 if (state_inputs=2b00) next_state=s0; /條件滿足條件滿足,回初態(tài)回初態(tài)s0 else next_state=s1; end/條件不滿足,到下一狀態(tài)條件不滿足,到下一
14、狀態(tài)s1 s1 : begin comb_outputs=8; /進(jìn)入狀態(tài)進(jìn)入狀態(tài)s1時(shí),輸出控制碼時(shí),輸出控制碼8 if (state_inputs=2b01) next_state=s1; else next_state=s2; end s2 : begin comb_outputs=12; if (state_inputs=2b10) next_state=s0; else next_state=s3; end s3 : begin comb_outputs=14; if (state_inputs=2b11) next_state=s3; else next_state=s4; end
15、 s4 : begin comb_outputs=9; next_state=s0; end default : next_state =s0; /現(xiàn)現(xiàn)態(tài)若未出現(xiàn)以上各態(tài),返回初態(tài)態(tài)若未出現(xiàn)以上各態(tài),返回初態(tài)s0 endcase end endmodule 10章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換圖 狀態(tài)機(jī)的工作時(shí)序狀態(tài)機(jī)的工作時(shí)序 間接了解狀態(tài)機(jī)間接了解狀態(tài)機(jī) 內(nèi)部運(yùn)行情況內(nèi)部運(yùn)行情況 利用利用它改變狀態(tài)它改變狀態(tài) 機(jī)變化模式和狀機(jī)變化模式和狀 態(tài)轉(zhuǎn)變態(tài)轉(zhuǎn)變方向方向 11章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.1.3 初始控制與表述初始控制與表
16、述 Verilog狀態(tài)機(jī)的相關(guān)設(shè)置控制:狀態(tài)機(jī)的相關(guān)設(shè)置控制: (1)打開打開“狀態(tài)機(jī)萃取狀態(tài)機(jī)萃取”開關(guān)開關(guān):AssignmentsSettings,在,在 category欄,選擇欄,選擇Analysis input 7: 0 D; /來自來自0809轉(zhuǎn)換好的轉(zhuǎn)換好的8位數(shù)據(jù)位數(shù)據(jù) input CLK, RST; /狀態(tài)狀態(tài)機(jī)工作時(shí)鐘和系統(tǒng)復(fù)位控制機(jī)工作時(shí)鐘和系統(tǒng)復(fù)位控制 input EOC; /轉(zhuǎn)換狀態(tài)指示,低電平表示正在轉(zhuǎn)換轉(zhuǎn)換狀態(tài)指示,低電平表示正在轉(zhuǎn)換 output ALE; /8個(gè)模擬信號通道地址鎖存信號個(gè)模擬信號通道地址鎖存信號 output START, OE; /轉(zhuǎn)換啟動信
17、號和數(shù)據(jù)輸出三態(tài)控制信號轉(zhuǎn)換啟動信號和數(shù)據(jù)輸出三態(tài)控制信號 output ADDA, LOCK_T; /信號通道控制信號和鎖存測試信號信號通道控制信號和鎖存測試信號 output 7:0 Q; reg ALE, START, OE; parameter s0=0, s1=1, s2=2, s3=3, s4=4; /定義各狀態(tài)子類型定義各狀態(tài)子類型 reg4: 0 cs, next_state; /為了便于仿真顯示,現(xiàn)態(tài)名簡寫為為了便于仿真顯示,現(xiàn)態(tài)名簡寫為cs reg7: 0 REGL; reg LOCK; /轉(zhuǎn)換后數(shù)據(jù)輸出鎖存時(shí)鐘信號轉(zhuǎn)換后數(shù)據(jù)輸出鎖存時(shí)鐘信號 always (cs or E
18、OC) begin /主控組合過程,規(guī)定各狀態(tài)轉(zhuǎn)換方式主控組合過程,規(guī)定各狀態(tài)轉(zhuǎn)換方式 case (cs) s0 : begin ALE=0; START=0; OE=0; LOCK=0; next_state=s1; end /0809初始化初始化 s1 : begin ALE=1; START=1; OE=0; LOCK=0; next_state=s2; end /啟動采樣信號啟動采樣信號START 17章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-2-續(xù)續(xù) :ADC0809采樣控制采樣控制 s2 : begin ALE=0; START=0; OE=0; LOCK=0; if (
19、EOC=1b1) next_state=s3;/EOC=0表明轉(zhuǎn)換結(jié)束表明轉(zhuǎn)換結(jié)束 else next_state=s2; end /轉(zhuǎn)換未結(jié)束,繼續(xù)等待轉(zhuǎn)換未結(jié)束,繼續(xù)等待 s3 : begin ALE=0; START=0; OE=1; LOCK=0;/開啟開啟OE,打開打開 AD數(shù)據(jù)口數(shù)據(jù)口 next_state=s4; end /下一狀態(tài)無條件轉(zhuǎn)向下一狀態(tài)無條件轉(zhuǎn)向s4 s4 : begin ALE=0;START=0;OE=1;LOCK=1;/開啟數(shù)據(jù)鎖存信號開啟數(shù)據(jù)鎖存信號 next_state=s0; end default : begin ALE=0; START=0; OE=
20、0; LOCK=0; next_state=s0; end endcase end always (posedge CLK or posedge RST) begin/時(shí)序過程時(shí)序過程 if (RST) cs=s0; else cs=next_state; end always (posedge LOCK) if (LOCK) REGL=D;/在在LOCK上升沿上升沿 將轉(zhuǎn)換好的數(shù)據(jù)鎖入將轉(zhuǎn)換好的數(shù)據(jù)鎖入 assign ADDA=0; assign Q=REGL; /選擇模擬信號進(jìn)入通道選擇模擬信號進(jìn)入通道IN0 assign LOCK_T=LOCK; /將測試信號輸出將測試信號輸出 endm
21、odule 18章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 采樣狀態(tài)機(jī)采樣狀態(tài)機(jī) 結(jié)構(gòu)框圖結(jié)構(gòu)框圖 程序中包含三個(gè)過程結(jié)構(gòu):程序中包含三個(gè)過程結(jié)構(gòu): 時(shí)序過程時(shí)序過程REG:在:在CLK的驅(qū)動下,不斷將的驅(qū)動下,不斷將next_state中的內(nèi)容(狀態(tài)中的內(nèi)容(狀態(tài) 元素)賦給現(xiàn)態(tài)元素)賦給現(xiàn)態(tài)cs,并由此信號將,并由此信號將狀態(tài)狀態(tài)變量傳輸給變量傳輸給COM組合過程。組合過程。 組合過程組合過程COM:(1)狀態(tài)譯碼功能。根據(jù)從現(xiàn)態(tài)信號狀態(tài)譯碼功能。根據(jù)從現(xiàn)態(tài)信號cs中獲得的狀態(tài)中獲得的狀態(tài) 變量,以及來自變量,以及來自0809的狀態(tài)線信號的狀態(tài)線信號EOC,決定下一狀態(tài)的轉(zhuǎn)移方向,決定下一狀
22、態(tài)的轉(zhuǎn)移方向, 即次態(tài)的狀態(tài)變量。即次態(tài)的狀態(tài)變量。(2)采樣控制功能。根據(jù)采樣控制功能。根據(jù)cs中的狀態(tài)變量確定對中的狀態(tài)變量確定對 0809的控制信號的控制信號ALE、START、OE等輸出相應(yīng)控制信號,當(dāng)采樣結(jié)等輸出相應(yīng)控制信號,當(dāng)采樣結(jié) 束后還要通過束后還要通過LOCK向鎖存器過程向鎖存器過程LATCH發(fā)出鎖存信號。發(fā)出鎖存信號。 鎖存器輔助過程鎖存器輔助過程LATCH:將由:將由0809的的D7.0數(shù)據(jù)輸出口輸出的數(shù)據(jù)輸出口輸出的8位已位已 轉(zhuǎn)換好的數(shù)據(jù)鎖存起來。轉(zhuǎn)換好的數(shù)據(jù)鎖存起來。 19章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 ADC0809采樣狀態(tài)機(jī)工作時(shí)序采樣狀態(tài)機(jī)工作時(shí)序
23、狀態(tài)狀態(tài)s0:復(fù)位信號后即進(jìn)入狀態(tài):復(fù)位信號后即進(jìn)入狀態(tài)s0。 狀態(tài)狀態(tài)s1:第二個(gè)時(shí)鐘上升沿后,狀態(tài)機(jī)進(jìn)入狀態(tài):第二個(gè)時(shí)鐘上升沿后,狀態(tài)機(jī)進(jìn)入狀態(tài)s1(即(即cs=s1),), 由由START、ALE發(fā)出啟動采樣和地址選通的控制信號。發(fā)出啟動采樣和地址選通的控制信號。 狀態(tài)狀態(tài)s2:EOC由高電平變?yōu)榈碗娖?,由高電平變?yōu)榈碗娖剑?809的的8位數(shù)據(jù)輸出端呈現(xiàn)位數(shù)據(jù)輸出端呈現(xiàn) 高阻態(tài)高阻態(tài)“ZZ”。等待。等待CLK數(shù)個(gè)時(shí)鐘周期后,數(shù)個(gè)時(shí)鐘周期后,EOC變?yōu)楦唠娖?,變?yōu)楦唠娖剑?表示轉(zhuǎn)換結(jié)束。表示轉(zhuǎn)換結(jié)束。 狀態(tài)狀態(tài)s3:在此狀態(tài)的輸出允許:在此狀態(tài)的輸出允許OE被設(shè)置成高電平。此時(shí)被設(shè)置成高電
24、平。此時(shí)8089的的 數(shù)據(jù)輸出端數(shù)據(jù)輸出端D7.0即輸出已經(jīng)轉(zhuǎn)換好的數(shù)據(jù)即輸出已經(jīng)轉(zhuǎn)換好的數(shù)據(jù)5EH。 狀態(tài)狀態(tài)s4:LOCK_T發(fā)出一個(gè)脈沖,其上升沿立即將發(fā)出一個(gè)脈沖,其上升沿立即將D端口的端口的5E鎖鎖 入入Q和和REGL中。中。 由內(nèi)部由內(nèi)部 LOCK信信 號引出的號引出的 測試信號測試信號 激勵(lì)按激勵(lì)按 0809控制控制 時(shí)序人為時(shí)序人為 設(shè)定設(shè)定 20章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-3:修改后的:修改后的ADC0809采樣控制采樣控制 /將組合過程將組合過程COM拆分為兩個(gè)拆分為兩個(gè)部分部分 always (cs or EOC) begin/狀態(tài)譯碼和狀態(tài)轉(zhuǎn)換狀
25、態(tài)譯碼和狀態(tài)轉(zhuǎn)換 case (cs) s0 : next_state=s1; s1 : next_state=s2; s2 : if (EOC=1b1) next_state=s3; else next_state=s2; s3 : next_state=s4; s4 : next_state=s0; default : next_state=s0; endcase end always (cs or EOC) begin/對外控制信號輸出對外控制信號輸出 case (cs) s0 : begin ALE=0; START=0; OE=0; LOCK=0; end s1 : begin ALE
26、=1; START=1; OE=0; LOCK=0; end s2 : begin ALE=0; START=0; OE=0; LOCK=0; end s3 : begin ALE=0; START=0; OE=1; LOCK=0; end s4 : begin ALE=0; START=0; OE=1; LOCK=1; end default : begin ALE=0; START=0; OE=0; LOCK=0; end endcase end 21章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.2.2 序列檢測器及其狀態(tài)機(jī)設(shè)計(jì)序列檢測器及其狀態(tài)機(jī)設(shè)計(jì) 序列檢測器序列檢測器用于檢測一組或
27、多組由二進(jìn)制碼組成的脈沖序用于檢測一組或多組由二進(jìn)制碼組成的脈沖序 列信號,當(dāng)序列檢測器連續(xù)收到一組串行二進(jìn)制碼后,如列信號,當(dāng)序列檢測器連續(xù)收到一組串行二進(jìn)制碼后,如 果這組碼與檢測器中預(yù)先設(shè)置的碼相同,則輸出果這組碼與檢測器中預(yù)先設(shè)置的碼相同,則輸出1,否則輸,否則輸 出出0。 這種檢測的這種檢測的關(guān)鍵關(guān)鍵在于正確碼的收到必須是連續(xù)的,這就要在于正確碼的收到必須是連續(xù)的,這就要 求檢測器必須記住前一次正確碼及正確序列,直到連續(xù)的求檢測器必須記住前一次正確碼及正確序列,直到連續(xù)的 檢測中所收到的每一位碼都與預(yù)置數(shù)的對應(yīng)碼相同,任何檢測中所收到的每一位碼都與預(yù)置數(shù)的對應(yīng)碼相同,任何 一位不相等
28、都將回到初始狀態(tài)重新開始檢測。一位不相等都將回到初始狀態(tài)重新開始檢測。 22章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-4:8位序列數(shù)位序列數(shù)11010011的序列檢測器的序列檢測器 module SCHK (input CLK, DIN, RST, output SOUT); parameter s0=40, s1=41, s2=42, s3=43, s4=44, s5=45, s6=46, s7=47, s8=48;/設(shè)定設(shè)定9個(gè)狀態(tài)參數(shù)個(gè)狀態(tài)參數(shù) reg 8: 0 ST, NST; always (posedge CLK or posedge RST) begin if (RST
29、) ST=s0; else ST=NST; end always (ST or DIN) begin /11010011串行輸入,高位在前串行輸入,高位在前 case (ST) s0 : if (DIN=1b1) NST=s1; else NST=s0; s1 : if (DIN=1b1) NST=s2; else NST=s0; s2 : if (DIN=1b0) NST=s3; else NST=s0; s3 : if (DIN=1b1) NST=s4; else NST=s0; s4 : if (DIN=1b0) NST=s5; else NST=s0; s5 : if (DIN=1b0
30、) NST=s6; else NST=s0; s6 : if (DIN=1b1) NST=s7; else NST=s0; s7 : if (DIN=1b1) NST=s8; else NST=s0; s8 : if (DIN=1b0) NST=s3; else NST=s0; default : NST=s0; endcase end assign SOUT= (ST=s8); endmodule 測出的數(shù)據(jù)測出的數(shù)據(jù)110恰好與恰好與 原序列數(shù)的頭三位相同原序列數(shù)的頭三位相同 23章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.3 Mealy型狀態(tài)機(jī)設(shè)計(jì)型狀態(tài)機(jī)設(shè)計(jì) Mealy型狀態(tài)機(jī)型狀
31、態(tài)機(jī)與與Moore型狀態(tài)機(jī)相比,輸出變化要領(lǐng)型狀態(tài)機(jī)相比,輸出變化要領(lǐng) 先一個(gè)周期,即一旦輸入信號或狀態(tài)發(fā)生變化,輸出信先一個(gè)周期,即一旦輸入信號或狀態(tài)發(fā)生變化,輸出信 號即刻發(fā)生變化。號即刻發(fā)生變化。Mealy機(jī)與機(jī)與Moore機(jī)在設(shè)計(jì)上基本相機(jī)在設(shè)計(jì)上基本相 同,只是同,只是Mealy機(jī)的組合過程結(jié)構(gòu)中的輸出信號是當(dāng)前機(jī)的組合過程結(jié)構(gòu)中的輸出信號是當(dāng)前 狀態(tài)和當(dāng)前輸入的函數(shù)。狀態(tài)和當(dāng)前輸入的函數(shù)。 Mealy機(jī)將時(shí)序過程與組合過程混合,在同一個(gè)過程中機(jī)將時(shí)序過程與組合過程混合,在同一個(gè)過程中 決定主控狀態(tài)譯碼和主控時(shí)序,決定主控狀態(tài)譯碼和主控時(shí)序, 所以不需要用次態(tài)來傳所以不需要用次態(tài)來傳
32、 遞狀態(tài)。遞狀態(tài)。 24章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-5 :雙過程:雙過程Mealy機(jī)機(jī) module MEALY1 (input CLK, DIN1, DIN2, RST, output reg 4: 0 Q); reg 4: 0 PST; parameter st0=0, st1=1, st2=2, st3=3, st4=4; always (posedge CLK or posedge RST) begin : REG if (RST) PST=st0; else begin case (PST) st0 : if (DIN1=1b1) PST=st1; else
33、PST=st0; st1 : if (DIN1=1b1) PST=st2; else PST=st1; st2 : if (DIN1=1b1) PST=st3; else PST=st2; st3 : if (DIN1=1b1) PST=st4; else PST=st3; st4 : if (DIN1=1b0) PST=st0; else PST=st4; default : PST=st0; endcase end end Always (PST of DIN2) begin : COM/輸出控制信號的過程輸出控制信號的過程 case (PST) st0 : if (DIN2=1b1) Q
34、=5H10; else Q=5H0A; st1 : if (DIN2=1b0) Q=5H17; else Q=5H14; st2 : if (DIN2=1b1) Q=5H15; else Q=5H13; st3 : if (DIN2=1b0) Q=5H1B; else Q=5H09; st4 : if (DIN2=1b1) Q=5H1D; else Q=5H0D; default : Q=5b00000; endcase end endmodule 25章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 過程過程REG是時(shí)序與組合混合型過程,將狀態(tài)機(jī)的主控時(shí)序電是時(shí)序與組合混合型過程,將狀態(tài)機(jī)的主控時(shí)序
35、電 路和主控狀態(tài)譯碼電路同時(shí)用一個(gè)過程來表達(dá)。路和主控狀態(tài)譯碼電路同時(shí)用一個(gè)過程來表達(dá)。 過程過程COM負(fù)責(zé)根據(jù)狀態(tài)和輸入信號給出不同的對外控制信號負(fù)責(zé)根據(jù)狀態(tài)和輸入信號給出不同的對外控制信號 輸出。輸出。 雙過程雙過程Mealy機(jī)狀態(tài)圖機(jī)狀態(tài)圖 26章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 雙過程雙過程Mealy機(jī)仿真波形機(jī)仿真波形 PST是現(xiàn)態(tài)轉(zhuǎn)換情況,是現(xiàn)態(tài)轉(zhuǎn)換情況,DIN1控制各狀態(tài)控制各狀態(tài)的的轉(zhuǎn)換方式,轉(zhuǎn)換方式,DIN2控制對控制對 外控制信號碼的輸出:當(dāng)復(fù)位后,且外控制信號碼的輸出:當(dāng)復(fù)位后,且DIN1=0時(shí),一直處于時(shí),一直處于st0狀狀 態(tài),若此時(shí)態(tài),若此時(shí)DIN2=0,輸出
36、碼,輸出碼0AH;當(dāng);當(dāng)DIN1都為都為1時(shí),每一個(gè)時(shí)鐘時(shí),每一個(gè)時(shí)鐘 上升沿后,都轉(zhuǎn)入下一狀態(tài),直到狀態(tài)上升沿后,都轉(zhuǎn)入下一狀態(tài),直到狀態(tài)s4,同時(shí)根據(jù)每一個(gè)狀態(tài),同時(shí)根據(jù)每一個(gè)狀態(tài) 下的下的DIN2的值輸出相應(yīng)設(shè)定的控制碼,一直到的值輸出相應(yīng)設(shè)定的控制碼,一直到DIN1=0才回到初才回到初 始狀態(tài)始狀態(tài)s0。 輸出信號中存在毛刺,為了排除毛刺,可通過選擇可能的優(yōu)化設(shè)輸出信號中存在毛刺,為了排除毛刺,可通過選擇可能的優(yōu)化設(shè) 置,也可將輸出通過寄存器鎖存,濾除毛刺。置,也可將輸出通過寄存器鎖存,濾除毛刺。 毛刺毛刺 一旦輸入信號一旦輸入信號DIN2發(fā)生變化,發(fā)生變化,Q即刻發(fā)生變化(異步)即刻
37、發(fā)生變化(異步) 27章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-6 :單過程:單過程Mealy機(jī)機(jī) module MEALY2 (input CLK, DIN1, DIN2, RST, output reg 4: 0 Q); reg 4: 0 PST; parameter st0=0, st1=1, st2=2, st3=3, st4=4; always (posedge CLK or posedge RST) begin : REG if (RST) PST=st0; else begin case (PST) st0 : begin if (DIN2=1b1) Q=5H10; e
38、lse Q=5H0A; if (DIN1=1b1) PST=st1; else PST=st0; end st1 : begin if (DIN2=1b0) Q=5H17; else Q=5H14; if (DIN1=1b1) PST=st2; else PST=st1; end st2 : begin if (DIN2=1b1) Q=5H15; else Q=5H13; if (DIN1=1b1) PST=st3; else PST=st2; end st3 : begin if (DIN2=1b0) Q=5H1B; else Q=5H09; if (DIN1=1b1) PST=st4; e
39、lse PST=st3; end st4 : begin if (DIN2=1b1) Q=5H1D; else Q=5H0D; if (DIN1=1b0) PST=st0; else PST=st4; default : begin PST=st0; Q=5b00000; end endcase end end endmodule 28章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 單過程單過程Mealy機(jī)仿真波形機(jī)仿真波形 單過程單過程Mealy機(jī)狀態(tài)圖(與雙過程相同)機(jī)狀態(tài)圖(與雙過程相同) 輸入信號輸入信號DIN2發(fā)生變化,要等時(shí)鐘上升沿后發(fā)生變化,要等時(shí)鐘上升沿后Q才才發(fā)生變化(同步)發(fā)生變
40、化(同步) 29章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-7 :單過程序列檢測器:單過程序列檢測器Mealy機(jī)機(jī) module SCHK (input CLK, DIN, RST, output SOUT); parameter s0=0, s1=1, s2=2, s3=3, s4=4, s5=5, s6=6, s7=7, s8=8; reg 8: 0 ST; always (posedge CLK) begin SOUT=0; if (RST) ST=s0; else begin case (ST) s0 : if (DIN=1b1) ST=s1; else ST=s0; s1 :
41、 if (DIN=1b1) ST=s2; else ST=s0; s2 : if (DIN=1b0) ST=s3; else ST=s0; s3 : if (DIN=1b1) ST=s4; else ST=s0; s4 : if (DIN=1b0) ST=s5; else ST=s0; s5 : if (DIN=1b0) ST=s6; else ST=s0; s6 : if (DIN=1b1) ST=s7; else ST=s0; s7 : if (DIN=1b1) ST=s8; else ST=s0; s8 : begin SOUT=1; if (DIN=1b0) ST=s3; else S
42、T=s0; end default : ST=s0; endcase end end endmodule 30章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 單過程單過程序序列檢測器列檢測器Mealy機(jī)仿真波形機(jī)仿真波形 與雙過程序列檢測器與雙過程序列檢測器Moore機(jī)相比,單過程機(jī)相比,單過程Mealy機(jī)的仿真波形在機(jī)的仿真波形在 SOUT的輸出延遲了一個(gè)時(shí)鐘,這種延遲數(shù)據(jù)具有濾波作用。如的輸出延遲了一個(gè)時(shí)鐘,這種延遲數(shù)據(jù)具有濾波作用。如 果果SOUT是一個(gè)多位復(fù)雜算法的組合邏輯輸出,可能會有許多毛是一個(gè)多位復(fù)雜算法的組合邏輯輸出,可能會有許多毛 刺,引起不良后果,利用單過程刺,引起不良后果,利用
43、單過程Mealy機(jī)形式可以有所改善。機(jī)形式可以有所改善。 雙過程雙過程序序列檢測器列檢測器Moore機(jī)仿真波形機(jī)仿真波形 31章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.4 狀態(tài)機(jī)圖形編輯設(shè)計(jì)狀態(tài)機(jī)圖形編輯設(shè)計(jì) (1)打開狀態(tài)機(jī)圖形編輯窗打開狀態(tài)機(jī)圖形編輯窗:在:在Quartus II的工程管理窗的工程管理窗 中點(diǎn)擊中點(diǎn)擊FileNew,選擇狀態(tài)機(jī)文件,選擇狀態(tài)機(jī)文件State Machine File。 (2)打開狀態(tài)機(jī)圖形編輯窗后,在)打開狀態(tài)機(jī)圖形編輯窗后,在Quartus II的工程管理的工程管理 窗中點(diǎn)擊窗中點(diǎn)擊ToolsState MachineWizard。 32章節(jié)課堂 E
44、 D A 技 術(shù) 與 應(yīng) 用 (3)在)在State Machine Wizard最初的對話框中選擇生成一個(gè)最初的對話框中選擇生成一個(gè) 新狀態(tài)機(jī)新狀態(tài)機(jī)“Create a new state machine design”,然后在后,然后在后 面出來的框中分別選擇復(fù)位信號控制方式和有效方式,如異面出來的框中分別選擇復(fù)位信號控制方式和有效方式,如異 步和高電平有效:步和高電平有效:Asynchronous和和active-high。 33章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 (4)在狀態(tài)機(jī)編輯器對話框中設(shè)置)在狀態(tài)機(jī)編輯器對話框中設(shè)置狀態(tài)元素狀態(tài)元素、輸入輸出信號輸入輸出信號、 狀態(tài)轉(zhuǎn)換條件
45、狀態(tài)轉(zhuǎn)換條件等。等。 狀態(tài)元素狀態(tài)元素輸入信號輸入信號 轉(zhuǎn)換狀態(tài)條件轉(zhuǎn)換狀態(tài)條件 輸出信號輸出信號 不同狀態(tài)對應(yīng)的不同狀態(tài)對應(yīng)的 輸出信號的值輸出信號的值 34章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 (5)完成后存盤,文件后綴是)完成后存盤,文件后綴是.smf。可以從狀態(tài)機(jī)圖形編輯??梢詮臓顟B(tài)機(jī)圖形編輯 器上看到轉(zhuǎn)換圖形,還可以利用左側(cè)的工具進(jìn)行一些修改補(bǔ)器上看到轉(zhuǎn)換圖形,還可以利用左側(cè)的工具進(jìn)行一些修改補(bǔ) 充。將這個(gè)圖形狀態(tài)機(jī)存盤后,可以以此文件作為工程進(jìn)行充。將這個(gè)圖形狀態(tài)機(jī)存盤后,可以以此文件作為工程進(jìn)行 設(shè)計(jì)。設(shè)計(jì)。 狀態(tài)轉(zhuǎn)換圖形狀態(tài)轉(zhuǎn)換圖形 35章節(jié)課堂 E D A 技 術(shù) 與 應(yīng)
46、 用 (6)也可以將這個(gè)圖形狀態(tài)機(jī)文件轉(zhuǎn)變成)也可以將這個(gè)圖形狀態(tài)機(jī)文件轉(zhuǎn)變成HDL代碼文件。選代碼文件。選 擇擇ToolsGenerate HDL File(HDL文件控制項(xiàng)),在打開的文件控制項(xiàng)),在打開的 窗口中,選擇需要轉(zhuǎn)變的硬件描述語言項(xiàng),包括窗口中,選擇需要轉(zhuǎn)變的硬件描述語言項(xiàng),包括VHDL、 Verilog HDL或或System Verilog。 36章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.5 不同編碼類型狀態(tài)機(jī)不同編碼類型狀態(tài)機(jī) 用用文字符號文字符號定義各狀態(tài)元素的狀態(tài)機(jī)稱為定義各狀態(tài)元素的狀態(tài)機(jī)稱為符號化狀態(tài)機(jī)符號化狀態(tài)機(jī), 其狀態(tài)元素的具體編碼由其狀態(tài)元素的具體編
47、碼由Verilog狀態(tài)機(jī)的綜合器根據(jù)預(yù)設(shè)狀態(tài)機(jī)的綜合器根據(jù)預(yù)設(shè) 的約束來確定。的約束來確定。 可直接將各狀態(tài)用可直接將各狀態(tài)用具體的二進(jìn)制數(shù)具體的二進(jìn)制數(shù)來定義,不使用文字符來定義,不使用文字符 號,這種編碼方式稱為號,這種編碼方式稱為直接編碼方式直接編碼方式。 37章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.5.1 直接輸出型編碼直接輸出型編碼 最典型的應(yīng)用實(shí)例就是計(jì)數(shù)器。計(jì)數(shù)器本質(zhì)上是一個(gè)主控時(shí)最典型的應(yīng)用實(shí)例就是計(jì)數(shù)器。計(jì)數(shù)器本質(zhì)上是一個(gè)主控時(shí) 序過程與一個(gè)主控組合過程合二為一的狀態(tài)機(jī),計(jì)數(shù)輸出就序過程與一個(gè)主控組合過程合二為一的狀態(tài)機(jī),計(jì)數(shù)輸出就 是各狀態(tài)的狀態(tài)碼。是各狀態(tài)的狀態(tài)碼
48、。 決定了計(jì)數(shù)進(jìn)決定了計(jì)數(shù)進(jìn) 制數(shù)(或膜制數(shù)(或膜n) 計(jì)數(shù)輸出是計(jì)數(shù)輸出是 此狀態(tài)機(jī)狀此狀態(tài)機(jī)狀 態(tài)碼輸出態(tài)碼輸出 若為異步清若為異步清0, 則計(jì)數(shù)器是模則計(jì)數(shù)器是模 m計(jì)數(shù)器,若計(jì)數(shù)器,若 為同步清為同步清0, 則計(jì)數(shù)器是模則計(jì)數(shù)器是模 m+1計(jì)數(shù)器計(jì)數(shù)器 38章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 狀態(tài)碼直接輸出型狀態(tài)機(jī)狀態(tài)碼直接輸出型狀態(tài)機(jī):將狀態(tài)編碼直接輸出作為控制信:將狀態(tài)編碼直接輸出作為控制信 號,即號,即output=state,要求各狀態(tài)的編碼作特殊的安排,以適,要求各狀態(tài)的編碼作特殊的安排,以適 應(yīng)控制對象的要求。應(yīng)控制對象的要求。 狀狀 態(tài)態(tài) 狀態(tài)編碼狀態(tài)編碼 STAR
49、T AL E OELOCKB功能說明功能說明 s000000初始態(tài)初始態(tài) s111000啟動轉(zhuǎn)換啟動轉(zhuǎn)換 s200001 若測得若測得EOC=1時(shí),轉(zhuǎn)下時(shí),轉(zhuǎn)下 一狀態(tài)一狀態(tài)ST3 s300100輸出轉(zhuǎn)換好的數(shù)據(jù)輸出轉(zhuǎn)換好的數(shù)據(jù) s400110 利用利用LOCK的上升沿江的上升沿江 轉(zhuǎn)換好的數(shù)據(jù)鎖存轉(zhuǎn)換好的數(shù)據(jù)鎖存 控制控制ADC0809采樣狀態(tài)機(jī)的狀態(tài)編碼表采樣狀態(tài)機(jī)的狀態(tài)編碼表 39章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-8 :ADC0809采樣控制(狀態(tài)碼直接輸出型)采樣控制(狀態(tài)碼直接輸出型) module ADC0809 (D, CLK, ECO, RST, ALE, S
50、TART, OE, ADDA, Q, LOCK_T); input 7: 0 D; input CLK, RST, EOC; output START, OE, ALE, ADDA, LOCK_T; output 7: 0 Q; parameter s0=5B00000, s1=5B11000, s2=5B00001, s3=5B00100, s4=5B00110; reg 4: 0 cs, SOUT, next_state; reg7: 0 REGL; reg LOCK; always (cs or EOC) begin case (cs) s0 : begin next_state=s1;
51、 SOUT=s0; end s1 : begin next_state=s2; SOUT=s1; end s2 : begin SOUT=s2; if (EOC=1b1) next_state=s3; else next_state=s2; end s3 : begin SOUT=s3; next_state=s4; end s4 : begin SOUT=s4; next_state=s0; end default : begin next_state=s0; SOUT=s0; end endcase end always (posedge CLK or posedge RST) begin
52、 /時(shí)序過程時(shí)序過程 if (RST) cs=s0; else cs=next_state; end always (posedge SOUT1) /寄存器過程寄存器過程 if (SOUT1) REGAL=D; assign ADDA=0; assign Q=REGL; assign LOCK_T=SOUT1; assign OE=SOUT2; assign ALE=SOUT3; assign START=SOUT4; endmodule 40章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 狀態(tài)機(jī)工作時(shí)序狀態(tài)機(jī)工作時(shí)序 狀態(tài)碼直接輸出型狀態(tài)機(jī)的優(yōu)點(diǎn)狀態(tài)碼直接輸出型狀態(tài)機(jī)的優(yōu)點(diǎn):輸出速度快,不大可能出
53、:輸出速度快,不大可能出 現(xiàn)毛刺現(xiàn)象(因?yàn)榭刂戚敵鲂盘栔苯觼碜詷?gòu)成狀態(tài)編碼的觸現(xiàn)毛刺現(xiàn)象(因?yàn)榭刂戚敵鲂盘栔苯觼碜詷?gòu)成狀態(tài)編碼的觸 發(fā)器)。發(fā)器)。 狀態(tài)碼直接輸出型狀態(tài)機(jī)狀態(tài)碼直接輸出型狀態(tài)機(jī)的缺點(diǎn)的缺點(diǎn):程序可讀性差,用于狀態(tài):程序可讀性差,用于狀態(tài) 譯碼的組合邏輯資源比其他以相同觸發(fā)器數(shù)量構(gòu)成的狀態(tài)要譯碼的組合邏輯資源比其他以相同觸發(fā)器數(shù)量構(gòu)成的狀態(tài)要 多,而且控制非法狀態(tài)出現(xiàn)的容錯(cuò)技術(shù)要求較高。多,而且控制非法狀態(tài)出現(xiàn)的容錯(cuò)技術(shù)要求較高。 41章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.5.2 用宏定義語句定義狀態(tài)編碼用宏定義語句定義狀態(tài)編碼 例例10-9 :ADC0809采樣控制
54、(宏替換語句采樣控制(宏替換語句define定定 義狀態(tài)元素)義狀態(tài)元素) define s0 5B00000 define s1 5B11000 define s2 5B00001 define s3 5B00100 define s4 5B00110 module ADC0809 (D, CLK, ECO, RST, ALE, START, OE, ADDA, Q, LOCK_T); input 7: 0 D; input CLK, RST, EOC; output START, OE, ALE, ADDA, LOCK_T; output 7: 0 Q; reg 4: 0 cs, SOUT
55、, next_state; reg7: 0 REGL; reg LOCK; always (cs or EOC) begin case (cs) s0 : begin next_state=s1; SOUT=s0; end s1 : begin next_state=s2; SOUT=s1; end s2 : begin SOUT=s2; if (EOC=1b1) next_state=s3; else next_state=s2; end s3 : begin SOUT=s3; next_state=s4; end s4 : begin SOUT=s4; next_state=s0; end
56、 default : begin next_state=s0; SOUT=s0; end endcase end 42章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.5.2 用宏定義語句定義狀態(tài)編碼用宏定義語句定義狀態(tài)編碼 例例10-9 -續(xù)續(xù):ADC0809采樣控制(宏替換語句采樣控制(宏替換語句 define定義狀態(tài)元素)定義狀態(tài)元素) always (posedge CLK or posedge RST) begin /時(shí)序過程時(shí)序過程 if (RST) cs=s0; else cs=next_state; end always (posedge SOUT1) /寄存器過程寄存器過程 i
57、f (SOUT1) REGAL=D; assign ADDA=0; assign Q=REGL; assign LOCK_T=SOUT1; assign OE=SOUT2; assign ALE=SOUT3; assign START=SOUT4; endmodule 用用define或或parameter來定義狀態(tài)元素的編碼的來定義狀態(tài)元素的編碼的區(qū)別區(qū)別是:是: define定義可以針對整個(gè)設(shè)計(jì)定義可以針對整個(gè)設(shè)計(jì)全局全局,它定義的可以是全局,它定義的可以是全局 符號常量,可以在各個(gè)不同的模塊中通用,這時(shí)定義語句符號常量,可以在各個(gè)不同的模塊中通用,這時(shí)定義語句 必須放在模塊語句必須放在模
58、塊語句module外外;也可以針對;也可以針對局部局部,放在,放在 module中中。 parameter定義在某個(gè)模塊定義在某個(gè)模塊module中中,只有,只有局部局部特征。特征。 43章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 例例10-8 采用采用 parameter來定義狀來定義狀 態(tài)元素的仿真波形態(tài)元素的仿真波形 例例10-9 采用采用define來定來定 義狀態(tài)元素的仿真波形義狀態(tài)元素的仿真波形 在狀態(tài)機(jī)仿真波在狀態(tài)機(jī)仿真波 形中直接看到各形中直接看到各 狀態(tài)的編碼狀態(tài)的編碼 44章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.5.3 宏定義命令語句宏定義命令語句 宏定義命令語句宏定
59、義命令語句define屬于編譯指示語句,不參與綜合,屬于編譯指示語句,不參與綜合, 只是在綜合前做一些數(shù)據(jù)控制操作。只是在綜合前做一些數(shù)據(jù)控制操作。 通過通過define語句的定義,可以用簡單的名稱或稱為宏名的語句的定義,可以用簡單的名稱或稱為宏名的 標(biāo)識符來替代一個(gè)復(fù)雜的名字,或字符串,或表達(dá)式等。標(biāo)識符來替代一個(gè)復(fù)雜的名字,或字符串,或表達(dá)式等。 define 宏名宏名 (標(biāo)識符)(標(biāo)識符) 宏內(nèi)容宏內(nèi)容 (字符串)(字符串) define屬于編譯預(yù)處理命令語句。在編譯預(yù)處理時(shí),把程屬于編譯預(yù)處理命令語句。在編譯預(yù)處理時(shí),把程 序中在該定義以后的所有同名宏名或標(biāo)識符的內(nèi)容都換成序中在該定義
60、以后的所有同名宏名或標(biāo)識符的內(nèi)容都換成 定義中指定的宏內(nèi)容。定義中指定的宏內(nèi)容。 define s A+B+C+D assign DOUT=s+E assign DOUT=A+B+C+D+E 45章節(jié)課堂 E D A 技 術(shù) 與 應(yīng) 用 10.5.3 宏定義命令語句宏定義命令語句 采用宏定義的采用宏定義的好處好處是,簡化了程序的書寫,便于程序修改。是,簡化了程序的書寫,便于程序修改。 在在define具體應(yīng)用上還應(yīng)具體應(yīng)用上還應(yīng)注意注意 (1)宏定義語句行末尾不加分號。)宏定義語句行末尾不加分號。 (2)在程序中引用已定義的宏名時(shí),必須在定義了宏名的標(biāo))在程序中引用已定義的宏名時(shí),必須在定義了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年智能汽車項(xiàng)目申請報(bào)告模板
- 白色鋁格柵施工方案
- 白條豬冷庫課程設(shè)計(jì)
- 病險(xiǎn)水閘保障措施方案
- 病人個(gè)案研究研究報(bào)告
- 班組hse活動方案
- 玻璃墻廣告招商方案
- 愛自然語言處理課程設(shè)計(jì)
- 泵站自動化課程設(shè)計(jì)
- 商業(yè)銀行旺季營銷開門紅
- 2024版《保密法》培訓(xùn)課件
- 企業(yè)的所得稅自查報(bào)告5篇
- 2024-2030年輸液架行業(yè)市場現(xiàn)狀供需分析及重點(diǎn)企業(yè)投資評估規(guī)劃分析研究報(bào)告
- ??谑袊量臻g總體規(guī)劃(2020-2035)(公眾版)
- 備戰(zhàn)2024年高考英語考試易錯(cuò)點(diǎn)25 語法填空:無提示詞之連詞(4大陷阱)(解析版)
- 安徽省淮南市2023-2024學(xué)年高一上學(xué)期第二次月考數(shù)學(xué)試題
- 產(chǎn)科疼痛管理制度及流程
- 橋本甲狀腺炎-90天治療方案
- 學(xué)校班主任培訓(xùn)制度
- MOOC 新時(shí)代中國特色社會主義理論與實(shí)踐-武漢理工大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論