第五講-狀態(tài)機(jī)設(shè)計及其指導(dǎo)原則_第1頁
第五講-狀態(tài)機(jī)設(shè)計及其指導(dǎo)原則_第2頁
第五講-狀態(tài)機(jī)設(shè)計及其指導(dǎo)原則_第3頁
第五講-狀態(tài)機(jī)設(shè)計及其指導(dǎo)原則_第4頁
第五講-狀態(tài)機(jī)設(shè)計及其指導(dǎo)原則_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第五講狀態(tài)機(jī)設(shè)計及其指導(dǎo)原則1狀態(tài)機(jī)是一種設(shè)計思想方法2

狀態(tài)機(jī)結(jié)構(gòu)3

狀態(tài)機(jī)設(shè)計的其他技巧4

狀態(tài)機(jī)設(shè)計步驟

狀態(tài)機(jī)是一種設(shè)計思想方法原語描述modulenoconditional(clk,nrst,state,event);input clk,nrstinputstate;outputevent;regevent;reg[2:0]CS;//CurrentStatereg[2:0]NS;//NextStateparameter[2:0]//onehotwithzeroidle

idle =3’b000,dorm =3'b001,

diningroom =3'b010,classroom =3'b100;//sequentialstatetransitionalways@(posedge

clkornegedge

nrst)if(!nrst)CS<=idle;elseCS<=NS;//combinationalconditionjudgmentalways@(CS)begin case(CS) idle: idle_task;NS=dorm; dorm: dorm_task;NS=diningroom;

diningroom:diningroom_task;NS=classroom; classroom: classroom_task;NS=dorm; default: idle_task;NS=dorm;

endcaseendendmodule狀態(tài)機(jī)的本質(zhì)--對具有邏輯順序或時序規(guī)律事件的一種描述方法

狀態(tài)機(jī)的兩個應(yīng)用思路:從狀態(tài)變量入手明確電路的輸出的關(guān)系

對于邏輯電路而言,小到一個簡單的時序邏輯,大到復(fù)雜的微處理器,都適合用狀態(tài)機(jī)方法進(jìn)行描述。不要僅僅局限于時序邏輯,發(fā)現(xiàn)電路的內(nèi)在規(guī)律,確認(rèn)電路的“狀態(tài)變量”,大膽使用狀態(tài)機(jī)描述電路模型。由于狀態(tài)機(jī)不僅僅是一種電路描述工具,它更是一種思想方法,而且狀態(tài)機(jī)的HDL語言表達(dá)方式比較規(guī)范,有章可循,所以很多有經(jīng)驗(yàn)的設(shè)計者習(xí)慣用狀態(tài)機(jī)思想進(jìn)行邏輯設(shè)計,對各種復(fù)雜設(shè)計都套用狀態(tài)機(jī)的設(shè)計理念,從而提高設(shè)計的效率和穩(wěn)定性。總結(jié):

狀態(tài)機(jī)結(jié)構(gòu)

摩爾(MOORE)狀態(tài)機(jī)

輸出只是當(dāng)前狀態(tài)值的函數(shù),并且僅在時鐘邊沿到來時才發(fā)生變化米立(MEALY)狀態(tài)機(jī)

輸出則是當(dāng)前狀態(tài)值、當(dāng)前輸出值和當(dāng)前輸入值的函數(shù)注:這兩種狀態(tài)機(jī)都是同步的時序電路Moore狀態(tài)機(jī)

下一個狀態(tài)=F(當(dāng)前狀態(tài),輸入信號);

輸出信號=G(當(dāng)前狀態(tài));狀態(tài)譯碼器

F輸出譯碼器

G狀態(tài)寄存器時鐘信號clk

clk

輸入輸入輸出當(dāng)前狀態(tài)激勵信號時序邏輯組合邏輯組合邏輯Mealy狀態(tài)機(jī)

下一個狀態(tài)=F(當(dāng)前狀態(tài),輸入信號);

輸出信號=G(當(dāng)前狀態(tài),輸入信號);狀態(tài)譯碼器

F輸出譯碼器

G狀態(tài)寄存器時鐘信號clk

clk

輸入輸入輸出當(dāng)前狀態(tài)激勵信號時序邏輯組合邏輯組合邏輯

帶流水線的Mealy狀態(tài)機(jī)

下一個狀態(tài)=F(當(dāng)前狀態(tài),輸入信號);

輸出信號=G(當(dāng)前狀態(tài),輸入信號);狀態(tài)譯碼器

F輸出譯碼器

G狀態(tài)寄存器時鐘信號clk

clk

輸入輸入當(dāng)前狀態(tài)激勵信號輸出流水線寄存器

clk

輸入時序邏輯組合邏輯組合邏輯時序邏輯基本要素——狀態(tài)、輸出和輸入

