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

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

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

狀態(tài)機(jī)的設(shè)計方法和三段式描述

冬至子 ? 來源:梧桐芯語 ? 作者:孫榮榮 ? 2023-07-13 16:11 ? 次閱讀

通過數(shù)據(jù)路徑的逐步穿透,設(shè)計模塊,是一種常見的設(shè)計方法。而從另外一種常規(guī)思想來看,電路的另一種表現(xiàn)形式,是狀態(tài)的轉(zhuǎn)換。往往在設(shè)計有模式變換,且組合關(guān)系較復(fù)雜的電路時,使用狀態(tài)機(jī)描述電路,比數(shù)據(jù)路徑穿透的方法更加直接。

比如說,某個電路存在S0、S1、S2、S3、S4、S5六種狀態(tài),電路上電后處于一個特定的狀態(tài),只有當(dāng)發(fā)生輸入變換時,才會切換到其他的狀態(tài)。這種電路,直觀上無法用數(shù)據(jù)路徑穿透設(shè)計,但如果使用狀態(tài)機(jī)設(shè)計,則會簡單很多。

狀態(tài)機(jī)設(shè)計,一般先把3種類型的信號(狀態(tài))整理出來:

  1. 狀態(tài)信號,表示當(dāng)前狀態(tài)機(jī)處于什么狀態(tài)下
  2. 條件信號,狀態(tài)機(jī)在不同條件下的跳轉(zhuǎn),需要不同的信號
  3. 輸出信號,根據(jù)狀態(tài)的不同,輸出相應(yīng)的結(jié)果

接著就可以把狀態(tài)機(jī)的狀態(tài)變化描述圖整理出來,如下圖所示:

圖片

以上狀態(tài)機(jī)的狀態(tài)信號一共6種,S0~S5,而條件信號為a??梢钥闯霾煌瑺顟B(tài)下,a的變換決定了狀態(tài)的下一次跳轉(zhuǎn)會向哪個方向跳。這里有2個必須理解的點(diǎn):

  1. a沒有變換的時候,無論多少個時鐘信號,狀態(tài)都會保持不變
  2. a的到來應(yīng)該是脈沖型信號(單個時鐘周期),以確保狀態(tài)的變換是按照時鐘周期進(jìn)行的。

Z則是輸出信號,在不同狀態(tài)下,其輸出會有所不同。

根據(jù)以上狀態(tài)圖的描述,我們可以開始用Verilog HDL進(jìn)行電路描述了(狀態(tài)機(jī)跳轉(zhuǎn)圖,可視為電路圖)。一般的狀態(tài)機(jī)描述,我們稱為三段式描述,實(shí)際上就是剛才說的,分別對三種不同信號的描述。

第一部分是狀態(tài)跳轉(zhuǎn)的描述,采用時序邏輯與組合邏輯分離的描述方式,將狀態(tài)信號看成寄存器

1.jpg

以上狀態(tài)的定義,使用的是順序編碼,如果根據(jù)實(shí)際情況,采用格雷碼設(shè)計,跳轉(zhuǎn)頻率高的盡量減少跳轉(zhuǎn),則可以相應(yīng)減少一些功耗。

接著第二部分,描述條件對狀態(tài)的影響,屬于組合邏輯,一般來說我們用case語句結(jié)構(gòu)來實(shí)現(xiàn),需要注意的是,必須加上default條件,其實(shí)就是說其他條件不滿足的話,nextstate就保持在上一個狀態(tài)。如果沒有default語句,且條件不完整,則synthesis工具會生成一個鎖存器來實(shí)現(xiàn)case語句,那樣的話,與我們的設(shè)計初衷就不同了,要避免:

1.jpg

條件語句,其實(shí)也可以用數(shù)據(jù)路徑來設(shè)計,但那樣的話就會有優(yōu)先級出現(xiàn),需要根據(jù)實(shí)際情況來分析。

第三部分,就是根據(jù)狀態(tài)的變換,為輸出值Z賦值。根據(jù)狀態(tài)圖分析,只有處于S5的時候,Z才輸出1'b1,否則都是1'b0:

1.jpg

所以輸出仍然可以使用數(shù)據(jù)路徑描述方式。

由此三段式描述狀態(tài)機(jī)的方式,就完成了。至于條件a怎么來的,輸出Z又給到哪里去了,該如何進(jìn)一步的設(shè)計,就需要各位看官自己吸收理解了。

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

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119212
  • 變換器
    +關(guān)注

    關(guān)注

    17

    文章

    2072

    瀏覽量

    108938
  • 鎖存器
    +關(guān)注

    關(guān)注

    8

    文章

    903

    瀏覽量

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

    關(guān)注

    2

    文章

    489

    瀏覽量

    27395
  • HDL語言
    +關(guān)注

    關(guān)注

    0

    文章

    46

    瀏覽量

    8897
收藏 人收藏

    評論

    相關(guān)推薦

    普通三段式充電原理

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

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

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

    徹底搞懂狀態(tài)機(jī)(一段式、兩段式、三段式)!一個實(shí)例,三種方法對比看?。。。ǔ绦颍?/a>

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

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

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

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

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

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

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

    三段式和四段式耳機(jī)的引腳定義

      耳機(jī)插座在我們?nèi)粘I钪惺潜容^常見的一種電子元件,其耳機(jī)插座的類型規(guī)格也區(qū)分有四段式耳機(jī)插座、三段式耳機(jī)插座等。三段式和四段式耳機(jī)的引腳定義如下:    四
    發(fā)表于 12-25 15:26

    Verilog三段式狀態(tài)機(jī)描述(轉(zhuǎn)載)

    建模描述FSM的狀態(tài)機(jī)輸出時,只需指定case敏感表為次態(tài)寄存器, 然后直接在每個次態(tài)的case分支中描述狀態(tài)的輸出即可,不用考慮狀態(tài)轉(zhuǎn)移
    發(fā)表于 02-09 09:42 ?1088次閱讀

    關(guān)于使用FPGA三段式狀態(tài)機(jī)點(diǎn)好處,你有什么看法?

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

    基于FPGA實(shí)現(xiàn)狀態(tài)機(jī)的設(shè)計

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

    三段式充電器的主要參數(shù)有哪些

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

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

    先談?wù)劦诙c(diǎn)關(guān)于思維習(xí)慣。我發(fā)現(xiàn)有些人會有這樣一種習(xí)慣,先用一段式狀態(tài)機(jī)實(shí)現(xiàn)功能,仿真ok后,再將其轉(zhuǎn)成三段式,他們對這種開發(fā)方式的解釋是一段式更直觀,可以更便捷的構(gòu)建功能框架,但是大
    發(fā)表于 07-14 14:59 ?1351次閱讀

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

    在 Verilog的江湖里,流傳著一,兩三段式狀態(tài)機(jī)的傳說。它們各有優(yōu)劣,本文就書寫三段式狀態(tài)機(jī)
    的頭像 發(fā)表于 06-20 10:35 ?3790次閱讀
    <b class='flag-5'>三段式</b><b class='flag-5'>狀態(tài)機(jī)</b>編寫問題及<b class='flag-5'>三段式</b><b class='flag-5'>狀態(tài)機(jī)</b>各部分功能分析

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

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

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

    三段式距離保護(hù)和三段式電流保護(hù)原理是相同的,它們有哪些區(qū)別?? 三段式距離保護(hù)和三段式電流保護(hù)是電氣保護(hù)系統(tǒng)中常用的兩種保護(hù)方式,它們在基本原理上是相同的,采用相同的
    的頭像 發(fā)表于 09-18 09:57 ?4823次閱讀