在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 如何設(shè)計一個穩(wěn)定可靠的狀態(tài)機(jī)

            如何設(shè)計一個穩(wěn)定可靠的狀態(tài)機(jī)

            作者: 時間:2012-07-12 來源:網(wǎng)絡(luò) 收藏
            wait until clk'event and clk='1';

            本文引用地址:http://www.biyoush.com/article/148786.htm

              current_state=next_state;

              end process state_change;

              combination:process(current_state,mach_input)

              …… --輸出值譯碼,給next_state賦新值.省略

              end behave;

              

              圖2 枚舉類型的機(jī)綜合后的波形

              例1是全編碼狀態(tài)機(jī),綜合后的仿真波形如圖2所示.從放大后的局部可以看出輸出狀態(tài)值從“01”到“10”轉(zhuǎn)換過程中出現(xiàn)了過渡狀態(tài)“11”.從微觀上分析中間信號“Current_state”狀態(tài)轉(zhuǎn)換過程,狀態(tài)寄存器的高位翻轉(zhuǎn)和低位翻轉(zhuǎn)時間是不一致的,當(dāng)高位翻轉(zhuǎn)速度快時,會產(chǎn)生過渡狀態(tài)“11”,當(dāng)?shù)臀环D(zhuǎn)速度快時會產(chǎn)生過渡狀態(tài)“00”.若狀態(tài)機(jī)的狀態(tài)值更多的話,則產(chǎn)生過渡狀態(tài)的概率更大.如果在非全編碼狀態(tài)機(jī)中,由于這種過渡狀態(tài)的反饋?zhàn)饔?將直接導(dǎo)致電路進(jìn)入非法狀態(tài),若此時電路不具備自啟動功能,那么電路將無法返回正常工作狀態(tài).

              因為狀態(tài)機(jī)的輸出信號常用作重要的控制,如:三態(tài)使能,寄存器清零等.所以這種結(jié)果是不允許的,消除此類過渡狀態(tài)呢?方法之一是采用格雷碼表示狀態(tài)值.

              2.2 用格雷碼表示狀態(tài)值

              格雷碼的特點(diǎn)是任意相鄰兩個數(shù)據(jù)之間只有一位不同,這一特點(diǎn)使得采用格雷碼表示狀態(tài)值的狀態(tài)機(jī),可以在很大程度上消除由延時引起的過渡狀態(tài).將例1改進(jìn)之后的程序如例2.

              例2 采用格雷碼表示狀態(tài)值的狀態(tài)機(jī).

              library ieee;

              use ieee.std_logic_1164 all;

              entity example is

              port(clk:in std_logic;

              mach_input:in std_logic;

              mach_outputs:out std_logic_vector(0 to 1));

              end example;

              architecture behave of example is

              constant st0:std_logic_vector(0 to 1):=00;

              constant st1 :std_logic_vector(0 to 1):=01;

              constant st2:std_logic_vector(0 to 1):=11;

              constant st3:std_logic_vector(0 to 1):=10;

              signal current_state,next_state:std_logic

              vector(0to1);

              begin

              ……

              endbebave;

              采用該方法,寄存器的狀態(tài)在相鄰狀態(tài)之間跳轉(zhuǎn)時,只有一位變化,產(chǎn)生過渡狀態(tài)的概率大大降低.但是當(dāng)狀態(tài)到下狀態(tài)有多種轉(zhuǎn)換路徑時,就不能保證狀態(tài)跳轉(zhuǎn)時只有一位變化,這樣將無法發(fā)揮格雷碼的特點(diǎn).

              2.3 定義“ONEHOT”風(fēng)格的狀態(tài)值編碼

              雖然VHDL語言的目標(biāo)之一是遠(yuǎn)離硬件,但是到目前為止并沒有完全實現(xiàn),所以VHDL程序在針對不同的器件綜合時,仍然會有很大差異.特別是FPGA器件,當(dāng)我們采用格雷表示狀態(tài)值,描述一個簡單的狀態(tài)機(jī)時,就可能出現(xiàn)不結(jié)果.在針對FPGA器件寫程序時,我們可以將狀態(tài)值定義為“ONEHOT”風(fēng)格的狀態(tài)碼,將上例稍作修改,見例3.

              例3 采用“ONEHOT”編碼的狀態(tài)機(jī)

              library ieee;

              use ieee std_logic_1164.all;

              entity example is

              port(clk:in std_logic;



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