狀態(tài):也叫狀態(tài)變量。在邏輯設(shè)計中,使用狀態(tài)劃分邏輯順序和時序規(guī)律。比如設(shè)計偽隨機(jī)碼發(fā)生器時,可以用移位寄存器序列作為狀態(tài);在設(shè)計電機(jī)控制電路時,可以將電機(jī)的不同轉(zhuǎn)速作為狀態(tài);在設(shè)計通信系統(tǒng)時,可以將信令的狀態(tài)作為狀態(tài)變量等。

輸出:輸出指在某一個狀態(tài)時特定發(fā)生的事件。如設(shè)計電機(jī)控制電路時,如果電機(jī)轉(zhuǎn)速過高,則輸出為轉(zhuǎn)速過高報警,也可以伴隨減速指令或降溫措施等。

輸入:指狀態(tài)機(jī)中進(jìn)入每個狀態(tài)的條件,有的狀態(tài)機(jī)沒有輸入條件,其中的狀態(tài)轉(zhuǎn)移較為簡單,有的狀態(tài)機(jī)有輸入條件,當(dāng)某個輸入條件存在時才能轉(zhuǎn)移到相應(yīng)的狀態(tài)。組成部分

組合邏輯部分:分為狀態(tài)譯碼器和輸出譯碼器:狀態(tài)譯碼器確定狀態(tài)機(jī)的下一個狀態(tài),即確定狀態(tài)機(jī)的激勵方程;輸出譯碼器確定狀態(tài)機(jī)的輸出,即確定狀態(tài)機(jī)的輸出方程。

時序邏輯部分:用于存儲狀態(tài)機(jī)的內(nèi)部狀態(tài)基本操作

狀態(tài)機(jī)內(nèi)部狀態(tài)轉(zhuǎn)換:狀態(tài)機(jī)經(jīng)歷一系列狀態(tài),下一狀態(tài)由狀態(tài)譯碼器根據(jù)當(dāng)前狀態(tài)和輸入條件決定。

產(chǎn)生輸出信號序列:輸出信號由輸出譯碼器根據(jù)當(dāng)前狀態(tài)和輸入條件決定。

基本描述方式

狀態(tài)轉(zhuǎn)移圖是狀態(tài)機(jī)描述中最自然的方式。狀態(tài)轉(zhuǎn)移圖經(jīng)常在設(shè)計規(guī)劃階段定義邏輯功能時使用,也可以在分析已有源代碼中的狀態(tài)機(jī)時使用,這種圖形化的描述方式非常有助于理解設(shè)計意圖。

狀態(tài)轉(zhuǎn)移列表是用列表的方式描述狀態(tài)機(jī),是數(shù)字邏輯電路常用的設(shè)計方法之一,經(jīng)常被用于狀態(tài)化簡,對于可編程邏輯設(shè)計而言,由于可用邏輯資源比較豐富,而且狀態(tài)編碼要考慮設(shè)計的穩(wěn)定性、安全性等因素,所以并不經(jīng)常使用狀態(tài)轉(zhuǎn)移列表優(yōu)化狀態(tài)。

使用HDL語言描述狀態(tài)機(jī)應(yīng)具有一定的靈活性,但是決不是天馬行空,而是有章可循的.通過使用一些規(guī)范的描述方法,可以使HDL語言描述狀態(tài)機(jī)更安全、更穩(wěn)定、更高效、更易于維護(hù)。狀態(tài)機(jī)設(shè)計常用語法

變量聲明(wire,reg等)

狀態(tài)編碼一般都要使用reg

寄存器型向量。

parameter

描述狀態(tài)名稱,增強(qiáng)源代碼的可讀性,簡化描述。

例:

reg[3:0]NS,CS; parameter[3:0]//onehotwithzeroinitial IDLE 3'b0000, S1 3'b0001, S2 3'b0010, S3 3'b0100, ERROR3'b1000;

always——三種使用方法

根據(jù)主時鐘沿完成同步時序的狀態(tài)遷移。例: //sequentialstatetransition always@(posedge

clkornegedge

nrst) if(!nrst) CS<=IDLE; else CS<=NS;

根據(jù)信號敏感表完成組合邏輯的輸出。

根據(jù)時鐘沿完成同步時序邏輯的輸出。

case……endcase

語法格式: case(case_expression) case_item1:case_item_statement1; case_item2:case_item_statement2; case_item3:case_item_statement3; case_item4:case_item_statement4; default:case_item_statement5;

endcase

使用default關(guān)鍵字來描述FSM所需狀態(tài)的補(bǔ)集狀態(tài)下的操作,避免FSM進(jìn)入死循環(huán)。

建議初學(xué)者使用完整的case結(jié)構(gòu),而不使用casex

或casez。

task……endtask

將不同狀態(tài)所對應(yīng)的輸出用task……endtask

封裝,增強(qiáng)了代碼的可維護(hù)性和可讀性。 taskIDLE_out; begin {w_o1,w_o2,w_err}=3'b000; end

狀態(tài)機(jī)的描述方式

一段式

將整個狀態(tài)機(jī)寫到一個always模塊里面,在該模塊中即描述狀態(tài)轉(zhuǎn)移,又描述狀態(tài)的輸入和輸出。

