色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Verilog設計過程中狀態機的設計方法

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

“本文主要分享了在Verilog設計過程中狀態機的一些設計方法。

關于狀態機

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

根據狀態機的輸出是否與輸入條件有關,可將狀態機分為:

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

摩爾型狀態機:輸出僅與當前狀態有關,而與輸入條件無關。

米里型狀態機:輸出不僅依賴于當前狀態,還取決于輸入條件。

狀態機的邏輯通常用“case”語句或者“if-else”語句來描述,枚舉當前狀態和輸入的所有可能組合,并為下一個狀態和輸出制定適當的值。

RTL級狀態機描述常用語法:

wire、reg;

parameter,用于描述狀態名稱,增強代碼可讀性;

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

case/endcase:其中default是可選的關鍵字,用于指明當所列的所有條件都不匹配時的操作;一般的FSM設計都會加上default關鍵字描述FSM所需的補集狀態。

task/endtask。

幾種狀態機的描述方法

一段式FSM描述方法:一個always塊里面,即描述狀態轉移,又描述狀態的輸入和輸出。

兩段式FSM描述方法:兩個always塊,一個采用同步時序描述狀態轉移;另一個模塊采用組合邏輯判斷狀態轉移條件,描述狀態轉移規律。

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

一段式:

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

//--------------------------------------------------------------------------------//------ 在一個always中包含狀態、輸入和輸出。 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;//下一個狀態 reg [2:0] Current_State;//當前狀態

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;//下一個狀態 reg [2:0] Current_State;//當前狀態 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

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

結論:

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

二段式狀態機比一段式要容易理解,但是由于輸出是組合邏輯,容易存在不穩定與毛刺隱患;

三段式狀態機比一段式更容易理解,用時序邏輯代替組合邏輯消除了不穩定與毛刺的隱患,但是代碼量會稍微多一點;

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110077
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27529

原文標題:Verilog基礎知識學習筆記(四)

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

收藏 人收藏

    評論

    相關推薦

    錫膏印刷印刷過程中有哪些不良及解決方法

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

    Verilog 測試平臺設計方法 Verilog FPGA開發指南

    Verilog測試平臺設計方法Verilog FPGA開發的重要環節,它用于驗證Verilog設計的正確性和性能。以下是一個詳細的
    的頭像 發表于 12-17 09:50 ?129次閱讀

    Simulink狀態機建模方法 Simulink數據可視化與分析功能

    1. Simulink狀態機建模方法 1.1 理解狀態機的基本概念 在開始建模之前,了解狀態機的基本概念是必要的。
    的頭像 發表于 12-12 09:27 ?280次閱讀

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

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

    LM5145在pre-bias啟過程中的電壓反灌問題

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

    觸發器和狀態機的關系是什么

    觸發器和狀態機在數字電路設計中有著緊密的關系,它們共同構成了時序邏輯電路的基礎,用于實現數據的存儲、處理和傳輸。
    的頭像 發表于 08-12 11:24 ?424次閱讀

    如何在FPGA實現狀態機

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

    玩轉Spring狀態機

    說起Spring狀態機,大家很容易聯想到這個狀態機和設計模式狀態模式的區別是啥呢?沒錯,Spring狀態機就是
    的頭像 發表于 06-25 14:21 ?933次閱讀
    玩轉Spring<b class='flag-5'>狀態機</b>

    關于SMU狀態機的問題求解

    我有一些關于 SMU 狀態機的問題。 假設由于某種原因,SMU 已進入故障狀態。 手冊指出,要返回運行狀態并將 FSP 恢復到無故障狀態,應調用IfxSmu_releaseFSP()。
    發表于 05-29 08:18

    Verilog實現Moore型和Mealy型狀態機方法簡析

    編寫能夠被綜合工具識別的狀態機,首先需要理解狀態機的基本概念和分類。狀態機(FSM)是表示有限個狀態以及在這些狀態之間轉換的邏輯結構。
    的頭像 發表于 05-01 11:38 ?1580次閱讀

    如何采用“狀態機”解析UART數據幀

    如果一個系統接收上述“不定長度”的協議幀,將會有一個挑戰--如何高效接收與解析。 為簡化系統設計,我們強烈建議您采用“狀態機”來解析UART數據幀。
    的頭像 發表于 03-25 14:29 ?681次閱讀
    如何采用“<b class='flag-5'>狀態機</b>”解析UART數據幀

    什么是有限狀態機?如何解決傳統有限狀態機狀態爆炸」問題?

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

    Verilog狀態機+設計實例

    verilog狀態機的一種很常用的邏輯結構,學習和理解狀態機的運行規律能夠幫助我們更好地書寫代碼,同時作為一種思想方法,在別的代碼設計
    的頭像 發表于 02-12 19:07 ?4059次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>狀態機</b>+設計實例

    狀態機該怎么監控

    狀態機卡住的場景——通過狀態跳轉條件的DFX信號去判斷卡住的原因
    的頭像 發表于 01-15 10:03 ?416次閱讀
    <b class='flag-5'>狀態機</b>該怎么監控

    Spring狀態機的實現原理和使用方法

    說起 Spring 狀態機,大家很容易聯想到這個狀態機和設計模式狀態模式的區別是啥呢?沒錯,Spring 狀態機就是
    的頭像 發表于 12-26 09:39 ?1977次閱讀
    Spring<b class='flag-5'>狀態機</b>的實現原理和使用<b class='flag-5'>方法</b>
    主站蜘蛛池模板: 超碰国产亚洲人人| jizz69女士第一次| 999视频在线观看| 黑人操日本女人| 午夜国产精品免费观看| 成人国产三级在线播放| 嫩草国产精品99国产精品| 在线欧美 精品 第1页| 狠狠色综合久久丁香婷婷| 性VIDEOSTV另类极品| 国产高潮久久精品AV无码| 少妇高潮惨叫久久久久久电影| xxnx动漫| 日久精品不卡一区二区| 粉嫩极品国产在线观看| 色婷婷亚洲五月| 国产精品免费大片| 亚洲国产精品特色大片观看 | 色色男_免费| 大胆国模一区二区三区伊人| 少妇的肉体AA片免费| 国产精品福利片| 亚洲2017天堂色无码| 交换年轻夫妇HD中文字幕 | 国产一卡2卡3卡4卡孕妇网站 | 国产蜜臀AV在线一区视频| 亚洲 欧美 国产 综合久久| 和尚轮流澡到高潮H| 影音先锋av男人资源| 米奇在线8888在线精品视频| YELLOW视频直播在线观看高清| 日韩特黄特色大片免费视频| 国产精品视频yy9099| 亚洲综合无码一区二区| 两个人的视频日本在线观看完整| 99在线在线视频观看| 色综合五月激情综合色一区| 国内精品伊人久久久久| 阴茎插入阴道| 日本50人群体交乱| 国产中文字幕免费观看|