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

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

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

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

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

冬至子 ? 來源:芯光燦爛 ? 作者:Tianya ? 2023-11-07 17:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在定義狀態(tài)機中的狀態(tài)時,除了可以使用宏(define)或者參數(shù)(parameter)聲明定義外,還可以使用枚舉類型,但是如果對于枚舉類型使用不正確的話,極易出現(xiàn)編譯仿真均沒有報錯,但是仿真時狀態(tài)機跳轉(zhuǎn)異常的情況.

本文將針對這種情況進行示例說明并給出解決方法.

1 數(shù)據(jù)類型

Verilog中所有的變量和線網(wǎng)都是4值數(shù)據(jù)類型,但在SystemVerilog中,對信號類型和數(shù)據(jù)類型進行了詳細的區(qū)分,其中信號類型保持與Verilog一樣,主要分為變量和線網(wǎng)類型,但是數(shù)據(jù)類型分為了2值類型(0和1)和4值類型(0,1,x和z),對信號的數(shù)據(jù)類型進行了擴展,但是保持了線網(wǎng)類型原有的數(shù)據(jù)類型,在默認狀態(tài)下,4值數(shù)據(jù)類型的默認值為x,2值類型的默認值為0.同時SystemVerilog結(jié)合C語言的特性,引入了其他一些類型,例如枚舉類型等,通過多種類型的引入,極大地豐富了SystemVerilog進行程序設計的靈活性.

圖片

2 枚舉類型

用戶可以通過枚舉類型定義特定的常量值的集合.

格式:

圖片

使用方式如下:

圖片

枚舉常量代表該枚舉類型的變量的可能取值的列表,編譯系統(tǒng)為每個枚舉常量指定一個數(shù)值,缺省狀態(tài)下這個數(shù)值從0開始,且數(shù)據(jù)類型為int,即2值型的整型.

3 問題描述

對下述代碼進行仿真時,狀態(tài)跳轉(zhuǎn)執(zhí)行異常,核心代碼如下:

圖片

當上述狀態(tài)機運行時,狀態(tài)機將一直處于WAIT狀態(tài),狀態(tài)執(zhí)行異常.

4 問題分析

這里需要注意到,枚舉常量列表中的枚舉常量在缺省狀態(tài)下,枚舉常量的數(shù)值是從0開始遞增.且2值數(shù)據(jù)類型變量的初始值為0.所以在此例中,state_e和nstate_e的初始狀態(tài)都為0,即WAIT.當復位撤銷后,state_e和nstate_e都為WAIT,那么組合邏輯部分always@(state_e)的敏感信號列表中的state_e將一直保持在WAIT狀態(tài),所以該部分組合邏輯將不會被執(zhí)行,從而導致nstate_e狀態(tài)不會被更新,因此,狀態(tài)既不能推進,將一直保持在初始的WAIT狀態(tài).

5 解決方法

出現(xiàn)上述問題主要是因為代碼中組合邏輯部分的敏感信號列表中的變量沒有發(fā)生變化,從而沒有出發(fā)進程的執(zhí)行導致的,因此,解決方法主要是實現(xiàn)組合邏輯部分的有效執(zhí)行,實現(xiàn)nstate_e的變化.

5.1 使用always_comb結(jié)構(gòu)

always_comb在仿真開始的0時刻會自動調(diào)用一次,從而可以實現(xiàn)nstate_e狀態(tài)的更新,將組合結(jié)構(gòu)中的always@(state_e)替換為always_comb即可.

5.2 將枚舉變量的數(shù)據(jù)類型指定為4值類型,如下所示:

圖片

