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

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

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

3天內不再提示

三段式狀態(tài)機編寫問題及三段式狀態(tài)機各部分功能分析

冬至子 ? 來源:Bug記錄 ? 作者:woodfan ? 2023-06-20 10:35 ? 次閱讀

Verilog的江湖里,流傳著一段,兩段,三段式狀態(tài)機的傳說。它們各有優(yōu)劣,本文就書寫三段式狀態(tài)機的錯誤原因進行探尋。

本文會涉及到Verilog的基本語法,需要一定的Verilog基礎,包括對reg,always,狀態(tài)機的一些認識,數字電路基礎。

三段式狀態(tài)機,將狀態(tài)機分為三段,功能為狀態(tài)轉移,狀態(tài)轉移條件判斷,輸出邏輯等。

存在問題的“三段式狀態(tài)機”代碼如下:

1.jpg

程序比較簡單,于是直接上板驗證。

經過上板調試,發(fā)現問題存在于當empty為低時,rd_en并沒有拉高。于是,我首先懷疑整個系統(tǒng)是不是一直處于復位狀態(tài)。

經過查找,發(fā)現rst一直保持低電平,整個程序不在復位狀態(tài)。這就很神奇了。

后來,經過提醒和仔細查找原因,才發(fā)現這個狀態(tài)機寫的其實存在問題。狀態(tài)轉移條件判斷和狀態(tài)轉移都使用時序邏輯,兩者并行運行,問題就凸顯出來了。

舉例說明,假設當前狀態(tài)statenext_state都處于IDLE狀態(tài);

1.jpg

事實上,這么寫,造成的問題是state相對其他信號可能會晚一節(jié)拍。狀態(tài)機晚一節(jié)拍,可能會導致時序錯亂。

而事實上,三段式狀態(tài)機當然不是這么寫的。

首先,三段式狀態(tài)機由三部分(段)組成,前面也提到了,是狀態(tài)轉移,狀態(tài)轉移條件判斷,輸出邏輯等。

首先談到狀態(tài)轉移,三段式狀態(tài)機有state, next_state信號作為指示。兩者在位寬,信號類型上一模一樣,都是reg型變量。

狀態(tài)轉移很簡單,大致如下:

1.jpg

