91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

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

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

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

圖片

2 枚舉類型

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

格式:

圖片

使用方式如下:

圖片

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

3 問題描述

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

圖片

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

4 問題分析

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

5 解決方法

出現(xiàn)上述問題主要是因為代碼中組合邏輯部分的敏感信號列表中的變量沒有發(fā)生變化,從而沒有出發(fā)進(jìn)程的執(zhí)行導(dǎo)致的,因此,解決方法主要是實現(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的默認(rèn)狀態(tài)都為x態(tài),那么在復(fù)位階段state_e被初始化為WAIT時,組合邏輯部分的always@(state_e

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

5.3 指定枚舉常量的初始值

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

圖片

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

    關(guān)注

    14

    文章

    1051

    瀏覽量

    87433
  • Verilog
    +關(guān)注

    關(guān)注

    30

    文章

    1374

    瀏覽量

    114547
  • C語言
    +關(guān)注

    關(guān)注

    183

    文章

    7644

    瀏覽量

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

    關(guān)注

    2

    文章

    499

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    什么是狀態(tài)機(jī)?狀態(tài)機(jī)的種類與實現(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è)計中,
    的頭像 發(fā)表于 10-19 10:27 ?1.3w次閱讀