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

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

FPGA之家 ? 來源:時沿科技 ? 作者:NemoYxc ? 2021-06-25 11:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

“本文主要分享了在Verilog設(shè)計過程中狀態(tài)機(jī)的一些設(shè)計方法。

關(guān)于狀態(tài)機(jī)

狀態(tài)機(jī)本質(zhì)是對具有邏輯順序或時序順序事件的一種描述方法,也就是說具有邏輯順序和時序規(guī)律的事情都適用狀態(tài)機(jī)描述。狀態(tài)機(jī)的基本要素有三個:狀態(tài)、輸出和輸入。

根據(jù)狀態(tài)機(jī)的輸出是否與輸入條件有關(guān),可將狀態(tài)機(jī)分為:

摩爾(Moore)型和米里(Mealy)型。

摩爾型狀態(tài)機(jī):輸出僅與當(dāng)前狀態(tài)有關(guān),而與輸入條件無關(guān)。

米里型狀態(tài)機(jī):輸出不僅依賴于當(dāng)前狀態(tài),還取決于輸入條件。

狀態(tài)機(jī)的邏輯通常用“case”語句或者“if-else”語句來描述,枚舉當(dāng)前狀態(tài)和輸入的所有可能組合,并為下一個狀態(tài)和輸出制定適當(dāng)?shù)闹怠?/p>

RTL級狀態(tài)機(jī)描述常用語法:

wire、reg;

parameter,用于描述狀態(tài)名稱,增強(qiáng)代碼可讀性;

always,根據(jù)主時鐘沿,完成同步時序的狀態(tài)遷移;根據(jù)信號敏感表,完成組合邏輯輸出。

case/endcase:其中default是可選的關(guān)鍵字,用于指明當(dāng)所列的所有條件都不匹配時的操作;一般的FSM設(shè)計都會加上default關(guān)鍵字描述FSM所需的補(bǔ)集狀態(tài)。

task/endtask。

幾種狀態(tài)機(jī)的描述方法

一段式FSM描述方法:一個always塊里面,即描述狀態(tài)轉(zhuǎn)移,又描述狀態(tài)的輸入和輸出。

兩段式FSM描述方法:兩個always塊,一個采用同步時序描述狀態(tài)轉(zhuǎn)移;另一個模塊采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律。

三段式FSM描述方法:第一個always模塊采用同步時序描述狀態(tài)轉(zhuǎn)移;第二個采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律;第三個always模塊使用同步時序電路,描述每個狀態(tài)的輸出。

一段式:

reg [2:0] Next_State;//下一個狀態(tài) parameter IDLE = 3‘b000; parameter S1 = 3’b001; parameter S2 = 3‘b010; parameter CLEAR = 3’b100;

//--------------------------------------------------------------------------------//------ 在一個always中包含狀態(tài)、輸入和輸出。 always@(posedge clk or posedge rst) begin if(rst) begin Next_State 《= IDLE; out 《= 2‘b00; end else begin case(Next_State) IDLE : begin if(key_in == 1’b1) begin Next_State 《= S1; out 《= 2‘b01;

end else begin Next_State 《= IDLE; out 《= 2’b00; end end S1 : begin if(key_in == 1‘b1) begin Next_State 《= S2; out 《= 2’b10; end else begin Next_State 《= S1; out 《= 2‘b01;

end end S2 : begin if(key_in == 1’b1) begin Next_State 《= CLEAR; out 《= 2‘b11; end else begin Next_State 《= S2; out 《= 2’b10; end end CLEAR : begin if(key_in == 1‘b1) begin Next_State 《= IDLE; out 《= 2’b00;

end else begin Next_State 《= CLEAR; out 《= 2‘b11; end end endcase end end

兩段式:

reg [2:0] Next_State;//下一個狀態(tài) reg [2:0] Current_State;//當(dāng)前狀態(tài)

parameter IDLE = 3’b000; parameter S1 = 3‘b001; parameter S2 = 3’b010; parameter CLEAR = 3‘b100;

//-------------------------------------------------------------------------------- always@(posedge clk or posedge rst) begin if(rst) Current_State 《= IDLE; else Current_State 《= Next_State; end always@(*)

// always@(rst or Current_State or key_in) begin case(Current_State) IDLE : begin idle_out;// out = 2’b00; if(key_in == 1‘b1) Next_State = S1; else Next_State = IDLE; end S1 : begin s1_out;// out = 2’b01; if(key_in == 1‘b1) Next_State = S2; else Next_State = S1; end S2 : begin s2_out;// out = 2’b10; if(key_in == 1‘b1) Next_State = CLEAR; else Next_State = S2; end CLEAR : begin clear_out;

// out = 2’b11; if(key_in == 1‘b1) Next_State = IDLE; else Next_State = CLEAR; end endcase end

//-------------------------------------------------------------------------------- task idle_out; out = 2’b00; endtask task s1_out; out = 2‘b01; endtask

task s2_out; out = 2’b10; endtask

task clear_out; out = 2‘b11; endtask

三段式:

