成人免费无码不卡毛片,亚洲AⅤ无码精品一区二区三区,国产尤物精品视频,久久精品日本亚洲,欧美成人一区三区无码乱码A片,中文字日产幕码一区二区色哟哟,亞洲日韓中文字幕網AV

  • 正文
    • 1、狀態(tài)模式
    • 2、參考代碼
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

設(shè)計模式在芯片驗證中的應(yīng)用——狀態(tài)

2024/08/19
1055
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1、狀態(tài)模式

狀態(tài)模式是一種行為設(shè)計模式, 讓你能在一個對象的內(nèi)部狀態(tài)變化時改變其行為, 使其看上去就像改變了自身所屬的類一樣。

在RTL中可能存在復雜的有限狀態(tài)機FSM,在任何一個特定狀態(tài)中, RTL的行為都不相同, 且可從一個狀態(tài)切換到另一個狀態(tài)。不過, 根據(jù)當前狀態(tài), RTL可能會切換到另外一種狀態(tài), 也可能會保持當前狀態(tài)不變。這些數(shù)量有限且預先定義的狀態(tài)切換規(guī)則被稱為轉(zhuǎn)移。

為了對RTL FSM進行建模,狀態(tài)設(shè)計模式建議將每個狀態(tài)的行為抽象成一個類,狀態(tài)之間的切換相當于就是類對象的切換。主要可包括以下幾個組件:

Context:它并不會自行實現(xiàn)所有行為, 而是會保存一個指向表示當前狀態(tài)的狀態(tài)對象的引用, 且將所有與狀態(tài)相關(guān)的工作委派給該對象。

State:所有狀態(tài)類的基類,所有狀態(tài)類都必須遵循同樣的接口, 而且context必須僅通過state提供的接口函數(shù)與這些對象進行交互。

Concrete States:會自行實現(xiàn)特定于狀態(tài)的方法。為了避免多個狀態(tài)中包含相似代碼, 你可以提供一個封裝有部分通用行為的中間抽象類。狀態(tài)對象可存儲對于上下文對象的反向引用。狀態(tài)可以通過該引用從上下文處獲取所需信息, 并且能觸發(fā)狀態(tài)轉(zhuǎn)移。

下圖為狀態(tài)設(shè)計模式在FSM中應(yīng)用的一個UML類圖。

2、參考代碼

狀態(tài)設(shè)計模式的參考代碼如下:

typedef class fsm_context;typedef class concrete_state1;typedef class concrete_state2;
virtual class state;??? pure virtual function int process1(fsm_context cnxt);??? pure virtual function int process2(fsm_context cnxt);endclass : state
class concrete_state1 extends state;??? function int process1(fsm_context cnxt);??????? $display("concrete_state1 : process1");??????? if ( cnxt.change_state ) begin??????????? concrete_state2 state2 = new();??????????? $display("concrete_state1 change to concrete_state2");??????????? cnxt.st = state2;??????? end??? endfunction : process1
??? function int process2(fsm_context cnxt);??????? $display("concrete_state1 : process2");??????? if ( cnxt.change_state ) begin??????????? concrete_state2 state2 = new();??????????? $display("concrete_state1 change to concrete_state2");??????????? cnxt.st = state2;??????? end??? endfunction : process2
endclass : concrete_state1
class concrete_state2 extends state;??? function int process1(fsm_context cnxt);??????? $display("concrete_state2 : process1");??????? if ( cnxt.change_state ) begin??????????? concrete_state1 state1 = new();??????????? $display("concrete_state2 change to concrete_state1");??????????? cnxt.st = state1;??????? end??? endfunction : process1
??? function int process2(fsm_context cnxt);??????? $display("concrete_state2 : process2");??????? if ( cnxt.change_state ) begin??????????? concrete_state1 state1 = new();??????????? $display("concrete_state2 change to concrete_state1");??????????? cnxt.st = state1;??????? end??? endfunction : process2
endclass : concrete_state2


class fsm_context;
??? state st;
??? function bit change_state();??????? return 1; // for simplicity??? endfunction : change_state
??? function void process_req1 (/*interface signals*/);??????? st.process1(this /*, interface signals*/);??? endfunction : process_req1
??? function void process_req2 (/*interface signals*/);??????? st.process2(this /*, interface signals*/);??? endfunction : process_req2
endclass : fsm_context

?模擬測試代碼如下:

fsm_context fsm_st = new();fsm_st.st = concrete_state1::new();fsm_st.process_req1();fsm_st.process_req2();

使用Questasim仿真輸出日志如下:

 | # concrete_state1 : process1?| # concrete_state1 change to concrete_state2?| # concrete_state2 : process2?| # concrete_state2 change to concrete_state1

?

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風險等級 參考價格 更多信息
AD590MH/883B 1 Rochester Electronics LLC ANALOG TEMP SENSOR-CURRENT, 0.5Cel, ROUND, THROUGH HOLE MOUNT, METAL CAN, TO-52, 3 PIN
$194.97 查看
OPB606A 1 TT Electronics OPTEK Technology Diffuse Photoelectric Sensor, 2.79mm Min, 2.79mm Max, 0.50mA, 1-Channel, Rectangular, Through Hole Mount, ROHS COMPLIANT PACKAGE-2
$1.69 查看
LM35CZ/NOPB 1 Texas Instruments 1C high voltage analog temperature sensor, 10 mV/C 3-TO-92 -40 to 110

ECAD模型

下載ECAD模型
$7.88 查看

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄
永善县| 星子县| 册亨县| 和静县| 阿拉善盟| 普陀区| 六安市| 静乐县| 万安县| 华坪县| 奈曼旗| 沁源县| 防城港市| 和顺县| 梅州市| 康保县| 都昌县| 秭归县| 息烽县| 红河县| 菏泽市| 金门县| 克东县| 黑水县| 淮安市| 阿拉善左旗| 仁布县| 凤台县| 双牌县| 古田县| 罗田县| 江津市| 正宁县| 东至县| 吴桥县| 淅川县| 老河口市| 额敏县| 克山县| 古丈县| 牙克石市|