色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

聊聊Systemverilog中的function in constraints

冬至子 ? 來源:CSDN ? 作者:谷公子 ? 2023-06-21 17:31 ? 次閱讀

有些情況下,constraint不能簡(jiǎn)單用一行來表達(dá),而是需要復(fù)雜的計(jì)算,如果都寫到constraint block內(nèi)部就比較復(fù)雜,而且很亂,這時(shí)候可以調(diào)用functions來約束隨機(jī)變量。在constraint內(nèi)調(diào)用function就稱為”function in constraints”。它的格式如下:

constraint constraint_name { rand_var == function_call(arguments...); }
  • function的定義寫在constraint block之外,它內(nèi)部包含了對(duì)arguments的處理。
  • 在調(diào)用randomize()的時(shí)候,function會(huì)先被求解,function的返回值將會(huì)作為state variables去參與接下來的求解。

不過在使用function in constraints有以下幾點(diǎn)需要注意:

  • 在constraint內(nèi)部調(diào)用的function不能包含output或ref類型的arguments,但是const ref是允許的;
  • 在constraint內(nèi)部調(diào)用的function應(yīng)該是automatic類型的;
  • 在constraint內(nèi)部調(diào)用的function不能修改constraints,例如調(diào)用rand_mode或constraint_mode方法;
  • Function會(huì)先被求解,也就是它的返回值會(huì)被當(dāng)作state variables。因此,function的arguments和其它rand variables會(huì)隱含建立求解order關(guān)系(有一點(diǎn)點(diǎn)類似solve…before…),arguments會(huì)先求解,解完之后作為傳入function得到返回值作為state variables,最后再求解其它rand variables。另外,如果隱含約束關(guān)系會(huì)造成求解循環(huán)依賴,那么仿真器將會(huì)報(bào)錯(cuò);

順便提一下state variables的概念,它是constraint guards的一種,我們可以把它理解成常數(shù)(constants),也就是它的值是固定的了,不會(huì)發(fā)生變化,不會(huì)創(chuàng)建constraint。

接下來看個(gè)例子來加深印象。

代碼1如下:

class packet;
  rand int length, size, add;
  
  constraint const_c { /*solve length before size;*/ length == calc(size, add); }
  constraint const_d { size inside {1, 2, 3, 4, 5, 6, 7, 8}; }
  constraint const_e { add inside {1, 0}; }
  
  function int calc(int _s, int _m);
    if ( _m )
      return ( 100 + 2**_s + _s);
    else
      return ( 100 - 2**_s - _s);
  endfunction: calc
  
endclass
 
module top;
  initial begin
    packet pkt;
    pkt = new();
    repeat(3) begin
      pkt.randomize();
      $display("length = %0d, size = %0d, add=%0d",pkt.length, pkt.size, pkt.add);
    end
  end
endmodule

使用Cadence Xcelium 20.09運(yùn)行結(jié)果如下:

xcelium > run
length = 120, size = 4, add=1
length = -35, size = 7, add=0
length = 80, size = 4, add=0
xmsim: *W,RNQUIE: Simulation is complete.

結(jié)果分析:

上面例子在const_c constraint block里使用了函數(shù)calc,block給calc傳遞的實(shí)參是size和add,因此systemverilog會(huì)先求解size和add變量的值,然后再去計(jì)算calc的返回結(jié)果,這時(shí)size, add以及calc()函數(shù)的返回值都當(dāng)作state variables,最終再去求解length變量的值。

但如果將代碼1里第4行的/ solve length before size; /注釋打開,也就是如下代碼2:

class packet;
  rand int length, size, add;
  
  constraint const_c { solve length before size; length == calc(size, add); }
  constraint const_d { size inside {1, 2, 3, 4, 5, 6, 7, 8}; }
  constraint const_e { add inside {1, 0}; }
  
  function int calc(int _s, int _m);
    if ( _m )
      return ( 100 + 2**_s + _s);
    else
      return ( 100 - 2**_s - _s);
  endfunction: calc
  
