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

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

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

Verilog狀態(tài)機(jī)的類(lèi)型

冬至子 ? 來(lái)源:數(shù)字IC與好好生活的兩居室 ? 作者:除夕之夜啊 ? 2023-06-01 15:23 ? 次閱讀

有限狀態(tài)機(jī)(Finite-State Machine,F(xiàn)SM),簡(jiǎn)稱(chēng)狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。狀態(tài)機(jī)不僅是一種電路的描述工具,而且也是一種思想方法,在電路設(shè)計(jì)的系統(tǒng)級(jí)和 RTL 級(jí)有著廣泛的應(yīng)用。

狀態(tài)機(jī)類(lèi)型

Verilog 中狀態(tài)機(jī)主要用于同步時(shí)序邏輯的設(shè)計(jì),能夠在有限個(gè)狀態(tài)之間按一定要求和規(guī)律切換時(shí)序電路的狀態(tài)。狀態(tài)的切換方向不但取決于各個(gè)輸入值,還取決于當(dāng)前所在狀態(tài)。

狀態(tài)機(jī)可分為 2 類(lèi):Moore 狀態(tài)機(jī)和 Mealy 狀態(tài)機(jī)。

◆Moore 型狀態(tài)機(jī)

Moore 型狀態(tài)機(jī)的輸出只與當(dāng)前狀態(tài)有關(guān),與當(dāng)前輸入無(wú)關(guān)。

輸出會(huì)在一個(gè)完整的時(shí)鐘周期內(nèi)保持穩(wěn)定,即使此時(shí)輸入信號(hào)有變化,輸出也不會(huì)變化。輸入對(duì)輸出的影響要到下一個(gè)時(shí)鐘周期才能反映出來(lái)。這也是 Moore 型狀態(tài)機(jī)的一個(gè)重要特點(diǎn):輸入與輸出是隔離開(kāi)來(lái)的。

圖片

◆Mealy 型狀態(tài)機(jī)

Mealy 型狀態(tài)機(jī)的輸出,不僅與當(dāng)前狀態(tài)有關(guān),還取決于當(dāng)前的輸入信號(hào)。

Mealy 型狀態(tài)機(jī)的輸出是在輸入信號(hào)變化以后立刻發(fā)生變化,且輸入變化可能出現(xiàn)在任何狀態(tài)的時(shí)鐘周期內(nèi)。因此,同種邏輯下,Mealy 型狀態(tài)機(jī)輸出對(duì)輸入的響應(yīng)會(huì)比 Moore 型狀態(tài)機(jī)早一個(gè)時(shí)鐘周期。

圖片

◆狀態(tài)機(jī)設(shè)計(jì)流程

根據(jù)設(shè)計(jì)需求畫(huà)出狀態(tài)轉(zhuǎn)移圖,確定使用狀態(tài)機(jī)類(lèi)型,并標(biāo)注出各種輸入輸出信號(hào),更有助于編程。一般使用最多的是 Mealy 型 3 段式狀態(tài)機(jī),下面用通過(guò)設(shè)計(jì)一個(gè)自動(dòng)售賣(mài)機(jī)的具體實(shí)例來(lái)說(shuō)明狀態(tài)機(jī)的設(shè)計(jì)過(guò)程。

自動(dòng)售賣(mài)機(jī)

◆自動(dòng)售賣(mài)機(jī)的功能描述如下。

飲料單價(jià) 2 元,該售賣(mài)機(jī)只能接受 0.5 元、1 元的硬幣??紤]找零和出貨。投幣和出貨過(guò)程都是一次一次的進(jìn)行,不會(huì)出現(xiàn)一次性投入多幣或一次性出貨多瓶飲料的現(xiàn)象。每一輪售賣(mài)機(jī)接受投幣、出貨、找零完成后,才能進(jìn)入到新的自動(dòng)售賣(mài)狀態(tài)。

◆該售賣(mài)機(jī)的工作狀態(tài)轉(zhuǎn)移圖如下所示,包含了輸入、輸出信號(hào)狀態(tài)。

其中,coin = 1 代表投入了 0.5 元硬幣,coin = 2 代表投入了 1 元硬幣。

圖片