//-------------------------------------------------------------------------------- reg [2:0] Next_State;//下一個狀態(tài) reg [2:0] Current_State;//當(dāng)前狀態(tài) parameter IDLE = 3’b000; parameter S1 = 3‘b001; parameter S2 = 3’b010; parameter CLEAR = 3‘b100;

//-------------------------------------------------------------------------------- always@(posedge clk or posedge rst) begin if(rst) Current_State 《= IDLE; else Current_State 《= Next_State; end

//--------------------------------------------------------------------------------// always@(rst or Current_State or key_in) always@(*) begin case(Current_State) IDLE : begin if(key_in == 1’b1) Next_State = S1; else Next_State = IDLE; end S1 : begin if(key_in == 1‘b1) Next_State = S2; else Next_State = S1; end S2 : begin if(key_in == 1’b1) Next_State = CLEAR; else Next_State = S2; end CLEAR : begin if(key_in == 1‘b1) Next_State = IDLE; else Next_State = CLEAR; end endcase end

//-------------------------------------------------------------------------------- always@(posedge clk or posedge rst) begin if(rst) begin out 《= 2’b00; end else begin case(Next_State) IDLE : begin out 《= 2‘b00; end S1 : begin out 《= 2’b01; end S2 : begin out 《= 2‘b10; end CLEAR : begin out 《= 2’b11; end endcase end end

//--------------------------------------------------------------------------------

結(jié)論:

一段式狀態(tài)機(jī)比較適合在狀態(tài)較少的情況下使用,因?yàn)樗械臓顟B(tài)、輸入和輸出都在一起,可能不是很適合閱讀、理解、維護(hù);

二段式狀態(tài)機(jī)比一段式要容易理解,但是由于輸出是組合邏輯,容易存在不穩(wěn)定與毛刺隱患;

三段式狀態(tài)機(jī)比一段式更容易理解,用時序邏輯代替組合邏輯消除了不穩(wěn)定與毛刺的隱患,但是代碼量會稍微多一點(diǎn);

責(zé)任編輯:haq

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

    關(guān)注

    30

    文章

    1374

    瀏覽量

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

    關(guān)注

    2

    文章

    499

    瀏覽量

    29141

