吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog設(shè)計過程中狀態(tài)機(jī)的設(shè)計方法

FPGA之家 ? 來源:時沿科技 ? 作者:NemoYxc ? 2021-06-25 11:04 ? 次閱讀

“本文主要分享了在Verilog設(shè)計過程中狀態(tài)機(jī)的一些設(shè)計方法。

關(guān)于狀態(tài)機(jī)

狀態(tài)機(jī)本質(zhì)是對具有邏輯順序或時序順序事件的一種描述方法,也就是說具有邏輯順序和時序規(guī)律的事情都適用狀態(tài)機(jī)描述。狀態(tài)機(jī)的基本要素有三個:狀態(tài)、輸出和輸入。

根據(jù)狀態(tài)機(jī)的輸出是否與輸入條件有關(guān),可將狀態(tài)機(jī)分為:

摩爾(Moore)型和米里(Mealy)型。

摩爾型狀態(tài)機(jī):輸出僅與當(dāng)前狀態(tài)有關(guān),而與輸入條件無關(guān)。

米里型狀態(tài)機(jī):輸出不僅依賴于當(dāng)前狀態(tài),還取決于輸入條件。

狀態(tài)機(jī)的邏輯通常用“case”語句或者“if-else”語句來描述,枚舉當(dāng)前狀態(tài)和輸入的所有可能組合,并為下一個狀態(tài)和輸出制定適當(dāng)?shù)闹怠?/p>

RTL級狀態(tài)機(jī)描述常用語法:

wire、reg;

parameter,用于描述狀態(tài)名稱,增強(qiáng)代碼可讀性;

always,根據(jù)主時鐘沿,完成同步時序的狀態(tài)遷移;根據(jù)信號敏感表,完成組合邏輯輸出。

case/endcase:其中default是可選的關(guān)鍵字,用于指明當(dāng)所列的所有條件都不匹配時的操作;一般的FSM設(shè)計都會加上default關(guān)鍵字描述FSM所需的補(bǔ)集狀態(tài)。

task/endtask。

幾種狀態(tài)機(jī)的描述方法

一段式FSM描述方法:一個always塊里面,即描述狀態(tài)轉(zhuǎn)移,又描述狀態(tài)的輸入和輸出。

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

三段式FSM描述方法:第一個always模塊采用同步時序描述狀態(tài)轉(zhuǎn)移;第二個采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律;第三個always模塊使用同步時序電路,描述每個狀態(tài)的輸出。

一段式:

reg [2:0] Next_State;//下一個狀態(tài) parameter IDLE = 3‘b000; parameter S1 = 3’b001; parameter S2 = 3‘b010; parameter CLEAR = 3’b100;

//--------------------------------------------------------------------------------//------ 在一個always中包含狀態(tài)、輸入和輸出。 always@(posedge clk or posedge rst) begin if(rst) begin Next_State 《= IDLE; out 《= 2‘b00; end else begin case(Next_State) IDLE : begin if(key_in == 1’b1) begin Next_State 《= S1; out 《= 2‘b01;

end else begin Next_State 《= IDLE; out 《= 2’b00; end end S1 : begin if(key_in == 1‘b1) begin Next_State 《= S2; out 《= 2’b10; end else begin Next_State 《= S1; out 《= 2‘b01;

end end S2 : begin if(key_in == 1’b1) begin Next_State 《= CLEAR; out 《= 2‘b11; end else begin Next_State 《= S2; out 《= 2’b10; end end CLEAR : begin if(key_in == 1‘b1) begin Next_State 《= IDLE; out 《= 2’b00;

end else begin Next_State 《= CLEAR; out 《= 2‘b11; end end endcase end end

兩段式:

reg [2:0] Next_State;//下一個狀態(tài) reg [2:0] Current_State;//當(dāng)前狀態(tài)

parameter IDLE = 3’b000; parameter S1 = 3‘b001; parameter S2 = 3’b010; parameter CLEAR = 3‘b100;

//-------------------------------------------------------------------------------- always@(posedge clk or posedge rst) begin if(rst) Current_State 《= IDLE; else Current_State 《= Next_State; end always@(*)

