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

一種可重用constraint的實(shí)現(xiàn)方法

sanyue7758 ? 來(lái)源:驗(yàn)證芯發(fā)現(xiàn) ? 2023-05-04 10:17 ? 次閱讀

近期看到一種關(guān)于約束的復(fù)用方法,總結(jié)分享如下。

在不同的用例中,隨機(jī)參數(shù)的隨機(jī)約束不會(huì)完全一致,最典型的就是錯(cuò)誤或者異常用例的非法取值約束。對(duì)于這種不同的約束,常見(jiàn)的處理辦法就是繼承,并重寫(xiě)原有參數(shù)的約束,如下所示。

class item;
rand bit[3:0] A;
constraint c{
    A > 0;
}
//....
endclass

class abnormal_item;
constraint c{
    A == 0;//覆蓋原有的A>0約束
}
//....
endclass

除了存在可能的過(guò)度繼承問(wèn)題,繼承方式是一種"靜態(tài)"的is-a關(guān)系,一旦abnormal_item確定后,參數(shù)的約束就已確定,不具備動(dòng)態(tài)添加或者刪除約束的能力。

到這里,提一下Decorator Pattern(裝飾者模式)。Decorator Pattern大致是一種這樣的思路:

在Decorator Pattern的結(jié)構(gòu)中,可以動(dòng)態(tài)地給一個(gè)對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu),將對(duì)象的行為分為核心功能和可選功能。核心功能指對(duì)象最基本的職責(zé),而可選功能則是在不改變核心職責(zé)的情況下增加的功能。通過(guò)使用裝飾者模式,可以動(dòng)態(tài)地將可選功能裝飾在核心功能之上,使對(duì)象的功能更加靈活......

借鑒類(lèi)似的思路,可以將隨機(jī)參數(shù)和其約束分離開(kāi)來(lái),將隨機(jī)約束視作對(duì)原參數(shù)的"裝飾",進(jìn)而達(dá)到動(dòng)態(tài)、可復(fù)用隨機(jī)約束的目的。

一個(gè)實(shí)例的類(lèi)圖結(jié)構(gòu)如下:

660c26f2-e7e3-11ed-ab56-dac502259ad0.png

在這種結(jié)構(gòu)下,大致分為兩層:
第一層是包含隨機(jī)參數(shù)的激勵(lì)定義層,item僅包含隨機(jī)參數(shù)的聲明,不包含參數(shù)的約束內(nèi)容。constrainted_item繼承于item,不包含直接的參數(shù)約束,而是通過(guò)add_instance_cons方法,動(dòng)態(tài)的添加對(duì)隨機(jī)參數(shù)的約束。
第二層是約束實(shí)現(xiàn)層,抽象類(lèi)abstract_constraint僅包含item類(lèi),不實(shí)現(xiàn)對(duì)tem參數(shù)的具體約束,不同的約束由可重用的子類(lèi)實(shí)現(xiàn),即圖中的reusable_cons實(shí)現(xiàn)。

相關(guān)參考代碼如下。

隨機(jī)參數(shù)定義:

class item;
    rand int val;
endclass