原文標(biāo)題:Verilog基礎(chǔ)知識學(xué)習(xí)筆記(四)

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十一):ISDU狀態(tài)機(jī)與EVENT事件

    上篇我們介紹了ISDU的典型編碼格式和應(yīng)用案例,本篇我們就來詳細(xì)介紹下,ISDU的狀態(tài)機(jī),并把EVENT事件的邏輯,給大家好好解析下。 1主站ISDU狀態(tài)機(jī) 如上圖所示,ISDU的狀態(tài)機(jī)的核心
    的頭像 發(fā)表于 11-29 18:28 ?4721次閱讀
    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(十一):ISDU<b class='flag-5'>狀態(tài)機(jī)</b>與EVENT事件

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

    了事件。對電動機(jī)來講,加正電壓、加負(fù)電壓、斷電就是事件。 動作:在狀態(tài)機(jī)的遷移過程中,狀態(tài)機(jī)會做出一些其它的行為,這些行為就是動作,動作是狀態(tài)機(jī)對事件的響應(yīng)。給停轉(zhuǎn)的電動機(jī)加正電壓,電
    發(fā)表于 11-27 08:15

    嵌入式開發(fā)為何經(jīng)常用到狀態(tài)機(jī)架構(gòu)

    ,這樣CPU就閑不下來了。 這種處理方法的實(shí)質(zhì)就是在程序等待事件的過程中間隔性地插入一些有意義的工作,好讓CPU不是一直無謂地等待。 二、邏輯完備性 邏輯完備性是狀態(tài)機(jī)編程最大的優(yōu)點(diǎn)。 不知道大家
    發(fā)表于 11-25 07:08

    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(六):主從站狀態(tài)機(jī)解析

    前言 書接上文,今天我們就來好好聊聊主從站的DL-Mode狀態(tài)機(jī),還請各位童鞋前排坐好! 1主站狀態(tài)機(jī)解析 主站的DL-Mode狀態(tài)機(jī)有5個大狀態(tài),也是我們很熟悉的 建立通信、開始、預(yù)
    的頭像 發(fā)表于 10-28 17:34 ?6198次閱讀
    睿遠(yuǎn)研究院丨IO-Link規(guī)范解讀(六):主從站<b class='flag-5'>狀態(tài)機(jī)</b>解析

    UPS不間斷電源在放電過程中的注意事項(xiàng)

    UPS在日常的使用過程中,只有定期對UPS放電才能延長UPS的使用壽命,UPS 電源電池需要每三個月進(jìn)行一次充放電,怎樣對UPS進(jìn)行放電才能讓其保持在最佳工作狀態(tài)? 現(xiàn)在,由匯智天源工程師和大家聊一
    的頭像 發(fā)表于 10-11 11:33 ?640次閱讀
    UPS不間斷電源在放電<b class='flag-5'>過程中</b>的注意事項(xiàng)

    大電流起弧過程中電弧聲壓/超聲波信號的特征提取與故障診斷

    在大電流起弧過程中,電弧的燃燒會伴隨聲壓與超聲波信號的產(chǎn)生,這些信號并非雜亂無章,而是與電弧的燃燒狀態(tài)、故障類型緊密相關(guān)。正常起弧時,電弧燃燒穩(wěn)定,聲壓與超聲波信號呈現(xiàn)出規(guī)律的特征;當(dāng)起弧過程中存在
    的頭像 發(fā)表于 09-29 09:27 ?502次閱讀
    大電流起弧<b class='flag-5'>過程中</b>電弧聲壓/超聲波信號的特征提取與故障診斷

    如何保障遠(yuǎn)程運(yùn)維過程中的數(shù)據(jù)安全和隱私?

    LZ-DZ100背面 在分布式光伏集群的遠(yuǎn)程運(yùn)維,數(shù)據(jù)安全和隱私保護(hù)面臨多重風(fēng)險,包括 傳輸過程中的竊聽 / 篡改、未授權(quán)訪問控制指令、設(shè)備固件被惡意植入、敏感數(shù)據(jù)(如站點(diǎn)位置、運(yùn)行參數(shù))泄露 等
    的頭像 發(fā)表于 08-22 10:26 ?988次閱讀
    如何保障遠(yuǎn)程運(yùn)維<b class='flag-5'>過程中</b>的數(shù)據(jù)安全和隱私?

    請問如何在FX10上使用GPIF III狀態(tài)機(jī) *.h 文件?

    LVCMOS 2 位 SlaveFIFO GPIF III 狀態(tài)機(jī)的演示中有一個 cy_gpif_header_lvcmos.h 文件。 我想知道如何使用.h文件,只需放入.h文件放入 FX10 項(xiàng)目? 您有它的用戶指南文檔嗎?
    發(fā)表于 07-16 08:17

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計之八:PCIe初始化狀態(tài)機(jī)設(shè)計

    PCIe配置初始化狀態(tài)機(jī)實(shí)現(xiàn)PCIe設(shè)備枚舉和配置空間初始化過程,在完成鏈路訓(xùn)練后,使用DFS(深度優(yōu)先搜索)算法枚舉PCIe總線上的設(shè)備,完成PCIe總線域的地址分配和設(shè)備的初始化。PCIe配置
    發(fā)表于 07-05 22:00

    超聲波清洗機(jī)如何在清洗過程中減少廢液和對環(huán)境的影響?

    超聲波清洗機(jī)如何在清洗過程中減少廢液和對環(huán)境的影響隨著環(huán)保意識的增強(qiáng),清洗過程中的廢液處理和環(huán)境保護(hù)變得越來越重要。超聲波清洗機(jī)作為一種高效的清洗技術(shù),也在不斷發(fā)展以減少廢液生成和對環(huán)
    的頭像 發(fā)表于 06-16 17:01 ?663次閱讀
    超聲波清洗<b class='flag-5'>機(jī)</b>如何在清洗<b class='flag-5'>過程中</b>減少廢液和對環(huán)境的影響?

    有可能在 FX3 GPIF2 創(chuàng)建兩個獨(dú)立的狀態(tài)機(jī)嗎?

    我想,如果我想通過 FX3 GPIF2 創(chuàng)建兩個獨(dú)立的傳輸流接口,我需要在 GPIF2 設(shè)計器創(chuàng)建兩個獨(dú)立的狀態(tài)機(jī),我是否有可能在 GPIF2 設(shè)計器創(chuàng)建兩個獨(dú)立的狀態(tài)機(jī)?
    發(fā)表于 05-20 06:14

    cypress3014視頻格式改變的話,GPIF狀態(tài)機(jī)需不需要重新配置?

    你好,請問視頻格式改變的話,GPIF狀態(tài)機(jī)需不需要重新配置
    發(fā)表于 05-14 07:28

    求助,關(guān)于srammaster.cydsn狀態(tài)機(jī)的問題求解

    晚上好。 我目前正在學(xué)習(xí) GPIF II。 查看..EZ-USB FX3 SDK1.3firmwaregpif_examplescyfxsrammastersrammaster.cydsn狀態(tài)機(jī),有狀態(tài)START和START
    發(fā)表于 05-12 06:20

    半導(dǎo)體制造過程中的三個主要階段

    前段工藝(Front-End)、中段工藝(Middle-End)和后段工藝(Back-End)是半導(dǎo)體制造過程中的三個主要階段,它們在制造過程中扮演著不同的角色。
    的頭像 發(fā)表于 03-28 09:47 ?7287次閱讀
    半導(dǎo)體制造<b class='flag-5'>過程中</b>的三個主要階段

    請問在NXP板的BSP QA過程中采用了哪些具體的測試方法?

    在 QA 過程中采用了哪些特定的測試方法? 什么是 QA 流程,以及 yocto/linux BSP 在整個 QA 生命周期中如何跟蹤和管理缺陷? RSB 3720 板的 QA 流程中使用了
    發(fā)表于 03-17 08:04