99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

西西 ? 來源:博客園 ? 作者: zxl2431 ? 2020-09-08 14:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.0 序列檢測器電路設(shè)計(jì)

設(shè)計(jì)一個(gè)序列檢測器電路,功能是:檢測出串行輸入數(shù)據(jù)Sin中的4位二進(jìn)制序列0101(自左至右輸入),當(dāng)檢測到該序列時(shí),輸出Out=1;沒有檢測到該序列時(shí),輸出Out=0(注意考慮序列重疊的可能性,如010101,相當(dāng)于出現(xiàn)兩個(gè)0101序列)。

經(jīng)過分析,首先可以確定采用米利型狀態(tài)機(jī)設(shè)計(jì)該電路。因?yàn)樵撾娐吩谶B續(xù)收到信號(hào)0101時(shí),輸出為1,其他情況下輸出為0,所以采用米利型狀態(tài)機(jī)。

其次,確定狀態(tài)機(jī)的狀態(tài)圖,該電路必須能記憶所收到的輸入數(shù)據(jù)0、連續(xù)收到前兩個(gè)數(shù)據(jù)01.。??梢娭辽僖莻€(gè)狀態(tài),分別用S1,S2,S3,S4,再加上電路初始態(tài)S0。根據(jù)要求可以畫出狀態(tài)圖:

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

觀察該圖可以看出,當(dāng)狀態(tài)機(jī)處以S2、S4的時(shí)候,如果輸入Sin = 1,則電路會(huì)轉(zhuǎn)移到相同的次態(tài)S0,如果輸入Sin = 0,則電路會(huì)轉(zhuǎn)移到相同的次態(tài)S3,且兩種情況下輸出Out都為0。所以,S2、S4為等價(jià)狀態(tài),可用S2代替S4,于是得到簡化的狀態(tài)圖:

如果用CPLD/FPGA器件實(shí)現(xiàn)狀態(tài)機(jī),則邏輯綜合器會(huì)自動(dòng)化簡狀態(tài)機(jī)。

利用Verilog HDL描述狀態(tài)圖主要包括:

(1) 利用參數(shù)定義語句parameter描述狀態(tài)機(jī)中各個(gè)狀態(tài)的名稱,并指定狀態(tài)編碼。

(2) 用時(shí)序的always塊描述狀態(tài)觸發(fā)器實(shí)現(xiàn)的狀態(tài)存儲(chǔ)。

(3) 使用敏感表和case語句(也可以采用if-else語句)描述狀態(tài)轉(zhuǎn)換邏輯。

(4) 描述狀態(tài)機(jī)的輸出邏輯。

這個(gè)電路我試著用3種方式來描述,看看他們的差別在哪里。

(1) 單個(gè)always塊描述狀態(tài)機(jī)方法(應(yīng)該避免的寫法)

生成的RTL視圖:

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

State模塊里面其實(shí)就是一個(gè)狀態(tài)機(jī):

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

仿真結(jié)果有時(shí)會(huì)出錯(cuò):

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

在每個(gè)clk上升沿讀取數(shù)據(jù),可以看到是0101,在285ps時(shí)輸出oOut應(yīng)該是高電平,但不是,這是為什么了?再看下面一張圖

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

這張是對的,為什么有時(shí)對又是錯(cuò)了,如果是這樣那就失去了它的意義了。

對序列檢測器電路用單個(gè)always塊的描述的邏輯存在一個(gè)隱含的錯(cuò)誤,即輸出信號(hào)oOut的描述存在錯(cuò)誤。其原因是:oOut信號(hào)是由狀態(tài)機(jī)的當(dāng)前狀態(tài)和輸入信號(hào)共同決定的,它是一個(gè)純組合邏輯電路,如果當(dāng)前狀態(tài)不變,而輸入信號(hào)變了,oOut信號(hào)應(yīng)立即發(fā)生變化,而不是等到時(shí)鐘上升沿來了才變化。因此,單個(gè)always塊描述狀態(tài)機(jī)的寫法僅僅適用于穆爾型狀態(tài)機(jī)。這雖然是個(gè)問題,但是跟我出現(xiàn)的問題貌似沒有什么直接關(guān)系,郁悶。。。繼續(xù)思考。