endclass
 
module top;
  initial begin
    packet pkt;
    pkt = new();
    repeat(3) begin
      pkt.randomize();
      $display("length = %0d, size = %0d, add=%0d",pkt.length, pkt.size, pkt.add);
    end
  end
endmodule

那么使用Cadence Xcelium 20.09運(yùn)行結(jié)果變成如下所示:

xcelium > run
xmsim: *W,RNDSVB: These solve/before constraints are circular:
0.    length - > size
          constraint const_c { solve length before size; length == calc(size, add); } (./testbench.sv,4)
1.    size - > length
        ( because of an implicit solve..before for random function-call arguments ):   constraint const_c { solve length before size; length == calc(size, add); } (./testbench.sv,4)
 
      pkt.randomize();
                  |
xmsim: *W,SVRNDF (./testbench.sv,22|18): The randomize method call failed. The unique id of the failed randomize call is 0.
Observed simulation time : 0 FS + 0

結(jié)果分析:

這是因?yàn)閟olve length before size與cacl()函數(shù)創(chuàng)造的隱含求解order約束沖突了。(Circular dependencies)

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

    關(guān)注

    0

    文章

    113

    瀏覽量

    8224
  • 求解器
    +關(guān)注

    關(guān)注

    0

    文章

    77

    瀏覽量

    4532
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SystemVerilog的Virtual Methods

    SystemVerilog多態(tài)能夠工作的前提是父類的方法被聲明為virtual的。
    發(fā)表于 11-28 11:12 ?698次閱讀

    SystemVerilog的“const”類屬性

    SystemVerilog可以將類屬性聲明為常量,即“只讀”。目的就是希望,別人可以讀但是不能修改它的值。
    發(fā)表于 11-29 10:25 ?2135次閱讀

    SystemVerilog的聯(lián)合(union)介紹

    SystemVerilog ,聯(lián)合只是信號(hào),可通過不同名稱和縱橫比來加以引用。
    的頭像 發(fā)表于 10-08 15:45 ?1389次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的聯(lián)合(union)介紹

    從可綜合的RTL代碼的角度聊聊interface

    SystemVerilog引入了interface,這里我們從可綜合的RTL代碼的角度聊聊interface。
    的頭像 發(fā)表于 10-12 09:06 ?1813次閱讀
    從可綜合的RTL代碼的角度<b class='flag-5'>聊聊</b>interface

    [啟芯公開課] SystemVerilog for Verification

    學(xué)快速發(fā)展,這些趨勢(shì)你了解嗎?SystemVerilog + VM是目前的主流,在未來也將被大量采用,這些語言和方法學(xué),你熟練掌握了嗎?對(duì)SoC芯片設(shè)計(jì)驗(yàn)證感興趣的朋友,可以關(guān)注啟芯工作室推出的SoC芯片
    發(fā)表于 06-10 09:25

    更好地理解SystemVerilog的多態(tài)Polymorphism

    多態(tài)(Polymorphism) ,從字面意思上看指的是多種形式,在OOP(面向?qū)ο缶幊?中指的是同一個(gè)父類的函數(shù)可以體現(xiàn)為不同的行為。在SystemVerilog,指的是我們可以使用父類句柄來
    發(fā)表于 12-05 17:34

    SystemVerilog可以嵌套的數(shù)據(jù)結(jié)構(gòu)

    SystemVerilog除了數(shù)組、隊(duì)列和關(guān)聯(lián)數(shù)組等數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)還可以嵌套。
    的頭像 發(fā)表于 11-03 09:59 ?1595次閱讀

    SystemVerilog的package

    SystemVerilog packages提供了對(duì)于許多不同數(shù)據(jù)類型的封裝,包括變量、task、function、assertion等等,以至于可以在多個(gè)module中共享。
    的頭像 發(fā)表于 11-07 09:44 ?1253次閱讀

    SystemVerilog的struct

    SystemVerilog“struct”表示相同或不同數(shù)據(jù)類型的集合。
    的頭像 發(fā)表于 11-07 10:18 ?2450次閱讀

    SystemVerilog的Shallow Copy

    SystemVerilog的句柄賦值和對(duì)象復(fù)制的概念是有區(qū)別的。
    的頭像 發(fā)表于 11-21 10:32 ?903次閱讀

    SystemVerilog的Semaphores

    SystemVerilogSemaphore(旗語)是一個(gè)多個(gè)進(jìn)程之間同步的機(jī)制之一,這里需要同步的原因是這多個(gè)進(jìn)程共享某些資源。
    的頭像 發(fā)表于 12-12 09:50 ?3364次閱讀

    簡(jiǎn)述SystemVerilog的隨機(jī)約束方法

    上一篇文章介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過使用隨機(jī)約束,我們可以將隨機(jī)限制在一定的空間內(nèi),有針對(duì)性地提高功能覆蓋率。
    的頭像 發(fā)表于 01-21 17:03 ?2083次閱讀

    SystemVerilog實(shí)用知識(shí)點(diǎn):覆蓋率之Function Coverage

    SystemVerilog是一名芯片驗(yàn)證工程師,必須掌握的一門語言,其中Function Coverage是必須要懂的知識(shí)點(diǎn)之一;
    的頭像 發(fā)表于 06-04 16:30 ?7787次閱讀
    <b class='flag-5'>SystemVerilog</b>實(shí)用知識(shí)點(diǎn):覆蓋率之<b class='flag-5'>Function</b> Coverage

    Systemverilog的Driving Strength講解

    systemverilog,net用于對(duì)電路連線進(jìn)行建模,driving strength(驅(qū)動(dòng)強(qiáng)度)可以讓net變量值的建模更加精確。
    的頭像 發(fā)表于 06-14 15:50 ?1564次閱讀
    <b class='flag-5'>Systemverilog</b><b class='flag-5'>中</b>的Driving Strength講解

    SystemVerilog的隨機(jī)約束方法

    上一篇文章《暗藏玄機(jī)的SV隨機(jī)化》介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過使用隨機(jī)約束,我們可以將隨機(jī)限制在一定的空間內(nèi),有針
    的頭像 發(fā)表于 09-24 12:15 ?1719次閱讀
    主站蜘蛛池模板: 中文成人在线视频| 国产h视频在线观看网站免费| 国产欧美精品国产国产专区| 蜜桃成人在线| 亚洲午夜久久久久中文字幕 | ava云直播| 久久高清免费视频| 小蝌蚪视频在线观看免费观看WWW| 99久久精品互换人妻AV| 久久国产乱子伦精品免费不卡| 无限资源在线看影院免费观看| WRITEAS检查身体| 李亚男三级| 一个人看的WWW高清电影| 国产精品无码AV天天爽人妻蜜桃 | 亚洲伊人情人综合网站| 国产国拍亚洲精品av麻豆| 欧美日韩亚洲成人| 最新国产成人综合在线观看| 好大好爽好深舒服死了| 无套内射CHINESEHD| 大陆老熟女60岁| 日本高清不卡码无码v亚洲| 最近中文字幕MV免费高清在线| 果冻传媒在线观看网站| 午夜影院老司机| 国产99在线视频| 日本免费一区二区三区最新vr| 99久久99久久精品| 毛片在线全部免费观看| 中国二级毛片| 久久这里只精品热在线18| 亚洲性夜夜夜色综合网| 韩国女人高潮嗷嗷叫视频| 性色AV一区二区三区咪爱四虎 | 国产免费人成在线视频有码| 日韩一区二区三区视频在线观看| 办公室里呻吟的丰满老师电影| 女教师二十三岁| av亚洲色天堂2017| 欧美特级特黄AAAAA片|