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)不再提示

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

冬至子 ? 來(lái)源:芯光燦爛 ? 作者:Tianya ? 2023-11-07 17:46 ? 次閱讀

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

本文將針對(duì)這種情況進(jìn)行示例說(shuō)明并給出解決方法.

1 數(shù)據(jù)類(lèi)型

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

圖片

2 枚舉類(lèi)型

用戶(hù)可以通過(guò)枚舉類(lèi)型定義特定的常量值的集合.

格式:

圖片

使用方式如下:

圖片

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

3 問(wèn)題描述

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

圖片

當(dāng)上述狀態(tài)機(jī)運(yùn)行時(shí),狀態(tài)機(jī)將一直處于WAIT狀態(tài),狀態(tài)執(zhí)行異常.

4 問(wèn)題分析

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

5 解決方法

出現(xiàn)上述問(wèn)題主要是因?yàn)榇a中組合邏輯部分的敏感信號(hào)列表中的變量沒(méi)有發(fā)生變化,從而沒(méi)有出發(fā)進(jìn)程的執(zhí)行導(dǎo)致的,因此,解決方法主要是實(shí)現(xiàn)組合邏輯部分的有效執(zhí)行,實(shí)現(xiàn)nstate_e的變化.

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

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

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

圖片

在仿真開(kāi)始時(shí),因?yàn)槊杜e類(lèi)型的數(shù)據(jù)類(lèi)型為logic型,所以變量state_e和nstate_e的默認(rèn)狀態(tài)都為x態(tài),那么在復(fù)位階段state_e被初始化為WAIT時(shí),組合邏輯部分的always@(state_e

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

5.3 指定枚舉常量的初始值

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

圖片

聲明:本文內(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)投訴
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1019

    瀏覽量

    83806
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110157
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7608

    瀏覽量

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

    關(guān)注

    2

    文章

    492

    瀏覽量

    27575
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    的是有限狀態(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é)模
    的頭像 發(fā)表于 02-12 19:07 ?4228次閱讀
    Verilog<b class='flag-5'>狀態(tài)機(jī)</b>+設(shè)計(jì)實(shí)例

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

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

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

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

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

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

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

    狀態(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 ?989次閱讀

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

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

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

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

    任何一個(gè)可用程序都必然是死循環(huán)程序,這不僅僅是指單片機(jī)程序。因?yàn)槿魏挝⑻幚砥飨到y(tǒng)一旦開(kāi)機(jī),系統(tǒng)都在處理內(nèi)部事件和外設(shè)響應(yīng),這個(gè)過(guò)程是一個(gè)循環(huán)過(guò)程,除非關(guān)機(jī)才能結(jié)束這個(gè)死循環(huán)程序。因此,
    發(fā)表于 07-15 17:38 ?5386次閱讀

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

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

    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 ?7454次閱讀
    FPGA:<b class='flag-5'>狀態(tài)機(jī)</b>簡(jiǎn)述

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

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

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

    有限狀態(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é)模型。
    的頭像 發(fā)表于 06-01 15:23 ?1921次閱讀
    Verilog<b class='flag-5'>狀態(tài)機(jī)</b>的<b class='flag-5'>類(lèi)型</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 ?9763次閱讀