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

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

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

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

FPGA學(xué)習(xí)筆記 ? 來源:FPGA學(xué)習(xí)筆記 ? 作者:FPGA學(xué)習(xí)筆記 ? 2024-02-12 19:07 ? 次閱讀

verilog中狀態(tài)機(jī)的一種很常用的邏輯結(jié)構(gòu),學(xué)習(xí)和理解狀態(tài)機(jī)的運(yùn)行規(guī)律能夠幫助我們更好地書寫代碼,同時(shí)作為一種思想方法,在別的代碼設(shè)計(jì)中也會(huì)有所幫助。

一、簡介

在使用過程中我們常說的是有限狀態(tài)機(jī)(Finite-State Machine,F(xiàn)SM),簡稱為狀態(tài)機(jī),表示在有限個(gè)狀態(tài)以及這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。

二、分類

在verilog中常使用的狀態(tài)機(jī)可以分為兩類,分別是Moore(摩爾)狀態(tài)機(jī)和Mealy(米利)狀態(tài)機(jī)。兩種狀態(tài)機(jī)的主要區(qū)別在于****Moore狀態(tài)機(jī)的輸出只與當(dāng)前狀態(tài)有關(guān),與當(dāng)前輸入無關(guān);Mealy狀態(tài)機(jī)的輸出不僅與當(dāng)前狀態(tài)有關(guān),還與當(dāng)前的輸入信號有關(guān) 。

三、設(shè)計(jì)實(shí)例

在狀態(tài)機(jī)設(shè)計(jì)的過程中推薦使用三段式設(shè)計(jì),下面是三段式狀態(tài)機(jī)的基本結(jié)構(gòu):

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

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

(3)狀態(tài)機(jī)第三段,時(shí)序邏輯,非阻塞賦值,確定輸出信號 。

下面介紹一個(gè)簡單的狀態(tài)機(jī)設(shè)計(jì)實(shí)例:一個(gè)學(xué)生,一周七天周一到周五需要上學(xué),單周周六鞏固復(fù)習(xí)這一周的知識(shí),周日出去玩;雙周周六周日出去玩。可以得到狀態(tài)轉(zhuǎn)移圖如下:
image.png

設(shè)計(jì)代碼如下:

`timescale 1ns / 1ps
 ?
 module FSM(
     input        clk,
 input        rst_n,
 input  [2:0] week,
 input        odd_even,
 output [1:0] activity
 );
 ?
 parameter learn = 2'd0;
 parameter review= 2'd1;
 parameter play  = 2'd2;
 ?
 reg [1:0] st_cur;
 reg [1:0] st_next;
 ?
 always @ (posedge clk or negedge rst_n)begin //Update the current status
     if(!rst_n)begin
     st_cur <= learn;
 end
 else begin
     st_cur <= st_next;
 end
 end
 ?
 always @(*)begin //Determine the next status
     case(st_cur)
     learn:
     case(week)
     3'd5: begin
     if(odd_even)
     st_next = review;
     else
     st_next = play;
                 end
     3'd6:begin
         st_next = play;
 end
 3'd7:begin
         st_next = learn;
 end
 default:st_next = learn;
 endcase
 review: st_next = play;
 play  :
     case(week)
     3'd7: st_next = learn;
 default:    st_next = play;
 endcase
 default: st_next = st_next;
 endcase
 end
 ?
 reg [1:0] activity_r;
 ?
 always @(posedge clk or negedge rst_n)begin //Output signal
     if(!rst_n)
     activity_r <= 2'd0;
 else
         activity_r <= st_next;
 end
 ?
 assign activity = activity_r;
 ?
 endmodule

仿真代碼如下:

`timescale 1ns / 1ps
 ?
 module FSM_tb;
     reg        clk;
 reg        rst_n;
 reg  [2:0] week;
 reg        odd_even;
 wire [1:0] activity;
 initial begin
     clk      <= 1'b0;
     rst_n    <= 1'b0;
     odd_even <= 1'b0;
     week     <= 3'd1;
     #10
     rst_n <= 1'b1;
 end
 always #10
     clk = ~clk;
 always @(posedge clk)begin
     week <= week + 3'd1;
     if(week == 3'd7)begin
         odd_even <= ~odd_even;
         week     <= 3'd1;
     end
 end
 ?
 FSM fsm_inst(
     .clk(clk),
     .rst_n(rst_n),
     .week(week),
     .odd_even(odd_even),
     .activity(activity)
 );
 
 endmodule

仿真結(jié)果如下圖所示:

image.png

對狀態(tài)機(jī)的理解需要大量的實(shí)際操作,孰能生巧,在我學(xué)習(xí)的過程中老師曾要求我們用狀態(tài)機(jī)寫 萬年歷 ,對于感興趣的同學(xué)來說也可以進(jìn)行嘗試。

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

    關(guān)注

    28

    文章

    1333

    瀏覽量

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

    關(guān)注

    2

    文章

    489

    瀏覽量

    27391
收藏 人收藏

    評論

    相關(guān)推薦

    狀態(tài)機(jī)編程實(shí)例-狀態(tài)表法

    上篇文章,使用嵌套switch-case法的狀態(tài)機(jī)編程,實(shí)現(xiàn)了一個(gè)炸彈拆除小游戲。本篇,繼續(xù)介紹狀態(tài)機(jī)編程的第二種方法:狀態(tài)表法,來實(shí)現(xiàn)炸彈拆除小游戲的狀態(tài)機(jī)編程。
    的頭像 發(fā)表于 06-20 09:05 ?1769次閱讀
    <b class='flag-5'>狀態(tài)機(jī)</b>編程<b class='flag-5'>實(shí)例</b>-<b class='flag-5'>狀態(tài)</b>表法

    狀態(tài)機(jī)編程實(shí)例-面向?qū)ο蟮?b class='flag-5'>狀態(tài)設(shè)計(jì)模式

    本編介紹了狀態(tài)機(jī)編程的第3種方法——面向?qū)ο蟮?b class='flag-5'>狀態(tài)設(shè)計(jì)模式,通過C++的繼承特性,以及類指針,實(shí)現(xiàn)炸彈拆除小游戲中的狀態(tài)機(jī)功能。
    的頭像 發(fā)表于 06-28 09:04 ?1214次閱讀
    <b class='flag-5'>狀態(tài)機(jī)</b>編程<b class='flag-5'>實(shí)例</b>-面向?qū)ο蟮?b class='flag-5'>狀態(tài)</b>設(shè)計(jì)模式

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

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

    狀態(tài)機(jī)實(shí)例(VHDL源代碼)

    狀態(tài)機(jī)實(shí)例(VHDL源代碼):
    發(fā)表于 05-27 10:27 ?59次下載
    <b class='flag-5'>狀態(tài)機(jī)</b><b class='flag-5'>實(shí)例</b>(VHDL源代碼)

    狀態(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ī)的工控系統(tǒng)軟件設(shè)計(jì)

    本文詳 細(xì)論述了高速狀態(tài)機(jī)的錯(cuò)步問題以及控制層中狀態(tài)機(jī)狀態(tài)劃分問題,結(jié)合具體的應(yīng)用實(shí)例,給出了基于狀態(tài)機(jī)的實(shí)現(xiàn)方法。
    發(fā)表于 03-22 15:48 ?3次下載

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

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

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

    本篇文章包括狀態(tài)機(jī)的基本概述以及通過簡單的實(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ī)簡述

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

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

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

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

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

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

    有限狀態(tài)機(jī)(Finite-State Machine,F(xiàn)SM),簡稱狀態(tài)機(jī),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)模型。
    的頭像 發(fā)表于 06-01 15:23 ?1654次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>狀態(tài)機(jī)</b>的類型

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

    狀態(tài)機(jī),又稱有限狀態(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 ?8040次閱讀