兩段式

使用兩個always模塊,其中一個always模塊采用同步時序的方式描述狀態(tài)轉(zhuǎn)移,而另一個模塊采用組合邏輯的方式判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律。

三段式

使用3個always模塊,一個always模塊采用同步時序的方式描述狀態(tài)轉(zhuǎn)移,一個采用組合邏輯的方式判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律,第三個always模塊使用同步時序電路描述每個狀態(tài)的輸出。例一個非常典型的Melay型狀態(tài)機(jī),共有4種狀態(tài),即IDEL、S1、S2和ERROR,輸入信號包括時鐘“clk”,低電平異步復(fù)位信號“nrst”和信號“i1”、“i2”,輸出信號為“o1”、“o2”和“err”,狀態(tài)轉(zhuǎn)移圖如下。狀態(tài)的輸出如下:IDLE狀態(tài)的輸出為{o1,o2,err}=3'b000;S1狀態(tài)的輸出為{o1,o2,err}=3'b100;S2狀態(tài)的輸出為{o1,o2,err}=3'b010;ERROR狀態(tài)的輸出為{o1,o2,err}=3'b111。S1

RRORS2IDLEi2&!i1

!i2&!i1

i2&i1

i2&i1!i2&i1i1i2!i2!i1!i2&i1基本部分modulestate1(nrst,clk,i1,i2,o1,o2,err);inputnrst,clk;inputi1,i2;outputo1,o2,err;rego1,o2,err;reg[2:0]NS;//NextStateparameter[2:0]//onehotwithzeroidleIDLE=3'b000,S1=3'b001,S2=3'b010,ERROR=3'b100;一段式always@(posedge

clkornegedge

nrst)if(!nrst)beginNS<=IDLE;{o1,o2,err}<=3'b000;endelsebegincase(NS)IDLE:beginif(~i1)begin{o1,o2,err}<=3'b000;NS<=IDLE;endif(i1&&i2)begin{o1,o2,err}<=3'b100;NS<=S1;endif(i1&&~i2)begin{o1,o2,err}<=3'b111;NS<=ERROR;endendS1:beginif(~i2)begin{o1,o2,err}<=3'b100;NS<=S1;endif(i2&&i1)begin{o1,o2,err}<=3'b010;NS<=S2;endif(i2&&(~i1))begin{o1,o2,err}<=3'b111;NS<=ERROR;endendS2:beginif(i2)begin{o1,o2,err}<=3'b010;NS<=S2;endif(~i2&&i1)begin{o1,o2,err}<=3'b000;NS<=IDLE;endif(~i2&&(~i1))begin{o1,o2,err}<=3'b111;NS<=ERROR;endendERROR:beginif(i1)begin{o1,o2,err}<=3'b111;NS<=ERROR;endif(~i1)begin{o1,o2,err}<=3'b000;NS<=IDLE;endenddefault: begin{o1,o2,err}<=3'b000;NS<=IDLE;end

endcaseendendmodule兩段式//outputtasktaskIDLE_out;{o1,o2,err}=3'b000;endtasktaskS1_out;{o1,o2,err}=3'b100;endtasktaskS2_out;{o1,o2,err}=3'b010;endtasktaskERROR_out;{o1,o2,err}=3'b111;endtask//sequentialstatetransitionalways@(posedge

clkornegedge

nrst)if(!nrst)CS<=IDLE;elseCS<=NS;//combinationalconditionjudgmentalways@(CSori1ori2)begincase(CS)IDLE:begin

IDLE_out;if(~i1)NS=IDLE;if(i1&&i2)NS=S1;if(i1&&~i2)NS=ERROR;end S1:beginS1_out;if(~i2)NS=S1;if(i2&&i1)NS=S2;if(i2&&(~i1))NS=ERROR;endS2:beginS2_out;if(i2)NS=S2; if(~i2&&i1)NS=IDLE;if(~i2&&(~i1))NS=ERROR;endERROR:begin

ERROR_out;if(i1)NS=ERROR;if(~i1)NS=IDLE;end default:begin

IDLE_out;NS=IDLE; end

endcaseendendmodule三段式//1stalwaysblock,sequentialstatetransitionalways@(posedge

clkornegedge

nrst)if(!nrst)CS<=IDLE;elseCS<=NS;//2ndalwaysblock,combinationalconditionjudgmentalways@(CSori1ori2)begincase(CS)IDLE:beginif(~i1)NS=IDLE;if(i1&&i2)NS=S1;if(i1&&~i2)NS=ERROR;end S1:beginif(~i2)NS=S1;if(i2&&i1)NS=S2;if(i2&&(~i1))NS=ERROR;endS2:beginif(i2)NS=S2; if(~i2&&i1)NS=IDLE;if(~i2&&(~i1))NS=ERROR;endERROR:beginif(i1)NS=ERROR;if(~i1)NS=IDLE;end default:NS=IDLE;

endcaseend//3rdalwaysblock,thesequentialFSM

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論