狀態(tài)機(jī)設(shè)計(jì):3 段式(推薦

◆狀態(tài)機(jī)設(shè)計(jì)如下。

(0) 首先,根據(jù)狀態(tài)機(jī)的個(gè)數(shù)確定狀態(tài)機(jī)編碼。利用編碼給狀態(tài)寄存器賦值,代碼可讀性更好。

(1) 狀態(tài)機(jī)第一段,時(shí)序邏輯,非阻塞賦值,傳遞寄存器的狀態(tài)。

(2) 狀態(tài)機(jī)第二段,組合邏輯,阻塞賦值,根據(jù)當(dāng)前狀態(tài)和當(dāng)前輸入,確定下一個(gè)狀態(tài)機(jī)的狀態(tài)。

(3) 狀態(tài)機(jī)第三代,時(shí)序邏輯,非阻塞賦值,因?yàn)槭?Mealy 型狀態(tài)機(jī),根據(jù)當(dāng)前狀態(tài)和當(dāng)前輸入,確定輸出信號(hào)。

// vending-machine
// 2 yuan for a bottle of drink
// only 2 coins supported: 5 jiao and 1 yuan
// finish the function of selling and changing


module  vending_machine_p3  (
    input           clk ,
    input           rstn ,
    input [1:0]     coin ,     //01 for 0.5 jiao, 10 for 1 yuan


    output [1:0]    change ,
    output          sell    //output the drink
    );


    //machine state decode
    parameter            IDLE   = 3'd0 ;
    parameter            GET05  = 3'd1 ;
    parameter            GET10  = 3'd2 ;
    parameter            GET15  = 3'd3 ;


    //machine variable
    reg [2:0]            st_next ;
    reg [2:0]            st_cur ;


    //(1) state transfer
    always @(posedge clk or negedge rstn) begin
        if (!rstn) begin
            st_cur      <= 'b0 ;
        end
        else begin
            st_cur      <= st_next ;
        end
    end


    //(2) state switch, using block assignment for combination-logic
    //all case items need to be displayed completely    
    always @(*) begin 
        //st_next = st_cur ;//如果條件選項(xiàng)考慮不全,可以賦初值消除latch
        case(st_cur)
            IDLE:
                case (coin)
                    2'b01:     st_next = GET05 ;
                    2'b10:     st_next = GET10 ;
                    default:   st_next = IDLE ;
                endcase
            GET05:
                case (coin)
                    2'b01:     st_next = GET10 ;
                    2'b10:     st_next = GET15 ;
                    default:   st_next = GET05 ;
                endcase


            GET10:
                case (coin)
                    2'b01:     st_next = GET15 ;
                    2'b10:     st_next = IDLE ;
                    default:   st_next = GET10 ;
                endcase
            GET15:
                case (coin)
                    2'b01,2'b10:
                               st_next = IDLE ;
                    default:   st_next = GET15 ;
                endcase
            default:    st_next = IDLE ;
        endcase
    end


    //(3) output logic, using non-block assignment
    reg  [1:0]   change_r ;
    reg          sell_r ;
    always @(posedge clk or negedge rstn) begin
        if (!rstn) begin
            change_r       <= 2'b0 ;
            sell_r         <= 1'b0 ;
        end
        else if ((st_cur == GET15 && coin ==2'h1)
               || (st_cur == GET10 && coin ==2'd2)) begin
            change_r       <= 2'b0 ;
            sell_r         <= 1'b1 ;
        end
        else if (st_cur == GET15 && coin == 2'h2) begin
            change_r       <= 2'b1 ;
            sell_r         <= 1'b1 ;
        end
        else begin
            change_r       <= 2'b0 ;
            sell_r         <= 1'b0 ;
        end
    end
    assign       sell    = sell_r ;
    assign       change  = change_r ;


endmodule

◆testbench 設(shè)計(jì)如下。

仿真中模擬了 4 種情景,分別是:

case1 對(duì)應(yīng)連續(xù)輸入 4 個(gè) 5 角硬幣;

case2 對(duì)應(yīng) 1 元 - 5 角 - 1 元的投幣順序;

case3 對(duì)應(yīng) 5 角 - 1 元 - 5 角的投幣順序;

case4 對(duì)應(yīng)連續(xù) 3 個(gè) 5 角然后一個(gè) 1 元的投幣順序。

`timescale 1ns/1ps


module test ;
    reg          clk;
    reg          rstn ;
    reg [1:0]    coin ;
    wire [1:0]   change ;
    wire         sell ;


    //clock generating
    parameter    CYCLE_200MHz = 10 ; //
    always begin
        clk = 0 ; #(CYCLE_200MHz/2) ;
        clk = 1 ; #(CYCLE_200MHz/2) ;
    end


    //motivation generating
    reg [9:0]    buy_oper ; //store state of the buy operation
    initial begin
        buy_oper  = 'h0 ;
        coin      = 2'h0 ;
        rstn      = 1'b0 ;
        #8 rstn   = 1'b1 ;
        @(negedge clk) ;


        //case(1) 0.5 - > 0.5 - > 0.5 - > 0.5
        #16 ;
        buy_oper  = 10'b00_0101_0101 ;
        repeat(5) begin
            @(negedge clk) ;
            coin      = buy_oper[1:0] ;
            buy_oper  = buy_oper > > 2 ;
        end


        //case(2) 1 - > 0.5 - > 1, taking change
        #16 ;
        buy_oper  = 10'b00_0010_0110 ;
        repeat(5) begin
            @(negedge clk) ;
            coin      = buy_oper[1:0] ;
            buy_oper  = buy_oper > > 2 ;
        end


        //case(3) 0.5 - > 1 - > 0.5
        #16 ;
        buy_oper  = 10'b00_0001_1001 ;
        repeat(5) begin
            @(negedge clk) ;
            coin      = buy_oper[1:0] ;
            buy_oper  = buy_oper > > 2 ;
        end


        //case(4) 0.5 - > 0.5 - > 0.5 - > 1, taking change
        #16 ;
        buy_oper  = 10'b00_1001_0101 ;
        repeat(5) begin
            @(negedge clk) ;
            coin      = buy_oper[1:0] ;
            buy_oper  = buy_oper > > 2 ;
        end
    end


   //(1) mealy state with 3-stage
    vending_machine_p3    u_mealy_p3     (
        .clk              (clk),
        .rstn             (rstn),
        .coin             (coin),
        .change           (change),
        .sell             (sell)
        );


   //simulation finish
   always begin
      #100;
      if ($time >= 10000)  $finish ;
   end


endmodule

◆仿真結(jié)果如下。

由圖可知,代表出貨動(dòng)作的信號(hào) sell 都能在投幣完畢后正常的拉高,而代表找零動(dòng)作的信號(hào) change 也都能根據(jù)輸入的硬幣場(chǎng)景輸出正確的是否找零信號(hào)。

圖片

狀態(tài)機(jī)修改:2 段式

◆將 3 段式狀態(tài)機(jī) 2、3 段描述合并,其他部分保持不變,狀態(tài)機(jī)就變成了 2 段式描述。

修改部分如下:

//(2) state switch, and output logic
    //all using block assignment for combination-logic
    reg  [1:0]   change_r ;
    reg          sell_r ;
    always @(*) begin //all case items need to be displayed completely
        case(st_cur)
            IDLE: begin
                change_r     = 2'b0 ;
                sell_r       = 1'b0 ;
                case (coin)
                    2'b01:     st_next = GET05 ;
                    2'b10:     st_next = GET10 ;
                    default:   st_next = IDLE ;
                endcase // case (coin)
            end
            GET05: begin
                change_r     = 2'b0 ;
                sell_r       = 1'b0 ;
                case (coin)
                    2'b01:     st_next = GET10 ;
                    2'b10:     st_next = GET15 ;
                    default:   st_next = GET05 ;
                endcase // case (coin)
            end


            GET10:
                case (coin)
                    2'b01:     begin
                        st_next      = GET15 ;
                        change_r     = 2'b0 ;
                        sell_r       = 1'b0 ;
                    end
                    2'b10:     begin
                        st_next      = IDLE ;
                        change_r     = 2'b0 ;
                        sell_r       = 1'b1 ;
                    end
                    default:   begin
                        st_next      = GET10 ;
                        change_r     = 2'b0 ;
                        sell_r       = 1'b0 ;
                    end
                endcase // case (coin)


            GET15:
                case (coin)
                    2'b01: begin
                        st_next     = IDLE ;
                        change_r    = 2'b0 ;
                        sell_r      = 1'b1 ;
                    end
                    2'b10:     begin
                        st_next     = IDLE ;
                        change_r    = 2'b1 ;
                        sell_r      = 1'b1 ;
                    end
                    default:   begin
                        st_next     = GET15 ;
                        change_r    = 2'b0 ;
                        sell_r      = 1'b0 ;
                    end
                endcase
            default:  begin
                st_next     = IDLE ;
                change_r    = 2'b0 ;
                sell_r      = 1'b0 ;
            end


        endcase
    end

◆將上述修改的新模塊例化到 3 段式的 testbench 中即可進(jìn)行仿真,結(jié)果如下。

由圖可知,出貨信號(hào) sell 和 找零信號(hào) change 相對(duì)于 3 段式狀態(tài)機(jī)輸出提前了一個(gè)時(shí)鐘周期,這是因?yàn)檩敵鲂盘?hào)都是阻塞賦值導(dǎo)致的。

如圖中紅色圓圈部分,輸出信號(hào)都出現(xiàn)了干擾脈沖,這是因?yàn)檩斎胄盘?hào)都是異步的,而且輸出信號(hào)是組合邏輯輸出,沒(méi)有時(shí)鐘驅(qū)動(dòng)。

實(shí)際中,如果輸入信號(hào)都是與時(shí)鐘同步的,這種干擾脈沖是不會(huì)出現(xiàn)的。如果是異步輸入信號(hào),首先應(yīng)當(dāng)對(duì)信號(hào)進(jìn)行同步。

圖片

狀態(tài)機(jī)修改:1 段式(慎用)

◆將 3 段式狀態(tài)機(jī) 1、 2、3 段描述合并,狀態(tài)機(jī)就變成了 1 段式描述。

修改部分如下:

//(1) using one state-variable do describe
    reg  [1:0]   change_r ;
    reg          sell_r ;
    always @(posedge clk or negedge rstn) begin
        if (!rstn) begin
            st_cur     <= 'b0 ;
            change_r   <= 2'b0 ;
            sell_r     <= 1'b0 ;
        end
        else begin
            case(st_cur)


            IDLE: begin
                change_r  <= 2'b0 ;
                sell_r    <= 1'b0 ;
                case (coin)
                    2'b01:     st_cur <= GET05 ;
                    2'b10:     st_cur <= GET10 ;
                endcase
            end
            GET05: begin
                case (coin)
                    2'b01:     st_cur <= GET10 ;
                    2'b10:     st_cur <= GET15 ;
                endcase
            end


            GET10:
                case (coin)
                    2'b01:     st_cur   <=  GET15 ;
                    2'b10:     begin
                        st_cur   <= IDLE ;
                        sell_r   <= 1'b1 ;
                    end
                endcase


            GET15:
                case (coin)
                    2'b01:     begin
                        st_cur   <= IDLE ;
                        sell_r   <= 1'b1 ;
                    end
                    2'b10:     begin
                        st_cur   <= IDLE ;
                        change_r <= 2'b1 ;
                        sell_r   <= 1'b1 ;
                    end
                endcase


            default:  begin
                  st_cur    <= IDLE ;
            end


            endcase // case (st_cur)
        end // else: !if(!rstn)
    end

◆將上述修改的新模塊例化到 3 段式的 testbench 中即可進(jìn)行仿真,結(jié)果如下。

由圖可知,輸出信號(hào)與 3 段式狀態(tài)機(jī)完全一致。

1 段式狀態(tài)機(jī)的缺點(diǎn)就是許多種邏輯糅合在一起,不易后期的維護(hù)。當(dāng)狀態(tài)機(jī)和輸出信號(hào)較少時(shí),可以嘗試此種描述方式。

圖片

狀態(tài)機(jī)修改:Moore 型

如果使用 Moore 型狀態(tài)機(jī)描述售賣(mài)機(jī)的工作流程,那么還需要再增加 2 個(gè)狀態(tài)編碼,用以描述 Mealy 狀態(tài)機(jī)輸出時(shí)的輸入信號(hào)和狀態(tài)機(jī)狀態(tài)。

3 段式 Moore 型狀態(tài)機(jī)描述的自動(dòng)售賣(mài)機(jī) Verilog 代碼如下:

module  vending_machine_moore    (
    input           clk ,
    input           rstn ,
    input [1:0]     coin ,     //01 for 0.5 jiao, 10 for 1 yuan
    output [1:0]    change ,
    output          sell    //output the drink
    );


    //machine state decode
    parameter            IDLE   = 3'd0 ;
    parameter            GET05  = 3'd1 ;
    parameter            GET10  = 3'd2 ;
    parameter            GET15  = 3'd3 ;
    // new state for moore state-machine
    parameter            GET20  = 3'd4 ;
    parameter            GET25  = 3'd5 ;


    //machine variable
    reg [2:0]            st_next ;
    reg [2:0]            st_cur ;


    //(1) state transfer
    always @(posedge clk or negedge rstn) begin
        if (!rstn) begin
            st_cur      <= 'b0 ;
        end
        else begin
            st_cur      <= st_next ;
        end
    end


    //(2) state switch, using block assignment for combination-logic
    always @(*) begin //all case items need to be displayed completely
        case(st_cur)
            IDLE:
                case (coin)
                    2'b01:     st_next = GET05 ;
                    2'b10:     st_next = GET10 ;
                    default:   st_next = IDLE ;
                endcase
            GET05:
                case (coin)
                    2'b01:     st_next = GET10 ;
                    2'b10:     st_next = GET15 ;
                    default:   st_next = GET05 ;
                endcase


            GET10:
                case (coin)
                    2'b01:     st_next = GET15 ;
                    2'b10:     st_next = GET20 ;
                    default:   st_next = GET10 ;
                endcase
            GET15:
                case (coin)
                    2'b01:     st_next = GET20 ;
                    2'b10:     st_next = GET25 ;
                    default:   st_next = GET15 ;
                endcase
            GET20:         st_next = IDLE ;
            GET25:         st_next = IDLE ;
            default:       st_next = IDLE ;
        endcase // case (st_cur)
    end // always @ (*)


   // (3) output logic,
   // one cycle delayed when using non-block assignment
    reg  [1:0]   change_r ;
    reg          sell_r ;
    always @(posedge clk or negedge rstn) begin
        if (!rstn) begin
            change_r       <= 2'b0 ;
            sell_r         <= 1'b0 ;
        end
        else if (st_cur == GET20 ) begin
            sell_r         <= 1'b1 ;
        end
        else if (st_cur == GET25) begin
            change_r       <= 2'b1 ;
            sell_r         <= 1'b1 ;
        end
        else begin
            change_r       <= 2'b0 ;
            sell_r         <= 1'b0 ;
        end
    end
    assign       sell    = sell_r ;
    assign       change  = change_r ;


endmodule

◆將上述修改的 Moore 狀態(tài)機(jī)例化到 3 段式的 testbench 中即可進(jìn)行仿真,結(jié)果如下。

由圖可知,輸出信號(hào)與 Mealy 型 3 段式狀態(tài)機(jī)相比延遲了一個(gè)時(shí)鐘周期,這是因?yàn)檫M(jìn)入到新增加的編碼狀態(tài)機(jī)時(shí)需要一個(gè)時(shí)鐘周期的時(shí)延。此時(shí),輸出再用非阻塞賦值就會(huì)導(dǎo)致最終的輸出信號(hào)延遲一個(gè)時(shí)鐘周期。這也屬于 Moore 型狀態(tài)機(jī)的特點(diǎn)。

圖片

◆輸出信號(hào)賦值時(shí),用阻塞賦值,則可以提前一個(gè)時(shí)鐘周期。

輸出邏輯修改如下。

// (3.2) output logic, using block assignment
    reg  [1:0]   change_r ;
    reg          sell_r ;
    always @(*) begin
        change_r  = 'b0 ;
        sell_r    = 'b0 ; //not list all condition, initializing them
        if (st_cur == GET20 ) begin
            sell_r         = 1'b1 ;
        end
        else if (st_cur == GET25) begin
            change_r       = 2'b1 ;
            sell_r         = 1'b1 ;
        end
    end

◆輸出信號(hào)阻塞賦值的仿真結(jié)果如下。

由圖可知,輸出信號(hào)已經(jīng)和 3 段式 Mealy 型狀態(tài)機(jī)一致。

圖片

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

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109712
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    384

    瀏覽量

    59515
  • 有限狀態(tài)機(jī)

    關(guān)注

    0

    文章

    52

    瀏覽量

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

    關(guān)注

    2

    文章

    489

    瀏覽量

    27391
  • fsm
    fsm
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    12788
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用枚舉類(lèi)型表示狀態(tài)機(jī)進(jìn)入死循環(huán)

    在定義狀態(tài)機(jī)中的狀態(tài)時(shí),除了可以使用宏(define)或者參數(shù)(parameter)聲明定義外,還可以使用枚舉類(lèi)型
    的頭像 發(fā)表于 11-07 17:46 ?776次閱讀
    使用枚舉<b class='flag-5'>類(lèi)型</b>表示<b class='flag-5'>狀態(tài)機(jī)</b>進(jìn)入死循環(huán)

    Verilog狀態(tài)機(jī)+設(shè)計(jì)實(shí)例

    verilog狀態(tài)機(jī)的一種很常用的邏輯結(jié)構(gòu),學(xué)習(xí)和理解狀態(tài)機(jī)的運(yùn)行規(guī)律能夠幫助我們更好地書(shū)寫(xiě)代碼,同時(shí)作為一種思想方法,在別的代碼設(shè)計(jì)中也會(huì)有所幫助。 一、簡(jiǎn)介 在使用過(guò)程中我們常說(shuō)
    的頭像 發(fā)表于 02-12 19:07 ?3160次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>狀態(tài)機(jī)</b>+設(shè)計(jì)實(shí)例

    verilog狀態(tài)機(jī)問(wèn)題

    波形仿真時(shí)verilog 寫(xiě)的狀態(tài)機(jī)被綜合掉,編譯沒(méi)有錯(cuò)誤,狀態(tài)轉(zhuǎn)移也沒(méi)錯(cuò),什么原因可能導(dǎo)致這種問(wèn)題呢。
    發(fā)表于 10-05 11:31

    有限狀態(tài)機(jī)有什么類(lèi)型?

    在實(shí)際的應(yīng)用中,根據(jù)有限狀態(tài)機(jī)是否使用輸入信號(hào),設(shè)計(jì)人員經(jīng)常將其分為Moore型有限狀態(tài)機(jī)和Mealy型有限狀態(tài)機(jī)兩種類(lèi)型。
    發(fā)表于 04-06 09:00

    狀態(tài)機(jī)是什么?什么是消息觸發(fā)類(lèi)型狀態(tài)機(jī)?

    狀態(tài)機(jī)可歸納為哪幾個(gè)要素?狀態(tài)機(jī)可分為哪幾種?什么是消息觸發(fā)類(lèi)型狀態(tài)機(jī)?
    發(fā)表于 04-19 06:02

    以一種更優(yōu)雅的方式去實(shí)現(xiàn)一個(gè)Verilog版的狀態(tài)機(jī)

    事兒做邏輯設(shè)計(jì)的小伙伴都寫(xiě)過(guò)狀態(tài)機(jī),寫(xiě)法也都是大同小異,照著描述就OK了,看下下面這個(gè)狀態(tài)機(jī)設(shè)計(jì):功能很簡(jiǎn)單,手動(dòng)實(shí)現(xiàn)一個(gè)Verilog版的狀態(tài)機(jī)并不復(fù)雜,無(wú)非這么來(lái)搞:這只是一個(gè)簡(jiǎn)單
    發(fā)表于 07-13 14:56

    狀態(tài)機(jī)舉例

    狀態(tài)機(jī)舉例 你可以指定狀態(tài)寄存器和狀態(tài)機(jī)狀態(tài)。以下是一個(gè)有四種狀態(tài)的普通狀態(tài)機(jī)。 // Th
    發(fā)表于 03-28 15:18 ?943次閱讀

    狀態(tài)機(jī)原理及用法

    狀態(tài)機(jī)原理及用法狀態(tài)機(jī)原理及用法狀態(tài)機(jī)原理及用法
    發(fā)表于 03-15 15:25 ?0次下載

    有限狀態(tài)機(jī)的建模與優(yōu)化設(shè)計(jì)

    本文提出一種優(yōu)秀 、高效的 Verilog HDL 描述方式來(lái)進(jìn)行有限狀態(tài)機(jī)設(shè)計(jì) 介紹了 有限狀態(tài)機(jī)的建模原則 并通過(guò)一個(gè)可綜合的實(shí)例 驗(yàn)證了 該方法設(shè)計(jì)的有限狀態(tài)機(jī)在面積和功耗上的優(yōu)
    發(fā)表于 03-22 15:19 ?1次下載

    狀態(tài)機(jī)概述 如何理解狀態(tài)機(jī)

    本篇文章包括狀態(tài)機(jī)的基本概述以及通過(guò)簡(jiǎn)單的實(shí)例理解狀態(tài)機(jī)
    的頭像 發(fā)表于 01-02 18:03 ?1w次閱讀
    <b class='flag-5'>狀態(tài)機(jī)</b>概述  如何理解<b class='flag-5'>狀態(tài)機(jī)</b>

    使用verilog HDL實(shí)現(xiàn)狀態(tài)機(jī)8位流水燈的程序和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用verilog HDL實(shí)現(xiàn)狀態(tài)機(jī)8位流水燈的程序和工程文件免費(fèi)下載。
    發(fā)表于 10-16 16:20 ?23次下載
    使用<b class='flag-5'>verilog</b> HDL實(shí)現(xiàn)<b class='flag-5'>狀態(tài)機(jī)</b>8位流水燈的程序和工程文件免費(fèi)下載

    FPGA:狀態(tài)機(jī)簡(jiǎn)述

    本文目錄 前言 狀態(tài)機(jī)簡(jiǎn)介 狀態(tài)機(jī)分類(lèi) Mealy 型狀態(tài)機(jī) Moore 型狀態(tài)機(jī) 狀態(tài)機(jī)描述 一段式
    的頭像 發(fā)表于 11-05 17:58 ?7096次閱讀
    FPGA:<b class='flag-5'>狀態(tài)機(jī)</b>簡(jiǎn)述

    Verilog設(shè)計(jì)過(guò)程中狀態(tài)機(jī)的設(shè)計(jì)方法

    “本文主要分享了在Verilog設(shè)計(jì)過(guò)程中狀態(tài)機(jī)的一些設(shè)計(jì)方法。 關(guān)于狀態(tài)機(jī) 狀態(tài)機(jī)本質(zhì)是對(duì)具有邏輯順序或時(shí)序順序事件的一種描述方法,也就是說(shuō)具有邏輯順序和時(shí)序規(guī)律的事情都適用
    的頭像 發(fā)表于 06-25 11:04 ?2464次閱讀

    如何在Verilog中創(chuàng)建有限狀態(tài)機(jī)

    本文描述了有限狀態(tài)機(jī)的基礎(chǔ)知識(shí),并展示了在 Verilog 硬件描述語(yǔ)言中實(shí)現(xiàn)它們的實(shí)用方法。
    的頭像 發(fā)表于 04-26 16:20 ?3294次閱讀
    如何在<b class='flag-5'>Verilog</b>中創(chuàng)建有限<b class='flag-5'>狀態(tài)機(jī)</b>

    什么是狀態(tài)機(jī)?狀態(tài)機(jī)的種類(lèi)與實(shí)現(xiàn)

    狀態(tài)機(jī),又稱(chēng)有限狀態(tài)機(jī)(Finite State Machine,F(xiàn)SM)或米利狀態(tài)機(jī)(Mealy Machine),是一種描述系統(tǒng)狀態(tài)變化的模型。在芯片設(shè)計(jì)中,
    的頭像 發(fā)表于 10-19 10:27 ?8041次閱讀