在實(shí)際應(yīng)用中,為了消除組合邏輯輸出信號(hào)中的毛刺,在時(shí)序允許的情況下,通常允許米利型狀態(tài)機(jī)中輸出信號(hào)通過寄存器輸出。但是單個(gè)的always塊的描述方法將狀態(tài)轉(zhuǎn)換判斷的組合邏輯和狀態(tài)觸發(fā)器轉(zhuǎn)移的時(shí)序邏輯混合編寫在同一個(gè)always塊中,不符合將時(shí)序和組合邏輯分開描述的代碼風(fēng)格(Coding Style),而且在描述當(dāng)前狀態(tài)時(shí)還要考慮下一個(gè)狀態(tài)的邏輯,整個(gè)代碼的結(jié)構(gòu)不清晰,不利于修改和維護(hù),不利于時(shí)序約束條件的加入,不利于綜合器對設(shè)計(jì)的優(yōu)化。所以不推薦使用單個(gè)always塊的描述方式。

必須為自己的粗心大意買單,還說輸出有時(shí)會(huì)出錯(cuò)原來狀態(tài)圖都是錯(cuò)了,不經(jīng)意的一眼,看來不能隨便啊。case語句后的 S1:當(dāng)條件滿足時(shí)(iSin == 1‘b1)時(shí)會(huì)跳到S2否則還會(huì)停留在S1。改過來看看正確的狀態(tài)機(jī)就不會(huì)出錯(cuò)了。太粗心了!

正確的狀態(tài)機(jī):

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

(2) 兩個(gè)always塊描述狀態(tài)機(jī)的方法(推薦寫法)

值得注意的是Next_state = 2’bxx;對狀態(tài)的默認(rèn)賦值有3種方式:(1) 全部設(shè)置成不定狀態(tài)(x); (2) 設(shè)置成預(yù)先規(guī)定的初始狀態(tài); (3) 設(shè)置成FSM中的某一有效狀態(tài)。設(shè)置成不定狀態(tài)(x)的好處是:(1) 在仿真時(shí)可以很好地考察所設(shè)計(jì)的FSM的完備性,若設(shè)計(jì)的FSM不完備,則進(jìn)入任意狀態(tài),仿真時(shí)容易發(fā)現(xiàn);(2) 綜合器對代碼進(jìn)行綜合時(shí),會(huì)忽略沒有定義的狀態(tài)觸發(fā)器向量。

生成的RTL視圖:

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

和上面的比較了一下,少了個(gè)D觸發(fā)器,這是為什么呢?并且仿真的結(jié)果也不一樣了。仿真圖:

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

當(dāng)然新的問題也就隨之而來:

采用米利型的狀態(tài)機(jī)電路設(shè)計(jì)

我們可以明顯的看到這種寫法和上面寫法的區(qū)別,最重要的是:輸出oOut不在是在clk上升沿來的時(shí)候才能發(fā)生變化,它是一個(gè)純組合邏輯電路只要輸入條件滿足輸出就立馬發(fā)生改變。隨著毛刺的出現(xiàn),毛刺是一個(gè)很重要的問題,很值得我們認(rèn)真思考。為什么會(huì)出現(xiàn)毛刺了,我們可以清楚的看到這時(shí)次態(tài)是完全由組合邏輯電路決定的,時(shí)序電路做的事情僅僅是在clk上升沿來的時(shí)候把,把次態(tài)賦給現(xiàn)態(tài)。在445ps時(shí)在S1狀態(tài),輸出為0、在455ps時(shí)在S2狀態(tài),輸出為0、在465ps時(shí)在S3狀態(tài),此時(shí)就算clk的posedge不來,只要iSin == 1,輸出同樣會(huì)為1,正如上圖,但在這里,clk 的上升沿和iSin 的高電平是同時(shí)來的,所以,在 iSin 的高電平來的那一瞬間,輸出oOut = 1,就在同時(shí)狀態(tài)裝換到S2,輸出oOut = 0;