// always@(rst or Current_State or key_in) begin case(Current_State) IDLE : begin idle_out;// out = 2’b00; if(key_in == 1‘b1) Next_State = S1; else Next_State = IDLE; end S1 : begin s1_out;// out = 2’b01; if(key_in == 1‘b1) Next_State = S2; else Next_State = S1; end S2 : begin s2_out;// out = 2’b10; if(key_in == 1‘b1) Next_State = CLEAR; else Next_State = S2; end CLEAR : begin clear_out;

// out = 2’b11; if(key_in == 1‘b1) Next_State = IDLE; else Next_State = CLEAR; end endcase end

//-------------------------------------------------------------------------------- task idle_out; out = 2’b00; endtask task s1_out; out = 2‘b01; endtask

task s2_out; out = 2’b10; endtask

task clear_out; out = 2‘b11; endtask

三段式:

//-------------------------------------------------------------------------------- reg [2:0] Next_State;//下一個狀態(tài) reg [2:0] Current_State;//當(dāng)前狀態(tài) parameter IDLE = 3’b000; parameter S1 = 3‘b001; parameter S2 = 3’b010; parameter CLEAR = 3‘b100;

//-------------------------------------------------------------------------------- always@(posedge clk or posedge rst) begin if(rst) Current_State 《= IDLE; else Current_State 《= Next_State; end

//--------------------------------------------------------------------------------// always@(rst or Current_State or key_in) always@(*) begin case(Current_State) IDLE : begin if(key_in == 1’b1) Next_State = S1; else Next_State = IDLE; end S1 : begin if(key_in == 1‘b1) Next_State = S2; else Next_State = S1; end S2 : begin if(key_in == 1’b1) Next_State = CLEAR; else Next_State = S2; end CLEAR : begin if(key_in == 1‘b1) Next_State = IDLE; else Next_State = CLEAR; end endcase end

//-------------------------------------------------------------------------------- always@(posedge clk or posedge rst) begin if(rst) begin out 《= 2’b00; end else begin case(Next_State) IDLE : begin out 《= 2‘b00; end S1 : begin out 《= 2’b01; end S2 : begin out 《= 2‘b10; end CLEAR : begin out 《= 2’b11; end endcase end end

//--------------------------------------------------------------------------------

結(jié)論:

一段式狀態(tài)機(jī)比較適合在狀態(tài)較少的情況下使用,因為所有的狀態(tài)、輸入和輸出都在一起,可能不是很適合閱讀、理解、維護(hù);

二段式狀態(tài)機(jī)比一段式要容易理解,但是由于輸出是組合邏輯,容易存在不穩(wěn)定與毛刺隱患;

三段式狀態(tài)機(jī)比一段式更容易理解,用時序邏輯代替組合邏輯消除了不穩(wěn)定與毛刺的隱患,但是代碼量會稍微多一點(diǎn);

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110396
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    492

    瀏覽量

    27649