在仿真開始時,因為枚舉類型的數(shù)據(jù)類型為logic型,所以變量state_e和nstate_e的默認狀態(tài)都為x態(tài),那么在復位階段state_e被初始化為WAIT時,組合邏輯部分的always@(state_e

中的敏感信號state_e狀態(tài)從x態(tài)變化到了WAIT,即狀態(tài)發(fā)生變化,觸發(fā)組合邏輯部分進程的執(zhí)行,nstate_e會被更新為LOAD,從而可以實現(xiàn)狀態(tài)機的推進.

5.3 指定枚舉常量的初始值

枚舉列表中的枚舉常量列表中的第一個常量,默認初始值為0-,其后常量數(shù)值依次遞增,但是這個起始值也可以在枚舉類型聲明定義時指定為其他值,從而可以使2值型枚舉變量的初始狀態(tài)-與枚舉變量列表中的常量起始值不一樣,在復位階段state_e被更新為非零值時,更新后的值與類型的默認值0不一樣,從而也可以實現(xiàn)組合邏輯部分敏感信號列表中信號的變化,從而使組合邏輯中的nstate_e狀態(tài)可以被更新,推進狀態(tài)機的運行,示例如下:

圖片

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

    關注

    14

    文章

    1039

    瀏覽量

    85442
  • Verilog
    +關注

    關注

    29

    文章

    1367

    瀏覽量

    112321
  • C語言
    +關注

    關注

    180

    文章

    7632

    瀏覽量

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

    關注

    2

    文章

    493

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    的是有限狀態(tài)機(Finite-State Machine,F(xiàn)SM),簡稱為狀態(tài)機,表示在有限個狀態(tài)以及這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學模
    的頭像 發(fā)表于 02-12 19:07 ?5479次閱讀
    Verilog<b class='flag-5'>狀態(tài)機</b>+設計實例

    labview狀態(tài)機基本類型順序結(jié)構(gòu)

    ,依然要判斷急停,直到所有的FRAME都完成才能退出,在這個過程中,外層循環(huán)需要所有動作完成后才執(zhí)行下一循環(huán),對它改造一下,就可以形成順序狀態(tài)機結(jié)構(gòu).我曾經(jīng)提到過,嚴格類型
    發(fā)表于 11-29 16:55

    FPGA/CPLD狀態(tài)機穩(wěn)定性研究

    Mealy狀態(tài)機而言,由于其任何時刻的輸出與輸入有關,這種情況就更常見了.2 狀態(tài)機設計方案比較2.1 采用枚舉數(shù)據(jù)類型定義狀態(tài)值在設計中定
    發(fā)表于 01-12 10:48

    簡單的狀態(tài)機枚舉相結(jié)合的程序

    做的一個簡單的狀態(tài)機枚舉相結(jié)合的程序,挺簡單的。
    發(fā)表于 08-15 08:06

    有限狀態(tài)機有什么類型?

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

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

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

    狀態(tài)機舉例

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

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

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

    狀態(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>

    為什么單片的主程序是死循環(huán)

    任何一個可用程序都必然是死循環(huán)程序,這不僅僅是指單片程序。因為任何微處理器系統(tǒng)一旦開機,系統(tǒng)都在處理內(nèi)部事件和外設響應,這個過程是一個循環(huán)過程,除非關機才能結(jié)束這個死循環(huán)程序。因此,
    發(fā)表于 07-15 17:38 ?5854次閱讀

    單片死循環(huán)有什么作用

    單片是可編程器件,在使用時需要編寫滿足需求的程序。其C語言程序在各個端口、配置初始化完成后,會進入一個死循環(huán),一般用while(1){;}的形式。初始化完成后,單片就在
    發(fā)表于 08-09 17:01 ?6140次閱讀
    單片<b class='flag-5'>機</b>的<b class='flag-5'>死循環(huán)</b>有什么作用

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

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

    什么是狀態(tài)機?狀態(tài)機5要素

    玩單片還可以,各個外設也都會驅(qū)動,但是如果讓你完整的寫一套代碼時,卻無邏輯與框架可言。這說明編程還處于比較低的水平,你需要學會一種好的編程框架或者一種編程思想!比如模塊化編程、狀態(tài)機編程、分層思想
    的頭像 發(fā)表于 07-27 11:23 ?2.1w次閱讀
    什么是<b class='flag-5'>狀態(tài)機</b>?<b class='flag-5'>狀態(tài)機</b>5要素

    Verilog狀態(tài)機類型

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

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

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