class constrained_item extends item;
    `constraints_utils(item)
endclass

抽象和約束實(shí)現(xiàn)定義:

virtual class abstract_constraint #(type T = int);

  protected T object;

  function void set_object(T object);
    this.object = object;
  endfunction
endclass

class only_even_values extends abstract_constraint #(item);
    constraint c {
      object.val % 2 == 0;
    }
endclass

動(dòng)態(tài)添加約束和隨機(jī):

initial begin
    automatic constrained_item i = new();
    automatic only_even_values only_even = new();
    i.add_instance_constraint(only_even);

    repeat (100) begin
      if (!i.randomize())
        $fatal(0, "Randomization failure");
      //....
    end
end

上述的constraints_utils實(shí)現(xiàn)代碼如下:

`define constraints_utils(TYPE) 
...
  local rand constraints::abstract_constraint #(TYPE) instance_constraints[$]; 
  function void add_instance_constraint(constraints::abstract_constraint #(TYPE) c); 
    constraints::abstract_constraint #(TYPE) c_copy = new c; 
    c_copy.set_object(this); 
    instance_constraints.push_back(c_copy); 
  endfunction 
...

可以看到,constrained_item內(nèi)部包含了一個(gè)rand類(lèi)型的instance_constraints隊(duì)列,用于存儲(chǔ)分離約束的句柄。同時(shí)only_even_values內(nèi)也包含了指向constrained_item的句柄。當(dāng)constrained_item進(jìn)行randomize時(shí),instance_constraints隊(duì)列也會(huì)隨機(jī),在only_even_values內(nèi)完成對(duì)constrained_item的參數(shù)約束。





審核編輯:劉清

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

    關(guān)注

    0

    文章

    2

    瀏覽量

    6988

原文標(biāo)題:一種可重用constraint的實(shí)現(xiàn)方法:參數(shù)/隨機(jī)約束分離

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言接口與實(shí)現(xiàn)--創(chuàng)建重用軟件的技術(shù)

    C語(yǔ)言接口與實(shí)現(xiàn)--創(chuàng)建重用軟件的技術(shù)
    發(fā)表于 11-07 17:17

    c接口和實(shí)現(xiàn):創(chuàng)建重用軟件的技術(shù) 源碼下載

    c接口和實(shí)現(xiàn):創(chuàng)建重用軟件的技術(shù) 源碼分享關(guān)于如何設(shè)計(jì)、實(shí)現(xiàn)和有效使用庫(kù)函數(shù)的指南少之又少(如果說(shuō)還有的話(huà))。這本書(shū)作填補(bǔ)了這個(gè)空白。它可以作為下
    發(fā)表于 02-07 21:21

    一種基于FPGA的DSU硬件實(shí)現(xiàn)方法

    摘要:為了實(shí)現(xiàn)對(duì)非相干雷達(dá)的接收相參處理,基于數(shù)字穩(wěn)定校正(DSU)的原理,采用ALTERA公司的StratixⅡ系列芯片和VHDL編程語(yǔ)言,設(shè)計(jì)了一種基于FPGA的DSU硬件實(shí)現(xiàn)方法
    發(fā)表于 06-28 08:27

    一種高檔FPGA重構(gòu)配置方法

    求大神分享一種高檔FPGA重構(gòu)配置方法
    發(fā)表于 04-29 06:16

    經(jīng)典C語(yǔ)言接口與實(shí)現(xiàn):創(chuàng)建重用軟件的技術(shù)

    )倡導(dǎo)基于接口的C語(yǔ)言設(shè)計(jì)理念及其實(shí)現(xiàn)技術(shù),深入詳細(xì)地描述了24個(gè)C語(yǔ)言接口及其實(shí)現(xiàn)。C語(yǔ)言接口與實(shí)現(xiàn)(創(chuàng)建重用軟件的技術(shù))通過(guò)敘述如何用
    發(fā)表于 09-25 06:42

    μClinux下實(shí)時(shí)任務(wù)的一種實(shí)現(xiàn)方法

    文中以ARM7 TDMI 處理器為例,闡述了μClinux 進(jìn)程調(diào)度的原理。根據(jù)該原理,提出了一種在μClinux 平臺(tái)下實(shí)現(xiàn)實(shí)時(shí)任務(wù)的設(shè)計(jì)方法,這種方法較簡(jiǎn)單,易于
    發(fā)表于 08-29 09:19 ?11次下載

    一種特殊陣列實(shí)現(xiàn)DOA估計(jì)的方法

    一種特殊陣列實(shí)現(xiàn)DOA估計(jì)的方法:提出了一種基于特殊陣列形式實(shí)現(xiàn)doa估計(jì)的方法,在均勻線(xiàn)性陣列
    發(fā)表于 03-18 16:18 ?19次下載

    Boost電路的一種軟開(kāi)關(guān)實(shí)現(xiàn)方法

    Boost電路的一種軟開(kāi)關(guān)實(shí)現(xiàn)方法 摘要:提出了一種Boost電路軟開(kāi)關(guān)實(shí)現(xiàn)方法
    發(fā)表于 07-11 10:12 ?7491次閱讀
    Boost電路的<b class='flag-5'>一種</b>軟開(kāi)關(guān)<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方法</b>

    電池容量計(jì)的一種實(shí)現(xiàn)方法

    電池容量計(jì)的一種實(shí)現(xiàn)方法 摘要:介紹一種計(jì)量電池容量的方法,即對(duì)電池充進(jìn)能量和放出能量進(jìn)行計(jì)算并乘以相應(yīng)的損失系數(shù)從而指示電池的容量。采用
    發(fā)表于 07-21 14:41 ?897次閱讀
    電池容量計(jì)的<b class='flag-5'>一種</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方法</b>

    一種新型SVPWM調(diào)制方法的研究與實(shí)現(xiàn)

    一種新型SVPWM調(diào)制方法的研究與實(shí)現(xiàn)。
    發(fā)表于 03-30 14:40 ?7次下載

    一種基于DSP脈寬調(diào)制電路實(shí)現(xiàn)方法的研究

    一種基于DSP脈寬調(diào)制電路實(shí)現(xiàn)方法的研究
    發(fā)表于 06-17 16:48 ?14次下載

    《C語(yǔ)言接口與實(shí)現(xiàn):創(chuàng)建重用軟件的技術(shù)》電子教材免費(fèi)下載

    《C語(yǔ)言接口與實(shí)現(xiàn):創(chuàng)建重用軟件的技術(shù)》概念清晰、實(shí)例詳盡,是本有關(guān)設(shè)計(jì)、實(shí)現(xiàn)和有效使用C語(yǔ)言庫(kù)函數(shù),掌握創(chuàng)建
    發(fā)表于 08-27 08:00 ?32次下載

    一種新型量測(cè)影像與GPS、IMU組合的導(dǎo)航方法

    本文提出了一種基于量測(cè)影像與衛(wèi)星、慣性組合導(dǎo)航方法,研究了系統(tǒng)框架、實(shí)現(xiàn)原理和關(guān)鍵技術(shù)。
    的頭像 發(fā)表于 01-01 13:37 ?8139次閱讀
    <b class='flag-5'>一種</b>新型<b class='flag-5'>可</b>量測(cè)影像與GPS、IMU組合的導(dǎo)航<b class='flag-5'>方法</b>

    C語(yǔ)言接口與實(shí)現(xiàn)創(chuàng)建重用軟件的技術(shù)PDF電子書(shū)免費(fèi)下載

    《C語(yǔ)言接口與實(shí)現(xiàn):創(chuàng)建重用軟件的技術(shù)》概念清晰、實(shí)例詳盡,是本有關(guān)設(shè)計(jì)、實(shí)現(xiàn)和有效使用C語(yǔ)言庫(kù)函數(shù),掌握創(chuàng)建
    發(fā)表于 05-11 08:00 ?18次下載
    C語(yǔ)言接口與<b class='flag-5'>實(shí)現(xiàn)</b>創(chuàng)建<b class='flag-5'>可</b><b class='flag-5'>重用</b>軟件的技術(shù)PDF電子書(shū)免費(fèi)下載

    一種基于緩存塊重用信息的動(dòng)態(tài)旁路策略

    非易失性存儲(chǔ)器具有能耗低、擴(kuò)展性強(qiáng)和存儲(chǔ)密度大等優(yōu)勢(shì),替代傳統(tǒng)靜態(tài)隨機(jī)存取存儲(chǔ)器作為片上緩存,但其寫(xiě)操作的能耗及延遲較高,在大規(guī)模應(yīng)用前需優(yōu)化寫(xiě)性能。提出一種基于緩存塊重用信息的動(dòng)
    發(fā)表于 04-29 15:48 ?4次下載
    <b class='flag-5'>一種</b>基于緩存塊<b class='flag-5'>重用</b>信息的動(dòng)態(tài)旁路策略