其中,IDLE是預先定義的常量,使用localparamparameter定義即可,或者可以使用`define定義宏變量參數,然后放在一個通用的參數模塊文件里,供項目里所有文件調用,后續(xù)再詳細講解這塊吧。

這塊的內容,僅僅是將next_state的值打一拍,通過了一個寄存器,意義何在呢,要結合狀態(tài)轉移條件判斷一起看。

狀態(tài)轉移條件判斷代碼大致如下:

1.jpg

這塊的內容主要是做next_state值變更的條件判斷,結合功能來說,就是做狀態(tài)值的更新。

那可能有人會問:

  • always @ (*) 是什么意思

簡單來說,always @ ( ) 意為每時每刻都在運行,也就是組合邏輯,你也可以使用always @ (state, a, b)方式來代替always @ ( )。但是,假如always列表里的信號不全,可能造成的影響又是什么呢?

  • reg類型為什么放在組合邏輯里面做

reg型變量最后綜合的電路也可能是組合邏輯,也不是說always塊一定綜合出時序邏輯,主要還是跟敏感列表有關,其次always里只能使用reg型變量

  • 為什么你的if沒有補全else

對于時序邏輯來說,沒有補全else,default等不會生成鎖存器;對于組合邏輯來說,沒有else,default確實可能生成鎖存器,但是鎖存器生成的原因是因為設計代碼中要求組合邏輯去保持或者說記憶住某個值,這本該是時序邏輯該干的事,組合邏輯干不了,所以生成鎖存器;而本段代碼,第一行代碼就相當于已經為所有無法進入if條件的情況增加了默認情況,就是賦值為state的狀態(tài)。

這兩塊內容都跟狀態(tài)轉移有關,第二塊進行條件判斷,而判斷不僅要根據外部信號,也要根據自身所在的狀態(tài),所以第一塊進行狀態(tài)值的更新。

那么這么做的好處是什么呢?跟一段式狀態(tài)機相比,將狀態(tài)轉移與判斷和輸出邏輯分開寫,方便后續(xù)的調試。

因為在調試階段,查找問題時會去查找問題所在的狀態(tài),然后再比對代碼中該狀態(tài)的判斷條件,沒有錯誤再比對該條件下問題信號的輸出邏輯,調試更為方便。

那么第三段的輸出邏輯,代碼大致如下:

1.jpg

首先,輸出邏輯這段并不是要求只用一個always寫完所有的輸出邏輯;其次,使用時序邏輯輸出,更利于信號的時序分析和時序收斂。

當然,一段式狀態(tài)機也并不是一無是處,很多時候,在一些邏輯簡單,功能簡單的場景下,我也愿意使用一段式狀態(tài)機。兩段式狀態(tài)機用的比較少,感覺像是一段式和三段式狀態(tài)機的過渡狀態(tài),有點雞肋的感覺。

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

    關注

    8

    文章

    918

    瀏覽量

    41782
  • 時序邏輯電路

    關注

    2

    文章

    94

    瀏覽量

    16634
  • 狀態(tài)機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27786
  • Verilog語言
    +關注

    關注

    0

    文章

    113

    瀏覽量

    8341
收藏 人收藏

    評論

    相關推薦

    普通三段式充電原理

    普通三段式充電原理   普通三段式鉛酸蓄電池充電器,充電過程如下: ① 恒流充電階段,充電器充電電流保持恒定,充入
    發(fā)表于 11-16 14:24 ?2.9w次閱讀

    【Z-turn Board試用體驗】有限狀態(tài)機三段式描述方法(轉載)

    ;(2)二段式:用兩個always模塊來描述狀態(tài)機,其中一個always模塊采用同步時序描述狀態(tài)轉移;另一個模塊采用組合邏輯判斷狀態(tài)轉移條件,描述
    發(fā)表于 05-25 20:33

    徹底搞懂狀態(tài)機(一段式、兩段式三段式)!一個實例,種方法對比看!!!(程序)

    三段式建模描述FSM的狀態(tài)機輸出時,只需指定case敏感表為次態(tài)寄存器,然后直接在每個次態(tài)的case分支中描述該狀態(tài)的輸出即可,不用考慮狀態(tài)轉移條件。
    發(fā)表于 06-27 22:13

    關于三段式狀態(tài)機的疑惑,希望有人來為我解答。(新手求罩)

    本人在學習verilog 與狀態(tài)機時發(fā)現有如下疑惑,希望有人能為我解答。如下,是一部分三段式狀態(tài)機的代碼:always@(posedge clk or negedge rst_n)be
    發(fā)表于 11-21 10:57

    三段式過電流保護的模型

    我通過SIMULINK建立三段式過電流保護的模型,如下所示,但是仿真難結果不對,請大神指點一下哪里錯了。
    發(fā)表于 06-30 17:23

    Verilog三段式狀態(tài)機描述及模版

    個always完成。三段式建模描述FSM的狀態(tài)機輸出時,只需指定case敏感表為次態(tài)寄存器, 然后直接在每個次態(tài)的case分支中描述該狀態(tài)
    發(fā)表于 07-03 10:13

    Verilog三段式狀態(tài)機描述及模版

    個always完成。三段式建模描述FSM的狀態(tài)機輸出時,只需指定case敏感表為次態(tài)寄存器, 然后直接在每個次態(tài)的case分支中描述該狀態(tài)
    發(fā)表于 07-09 01:55

    三段式和四段式耳機的引腳定義

      耳機插座在我們日常生活中是比較常見的一種電子元件,其耳機插座的類型規(guī)格也區(qū)分有四段式耳機插座、三段式耳機插座等。三段式和四段式耳機的引腳定義如下:    四
    發(fā)表于 12-25 15:26

    Verilog三段式狀態(tài)機描述(轉載)

    時序電路的狀態(tài)是一個狀態(tài)變量集合,這些狀態(tài)變量在任意時刻的值都包含了為確定電路的未來行為而必需考慮的所有歷史信息。 狀態(tài)機采用VerilogHDL語言編碼,建議分為
    發(fā)表于 02-09 09:42 ?1210次閱讀

    關于使用FPGA三段式狀態(tài)機點好處,你有什么看法?

    三段式描述狀態(tài)機的好處,國內外各位大牛都已經說的很多了,大致可歸為以下點:
    發(fā)表于 08-17 11:43 ?1.6w次閱讀
    關于使用FPGA<b class='flag-5'>三段式</b><b class='flag-5'>狀態(tài)機</b>的<b class='flag-5'>三</b>點好處,你有什么看法?

    基于FPGA實現狀態(tài)機的設計

    狀態(tài)機種描述方式:一段式狀態(tài)機、兩段式狀態(tài)機三段式
    的頭像 發(fā)表于 08-29 06:09 ?2937次閱讀
    基于FPGA實現<b class='flag-5'>狀態(tài)機</b>的設計

    三段式充電器的主要參數有哪些

    下面以36V/lOAh蓄電池所用的三段式充電器為例,說明三段式充電器的主要參數。
    發(fā)表于 04-05 16:49 ?6108次閱讀
    <b class='flag-5'>三段式</b>充電器的主要參數有哪些

    FPGA三段式描述狀態(tài)機的好處

    先談談第二點關于思維習慣。我發(fā)現有些人會有這樣一種習慣,先用一段式狀態(tài)機實現功能,仿真ok后,再將其轉成三段式,他們對這種開發(fā)方式的解釋是一段式
    發(fā)表于 07-14 14:59 ?1602次閱讀

    狀態(tài)機的一段式、二段式三段式的區(qū)別

    本篇文章描述狀態(tài)機的一段式、二段式三段式區(qū)別.
    的頭像 發(fā)表于 08-21 09:25 ?9705次閱讀
    <b class='flag-5'>狀態(tài)機</b>的一<b class='flag-5'>段式</b>、二<b class='flag-5'>段式</b>、<b class='flag-5'>三段式</b>的區(qū)別

    三段式距離保護和三段式電流保護原理是相同的,它們有哪些區(qū)別?

    上也有著相似之處。但是它們在實際應用中存在一些差異,下面我們將逐一分析它們的區(qū)別。 一、基本原理: 1. 三段式距離保護 三段式距離保護是一種基于測量線路電壓和電流來進行保護的保護方式,其原理基于開路電壓的測量。當
    的頭像 發(fā)表于 09-18 09:57 ?5741次閱讀
    主站蜘蛛池模板: 色人阁影视 | 高清日本片免费观看 | 99人精品福利在线观看 | jizzhd中国| 国内精品免费视频精选在线观看 | 欧美重口绿帽video | 国产高清视频在线观看不卡v | 久久热免费观看视频 | 欧美日韩午夜群交多人轮换 | 欧美 亚洲 日韩 中文2019 | 国产欧美另类久久久精品免费 | 久久久99精品成人片中文 | 99久久免费精品国产免费 | 色婷婷欧美在线播放内射 | 欧美日韩一区不卡在线观看 | 亚洲视频在线观看视频 | 日本吃孕妇奶水免费观看 | 麻美ゆま夫の目の前で犯 | 亚洲AV无码国产精品色在线看 | 亚洲欧美中文字幕先锋 | 99视频久久精品久久 | 成人免费小视频 | 久久精品视频在线看99 | 冈本视频黄页正版 | 正在播放国产精品 | 日本特黄的免费大片视频 | 国产三级精品三级男人的天堂 | 高跟丝袜岳第一次 | 久久精品亚洲精品国产欧美 | 国产一区二区三区影院 | 云南14学生真实初次破初视频 | 出租屋自拍贵在真实15P | 中国明星16xxxxhd| 国产成年人在线观看 | 亚洲一日韩欧美中文字幕在线 | 精品午夜中文字幕熟女人妻在线 | 男人J进入女人P免费狂躁 | 天龙八部慕容属性加点 | 国产360激情盗摄全集 | 成年色黄APP下载 | 粉嫩无套白浆第一次jk |