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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Verilog狀態(tài)機+設計實例

FPGA學習筆記 ? 來源:FPGA學習筆記 ? 作者:FPGA學習筆記 ? 2024-02-12 19:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

verilog中狀態(tài)機的一種很常用的邏輯結構,學習和理解狀態(tài)機的運行規(guī)律能夠幫助我們更好地書寫代碼,同時作為一種思想方法,在別的代碼設計中也會有所幫助。

一、簡介

在使用過程中我們常說的是有限狀態(tài)機(Finite-State Machine,FSM),簡稱為狀態(tài)機,表示在有限個狀態(tài)以及這些狀態(tài)之間的轉移和動作等行為的數學模型。

二、分類

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

三、設計實例

在狀態(tài)機設計的過程中推薦使用三段式設計,下面是三段式狀態(tài)機的基本結構:

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

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

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

下面介紹一個簡單的狀態(tài)機設計實例:一個學生,一周七天周一到周五需要上學,單周周六鞏固復習這一周的知識,周日出去玩;雙周周六周日出去玩??梢缘玫綘顟B(tài)轉移圖如下:
image.png

設計代碼如下:

`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

仿真結果如下圖所示:

image.png

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

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

    關注

    29

    文章

    1367

    瀏覽量

    112217
  • 狀態(tài)機
    +關注

    關注

    2

    文章

    493

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    狀態(tài)機編程實例-狀態(tài)表法

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

    狀態(tài)機編程實例-面向對象的狀態(tài)設計模式

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

    verilog狀態(tài)機問題

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

    狀態(tài)機實例(VHDL源代碼)

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

    狀態(tài)機舉例

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

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

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

    基于有限狀態(tài)機的工控系統(tǒng)軟件設計

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

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

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

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

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

    使用verilog HDL實現狀態(tài)機8位流水燈的程序和工程文件免費下載

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

    FPGA:狀態(tài)機簡述

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

    Verilog設計過程中狀態(tài)機的設計方法

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

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

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

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

    有限狀態(tài)機(Finite-State Machine,FSM),簡稱狀態(tài)機,是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉移和動作等行為的數學模型。
    的頭像 發(fā)表于 06-01 15:23 ?2275次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>狀態(tài)機</b>的類型

    什么是狀態(tài)機狀態(tài)機的種類與實現

    狀態(tài)機,又稱有限狀態(tài)機(Finite State Machine,FSM)或米利狀態(tài)機(Mealy Machine),是一種描述系統(tǒng)狀態(tài)變化的模型。在芯片設計中,
    的頭像 發(fā)表于 10-19 10:27 ?1.2w次閱讀