這就導(dǎo)致了上面毛刺的產(chǎn)生。怎么解決這個(gè)問題呢?我們來看看第三種方法。

(3) 3個(gè)always塊描述狀態(tài)機(jī)(推薦寫法)

分析一下代碼,我們很容易看出:第一個(gè)always塊采用同步時(shí)序邏輯方式描述狀態(tài)轉(zhuǎn)移(在電路框圖的中間框),第二個(gè)always塊采用組合邏輯方式描述狀態(tài)轉(zhuǎn)移規(guī)律(一般是第一個(gè)方框),第三個(gè)always塊描述電路的輸出信號(hào),在時(shí)序允許的情況下,通常讓輸出信號(hào)經(jīng)過一個(gè)寄存器再輸出,保證輸出信號(hào)中沒有毛刺。

綜合后的RTL視圖,就跟第一版程序是一樣的了,又有了D觸發(fā)器,仿真結(jié)果和第一版也是一樣的,但是兩版代碼的風(fēng)格(Coding Style)是不一樣的。

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

    關(guān)注

    13

    文章

    502

    瀏覽量

    43331
  • 檢測器
    +關(guān)注

    關(guān)注

    1

    文章

    894

    瀏覽量

    48673
  • D觸發(fā)器
    +關(guān)注

    關(guān)注

    3

    文章

    172

    瀏覽量

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

    關(guān)注

    2

    文章

    493

    瀏覽量

    28235
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    請問如何在FX10上使用GPIF III狀態(tài)機(jī) *.h 文件?

    LVCMOS 2 位 SlaveFIFO GPIF III 狀態(tài)機(jī)的演示中有一個(gè) cy_gpif_header_lvcmos.h 文件。 我想知道如何使用.h文件,只需放入.h文件放入 FX10 項(xiàng)目? 您有它的用戶指南文檔嗎?
    發(fā)表于 07-16 08:17

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)之八:PCIe初始化狀態(tài)機(jī)設(shè)計(jì)

    PCIe配置初始化狀態(tài)機(jī)實(shí)現(xiàn)PCIe設(shè)備枚舉和配置空間初始化過程,在完成鏈路訓(xùn)練后,使用DFS(深度優(yōu)先搜索)算法枚舉PCIe總線上的設(shè)備,完成PCIe總線域的地址分配和設(shè)備的初始化。PCIe配置
    發(fā)表于 07-05 22:00

    硬件設(shè)備的開機(jī)密鑰:電路設(shè)計(jì)深度解析

    機(jī)電路設(shè)計(jì)如同為硬件設(shè)備編寫了一串“開機(jī)密鑰”,它通過復(fù)雜的信號(hào)傳遞與邏輯判斷,確保系統(tǒng)從斷電狀態(tài)到正常工作模式的平穩(wěn)過渡。這一設(shè)計(jì)的精妙程度,直接定義了設(shè)備的啟動(dòng)效率與可靠性。 本文應(yīng)工程師朋友
    的頭像 發(fā)表于 06-23 16:08 ?88次閱讀
    硬件設(shè)備的開機(jī)密鑰:<b class='flag-5'>電路設(shè)計(jì)</b>深度解析

    有可能在 FX3 GPIF2 中創(chuàng)建兩個(gè)獨(dú)立的狀態(tài)機(jī)嗎?

    我想,如果我想通過 FX3 GPIF2 創(chuàng)建兩個(gè)獨(dú)立的傳輸流接口,我需要在 GPIF2 設(shè)計(jì)器中創(chuàng)建兩個(gè)獨(dú)立的狀態(tài)機(jī),我是否有可能在 GPIF2 設(shè)計(jì)器中創(chuàng)建兩個(gè)獨(dú)立的狀態(tài)機(jī)?
    發(fā)表于 05-20 06:14

    求助,關(guān)于srammaster.cydsn中狀態(tài)機(jī)的問題求解

    晚上好。 我目前正在學(xué)習(xí) GPIF II。 查看..EZ-USB FX3 SDK1.3firmwaregpif_examplescyfxsrammastersrammaster.cydsn中的狀態(tài)機(jī),有狀態(tài)START和START1。 這意味著什么?
    發(fā)表于 05-12 06:20

    如何快速入門PLD電路設(shè)計(jì)

    基本的數(shù)字邏輯概念,如與、或、非、異或等邏輯門。 布爾代數(shù) :掌握布爾代數(shù)的基本原理,這對于設(shè)計(jì)復(fù)雜的邏輯電路至關(guān)重要。 狀態(tài)機(jī) :學(xué)習(xí)有限狀態(tài)機(jī)(F
    的頭像 發(fā)表于 01-20 09:48 ?888次閱讀

    技術(shù)分享!蜂窩模組開機(jī)電路設(shè)計(jì)

    模組的上電開機(jī),是硬件設(shè)計(jì)調(diào)試的第一步。在前期設(shè)計(jì)階段,尤其要注意優(yōu)化外部電路設(shè)計(jì)(特別是電源部分)。 本文特別分享常見開機(jī)電路設(shè)計(jì)相關(guān)注意事項(xiàng)。適合大多數(shù)蜂窩模組,在實(shí)際開發(fā)中可靈活應(yīng)用。 一
    的頭像 發(fā)表于 12-17 18:05 ?1138次閱讀
    技術(shù)分享!蜂窩模組開<b class='flag-5'>機(jī)電路設(shè)計(jì)</b>

    蜂窩模組開機(jī)電路,你學(xué)廢了嗎?

    本文特別分享常見開機(jī)電路設(shè)計(jì)相關(guān)注意事項(xiàng)。適合大多數(shù)蜂窩模組,在實(shí)際開發(fā)中可靈活應(yīng)用。
    的頭像 發(fā)表于 12-14 15:54 ?694次閱讀
    蜂窩模組開<b class='flag-5'>機(jī)電路</b>,你學(xué)廢了嗎?

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

    1. Simulink中的狀態(tài)機(jī)建模方法 1.1 理解狀態(tài)機(jī)的基本概念 在開始建模之前,了解狀態(tài)機(jī)的基本概念是必要的。狀態(tài)機(jī)由以下幾個(gè)部分組成:
    的頭像 發(fā)表于 12-12 09:27 ?2999次閱讀

    基于PWM控制的buck電路設(shè)計(jì)

    基于PWM(脈沖寬度調(diào)制)控制的Buck電路設(shè)計(jì)是一個(gè)綜合性的項(xiàng)目,涉及電路原理、控制策略、元件選擇等多個(gè)方面。以下是一個(gè)基于PWM控制的Buck電路設(shè)計(jì)的指南: 一、電路原理 Buc
    的頭像 發(fā)表于 11-21 10:12 ?3460次閱讀

    單片機(jī)電路圖用什么軟件畫

    單片機(jī)電路圖的設(shè)計(jì)和繪制是一個(gè)復(fù)雜的過程,涉及到電路設(shè)計(jì)、電子元件的選擇、電路板布局、信號(hào)完整性分析等多個(gè)方面。 1. 選擇合適的軟件 繪制單片機(jī)電路圖,你可以選擇多種軟件,每種軟件都
    的頭像 發(fā)表于 10-17 09:43 ?3435次閱讀

    接口芯片的譯碼電路設(shè)計(jì)一般采用什么方法

    接口芯片的譯碼電路設(shè)計(jì)是數(shù)字電路設(shè)計(jì)中的一個(gè)重要部分,它涉及到將輸入信號(hào)轉(zhuǎn)換為特定的輸出信號(hào),以便于后續(xù)電路的處理。譯碼電路的設(shè)計(jì)方法多樣,但通??梢詺w結(jié)為幾種常見的設(shè)計(jì)策略。 接口芯
    的頭像 發(fā)表于 09-30 11:32 ?780次閱讀

    串聯(lián)穩(wěn)壓電路中的調(diào)整管工作在什么狀態(tài)

    串聯(lián)穩(wěn)壓電路中的調(diào)整管主要工作在 放大狀態(tài) 。 串聯(lián)穩(wěn)壓電路是一種常見的穩(wěn)壓電路,其主要作用
    的頭像 發(fā)表于 08-16 14:19 ?2207次閱讀

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

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

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

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