原文標(biāo)題:Verilog基礎(chǔ)知識學(xué)習(xí)筆記(四)

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    在測試過程中,如何防止電池擠壓試驗機(jī)的故障率?

    在測試過程中,防止電池擠壓試驗機(jī)故障率的關(guān)鍵在于設(shè)備的使用、維護(hù)和保養(yǎng)。以下是一些具體的方法和建議: 一、正確使用設(shè)備 熟悉操作規(guī)程 · 操作人員必須熟讀并理解電池擠壓試驗機(jī)的操作規(guī)程
    的頭像 發(fā)表于 01-10 08:55 ?80次閱讀
    在測試<b class='flag-5'>過程中</b>,如何防止電池擠壓試驗<b class='flag-5'>機(jī)</b>的故障率?

    錫膏印刷機(jī)印刷過程中有哪些不良及解決方法

    PCB制作工藝基本上都需要用到SMT工藝,因此在PCBA的加工工藝普遍用到錫膏印刷機(jī),在使用錫膏印刷機(jī)過程中有時候會遇到各種問題,這些不良應(yīng)該如何解決呢?下面深圳佳金源錫膏廠家給大
    的頭像 發(fā)表于 12-19 16:40 ?361次閱讀
    錫膏印刷<b class='flag-5'>機(jī)</b>印刷<b class='flag-5'>過程中</b>有哪些不良及解決<b class='flag-5'>方法</b>

    Verilog 測試平臺設(shè)計方法 Verilog FPGA開發(fā)指南

    Verilog測試平臺設(shè)計方法Verilog FPGA開發(fā)的重要環(huán)節(jié),它用于驗證Verilog設(shè)計的正確性和性能。以下是一個詳細(xì)的
    的頭像 發(fā)表于 12-17 09:50 ?427次閱讀

    Simulink狀態(tài)機(jī)建模方法 Simulink數(shù)據(jù)可視化與分析功能

    1. Simulink狀態(tài)機(jī)建模方法 1.1 理解狀態(tài)機(jī)的基本概念 在開始建模之前,了解狀態(tài)機(jī)的基本概念是必要的。
    的頭像 發(fā)表于 12-12 09:27 ?842次閱讀

    Jtti:有哪些工具可以幫助我監(jiān)控自動更新過程中的系統(tǒng)狀態(tài)

    監(jiān)控自動更新過程中的系統(tǒng)狀態(tài)對于確保系統(tǒng)的穩(wěn)定性和性能至關(guān)重要。以下是一些可以幫助你監(jiān)控系統(tǒng)狀態(tài)的工具: 1.系統(tǒng)日志工具 dmesg:顯示內(nèi)核環(huán)緩沖區(qū)消息,有助于識別硬件和驅(qū)動程序相關(guān)
    的頭像 發(fā)表于 12-10 15:46 ?175次閱讀

    芯片制造過程中的兩種刻蝕方法

    本文簡單介紹了芯片制造過程中的兩種刻蝕方法 ? 刻蝕(Etch)是芯片制造過程中相當(dāng)重要的步驟。 刻蝕主要分為干刻蝕和濕法刻蝕。 ①干法刻蝕 利用等離子體將不要的材料去除。 ②濕法刻蝕 利用腐蝕性
    的頭像 發(fā)表于 12-06 11:13 ?495次閱讀
    芯片制造<b class='flag-5'>過程中</b>的兩種刻蝕<b class='flag-5'>方法</b>

    LM5145在pre-bias啟機(jī)過程中的電壓反灌問題

    電子發(fā)燒友網(wǎng)站提供《LM5145在pre-bias啟機(jī)過程中的電壓反灌問題.pdf》資料免費(fèi)下載
    發(fā)表于 09-27 10:19 ?0次下載
    LM5145在pre-bias啟<b class='flag-5'>機(jī)</b><b class='flag-5'>過程中</b>的電壓反灌問題

    觸發(fā)器和狀態(tài)機(jī)的關(guān)系是什么

    觸發(fā)器和狀態(tài)機(jī)在數(shù)字電路設(shè)計中有著緊密的關(guān)系,它們共同構(gòu)成了時序邏輯電路的基礎(chǔ),用于實現(xiàn)數(shù)據(jù)的存儲、處理和傳輸。
    的頭像 發(fā)表于 08-12 11:24 ?546次閱讀

    如何在FPGA實現(xiàn)狀態(tài)機(jī)

    在FPGA(現(xiàn)場可編程門陣列)實現(xiàn)狀態(tài)機(jī)是一種常見的做法,用于控制復(fù)雜的數(shù)字系統(tǒng)行為。狀態(tài)機(jī)能夠根據(jù)當(dāng)前的輸入和系統(tǒng)狀態(tài),決定下一步的動作和新的
    的頭像 發(fā)表于 07-18 15:57 ?729次閱讀

    玩轉(zhuǎn)Spring狀態(tài)機(jī)

    說起Spring狀態(tài)機(jī),大家很容易聯(lián)想到這個狀態(tài)機(jī)和設(shè)計模式狀態(tài)模式的區(qū)別是啥呢?沒錯,Spring狀態(tài)機(jī)就是
    的頭像 發(fā)表于 06-25 14:21 ?1030次閱讀
    玩轉(zhuǎn)Spring<b class='flag-5'>狀態(tài)機(jī)</b>

    關(guān)于SMU狀態(tài)機(jī)的問題求解

    我有一些關(guān)于 SMU 狀態(tài)機(jī)的問題。 假設(shè)由于某種原因,SMU 已進(jìn)入故障狀態(tài)。 手冊指出,要返回運(yùn)行狀態(tài)并將 FSP 恢復(fù)到無故障狀態(tài),應(yīng)調(diào)用IfxSmu_releaseFSP()。
    發(fā)表于 05-29 08:18

    Verilog實現(xiàn)Moore型和Mealy型狀態(tài)機(jī)方法簡析

    編寫能夠被綜合工具識別的狀態(tài)機(jī),首先需要理解狀態(tài)機(jī)的基本概念和分類。狀態(tài)機(jī)(FSM)是表示有限個狀態(tài)以及在這些狀態(tài)之間轉(zhuǎn)換的邏輯結(jié)構(gòu)。
    的頭像 發(fā)表于 05-01 11:38 ?1800次閱讀

    如何采用“狀態(tài)機(jī)”解析UART數(shù)據(jù)幀

    如果一個系統(tǒng)接收上述“不定長度”的協(xié)議幀,將會有一個挑戰(zhàn)--如何高效接收與解析。 為簡化系統(tǒng)設(shè)計,我們強(qiáng)烈建議您采用“狀態(tài)機(jī)”來解析UART數(shù)據(jù)幀。
    的頭像 發(fā)表于 03-25 14:29 ?792次閱讀
    如何采用“<b class='flag-5'>狀態(tài)機(jī)</b>”解析UART數(shù)據(jù)幀

    什么是有限狀態(tài)機(jī)?如何解決傳統(tǒng)有限狀態(tài)機(jī)狀態(tài)爆炸」問題?

    有限狀態(tài)機(jī)(Finite State Machine,簡稱FSM)是一種用來進(jìn)行對象行為建模的工具,其作用主要是描述對象在它的生命周期內(nèi)所經(jīng)歷的狀態(tài)序列以及如何響應(yīng)來自外界的各種事件。
    的頭像 發(fā)表于 02-17 16:09 ?6364次閱讀
    什么是有限<b class='flag-5'>狀態(tài)機(jī)</b>?如何解決傳統(tǒng)有限<b class='flag-5'>狀態(tài)機(jī)</b>「<b class='flag-5'>狀態(tài)</b>爆炸」問題?

    Verilog狀態(tài)機(jī)+設(shè)計實例

    verilog狀態(tài)機(jī)的一種很常用的邏輯結(jié)構(gòu),學(xué)習(xí)和理解狀態(tài)機(jī)的運(yùn)行規(guī)律能夠幫助我們更好地書寫代碼,同時作為一種思想方法,在別的代碼設(shè)計
    的頭像 發(fā)表于 02-12 19:07 ?4342次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>狀態(tài)機(jī)</b>+設(shè)計實例
    一共33楼24楼风水怎么说| bet365会员注册| 百家乐官网庄闲排| BB百家乐HD| 百家乐官网视频游365| 百家乐园云鼎赌场娱乐网规则| 百家乐官网博之道娱乐城| 大发888娱乐城送白菜| 木棉百家乐官网的玩法技巧和规则| 东京太阳城王子大酒店| 百家乐官网永利娱乐场开户注册| 德州扑克胜率计算器| 百家乐5式直缆打法| 百家乐官网庄闲机率分析| 大发888提款怎么提| 艮山坤向 24山| 奎屯市| 百家乐官网娱乐网真钱游戏| 外围赌球| 金矿百家乐的玩法技巧和规则| 百家乐官网反缆公式| 在线娱乐场| 娱乐百家乐的玩法技巧和规则 | 百家乐噢门棋牌| 百家乐官网星级游戏| 威尼斯人娱乐场有什么玩| 百家乐仿水晶筹码| 百家乐官网里面的奥妙| 大发888投注鸿博博彩| 黄金城百家乐游戏| 百家乐官网破解软件真的有用吗| 明升娱乐| 威尼斯人娱乐城演唱会| 百家乐怎么刷反水| 百家乐官网赌博现金网| 博彩论坛网| 百家乐官网怎么看门路| 顶级赌场dj| 百家乐真人娱乐场开户注册| 百家乐官网下| 至尊百家乐官网规则|