$test$plusargs(),$value$plusargs()怎麼用?有什麼坑?

2020-12-14 傑瑞IC驗證

各位朋友,在SystemVerilog中有兩個函數作用很大,他們是:

$test$plusargs ( string )

$value$plusargs ( user_string, variable )

如果驗證平臺是人類的寵物,他們就是人與寵物之間溝通的鑰匙。

如果驗證平臺是一座雄偉的城堡,他們就是城堡內部與外界聯繫的電話。

如果驗證平臺是一杯奶茶,他們就是喝奶茶的那根吸管!!

太感動了,這首詩太美了!

01、怎麼用?

相信從這首詩中大家已經很清楚的知道這兩個函數什麼作用了!沒錯!

我們在仿真運行過程中可以「+」很多的命令字符串,而這兩個函數就是與這些命令字符串裡應外合,從而改變驗證平臺的!

上代碼!

if( $test$plusargs ( 「JERRY_IS_COOL」) )

$display(「jerry is so cool !! 」);

else

$display(「jerry is handsome !! 」);

int jerry_face_score;

if( $value$plusargs ( 「JERRY_FACE_SCORE= %0d」, jerry_face_score ) )

$display(「^_^ jerry_face_score=%0d ^_^」, jerry_face_score );

我們在平臺中加入如上的代碼,然後在仿真運行的命令中加入如下命令:

+JERRY_IS_COOL

+JERRY_FACE_SCORE=100

最後平臺會列印出什麼呢?是的,會列印出如下的字符出來:

jerry is so cool !!

^_^ jerry_face_score=100 ^_^

我們來分析分析哈,稍微觀察不難發現:

$test$plusargs (「JERRY_IS_COOL」) 這個函數只有一個參數,是一個字符串!只要外面傳了這個字符串,那這個函數就會反回1,否則返回0. 如上代碼,當我們傳「JERRY_IS_COOL」時,就返回了1.

$value$plusargs ( 「JERRY_FACE_SCORE= %0d」, jerry_face_score ),這個就更厲害了,兩個參數,前面的參數是一個傳數據的格式,後面是要改變的變量!我們傳+JERRY_FACE_SCORE=100

結合這個函數是什麼意思呢?意思等價於:jerry_face_score=100;

所以通過上面的分析,各位初學者應該明白這兩個函數多牛逼了吧?

$test$plusargs()意味著我們可以通過外面的標記改平臺的邏輯,比如我想給某段代碼加個使能,那有了這個就太方便了!

if( $test$plusargs (「ENABLE」) )

begin

……

end

外面不傳這個ENABLE,它就不使能!

$value$plusargs ( ) 就更厲害了,相當於想傳什麼值就傳什麼值啊!

你可以在外面給值!當然這個函數不一定給值,還可以給字符串!

傳字符串時,我們可以在sequence的重載等處,用處非常廣哦~

02、有什麼坑?

各位觀眾!Jerry要強調的重點來啦!!

大家看這樣一段代碼!!

if( $test$plusargs ( 「JERRY」) )

$display(「JERRY」);

if( $test$plusargs ( 「JERRY1」) )

$display(「JERRY1」);

if( $test$plusargs ( 「JERRY11」) )

$display(「JERRY11」);

if( $test$plusargs ( 「JERRY111」) )

$display(「JERRY111」);

if( $test$plusargs ( 「JERRY_IS_COOL」) )

$display(「JERRY_IS_COOL」);

如果外面傳

+JERRY11

請問會列印哪句話???

有人說,這個不是很明顯嗎?肯定是列印這句:

JERRY11

注意注意!錯了!這就是坑啊!

這句話其實會列印:

JERRY

JERRY1

JERRY11

這三句!!

為什麼強調這個,你用這個功能用的很爽的時候突然發現邏輯和想像中的不一樣了!也許就是這種坑!

為什麼會列印這三句呢?

$test$plusargs()其實是由括號裡往外匹配,只要外面傳的命令有相同的字符串,就算匹配成功!這個字符串可能是外面命令完整的字符串,也可能是外傳字符串的子串!

所以在此,Jerry建議,就不要打擦邊球了!

用這個傳參數的時候儘量不要產生這種問題,可以多加一些下劃線後綴什麼的嘛~

哈哈,好了,今天Jerry就和大家聊的這裡,你會了嗎?

相關焦點

  • 京東plus會員有什麼用 京東plus會員贈送愛奇藝會員
    京東plus會員有什麼用?最近年費京東plus會員可以免費領取愛奇藝年費會員,不僅購物可以享受最優折扣,還能免費享受愛奇藝一年的VIP服務。那麼怎麼免費領取年費VIP呢?跟著小編操作,帶你 京東plus會員有什麼用?
  • 為什麼 @Value 可以獲取配置中心的值?
    配置屬性源有兩種方式可以進行屬性源配置:使用 @PropertySource 註解,或者通過 MutablePropertySources 的 API。HashMap<>();        map.put("my.name", "coder小黑");        context.getEnvironment()                .getPropertySources()                .addFirst(new MapPropertySource("coder-xiaohei-test
  • 《寶可夢劍盾》精靈球plus怎麼用 精靈球plus使用攻略
    導 讀 小編今天來介紹一下《寶可夢:劍/盾》遊戲中如何使用精靈球plus吧。
  • MyBatis-Plus為啥這麼牛?
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫前言大家有用過MyBatis-Plus(簡稱MP)的都知道它是一個MyBatis的增強工具,旨在MyBatis的基礎上只做增強不做改變
  • 蘋果8plus跟蘋果7plus區別是什麼?
    蘋果8plus跟蘋果7plus區別是什麼?iPhone7 Plus 的屏幕效率不如iPhone8 Plus,因為iPhone8 Plus有原廠的顏色如果你想打開兩款手機的屏幕,看看iphone8plus顯示什麼最好。
  • 華為暢享7和7plus有什麼區別?暢享7和7plus對比
    華為機型眾多,不僅有高端價位的P系列和Mate系列,還有麥芒、A系列、暢想系列等等,我們今天提到的華為暢享7就是定位於中低端價位。很多網友朋友問華為暢享7和7 plus哪個好?華為暢享7和7 plus有什麼區別?暢享7和7 plus哪個值得買?
  • 幫寶適一級幫plus是國產的嗎,幫寶適plus什麼意思
    目前市場上紙尿褲品牌是非常多,由於國外紙尿褲知名度普遍比較高,因此成為了很多寶媽們的首選,不過幾年來,國產紙尿褲品牌也逐漸多起來了,而且在市場上有著不錯的銷量,並獲得了很多消費者的認可,所以無論是進口還是國產的紙尿褲,不會對寶寶皮膚有傷害的就是不錯的選擇,那麼幫寶適一級幫plus是國產的嗎
  • 高頻考點:什麼是泛型,泛型的使用場景
    一起學習、成長、溫情的熱愛生活作者丨BossXiang 圖丨pexels泛型的使用場景,可以作用在什麼位置,使用泛型有什麼好處,靈魂三連問???佔位)不固定傳入什麼類型,即可通用類型,如果不設置泛型的上限(例如:< ? extends List>)和下限(例如:<? super List>)。3.使用泛型後對象或者集合內只能放入指定的數據類型,可以保證對象或者集合的安全性,減少類型的轉換操作。
  • 巧用Java8中的Stream,讓集合操作飛起來!
    比如在項目中經常用到集合,遍歷集合可以試下lambda表達式,經常還要對集合進行過濾和排序,Stream就派上用場了。用習慣了,不得不說真的很好用。Stream作為java8的新特性,基於lambda表達式,是對集合對象功能的增強,它專注於對集合對象進行各種高效、便利的聚合操作或者大批量的數據操作,提高了編程效率和代碼可讀性。
  • 面試官寫了個雙冒號:問我這是什麼語法?Java中有這玩意?
    \'' +", age=" + age +'}';}// Getter&Setter}public static void main(String[] argsempty() : of(value);}// 如果Optional中有一個值,返回值,否則拋出 NoSuchElementException 。
  • Office Tool Plus
    office tool plus是一個可以自定義安裝Office的小工具,免費、小巧、無廣告、無捆綁。使用office tools可以輕鬆地配置您的Office安裝,指定安裝什麼、不安裝什麼以及更新的通道等。
  • 什麼?搞Java的你還不會Spring?一篇文章帶你掌握
    ></bean>現在我們就不需要手動引用Bean了,而是在bean節點中配置一個autowire屬性,它有三個值,分別有什麼作用剛剛已經介紹了。;/property>通過T()可以調用一個類的靜態方法或者靜態屬性,比如這裡用T()正則表達式的匹配<property name="email" value="#{admin.email matches '[a-zA-Z0-9._%+-] + @[a-zA-Z0-9.
  • Aspen plus與Hysys,他們到底有何不同?
    在之前的推送中(什麼?流程模擬除了Aspen Plus,居然還有其他軟體?),小編為大家介紹了PRO/II,除此之外,還有另一款大名鼎鼎的流程模擬軟體,他就是aspen plus的好兄弟——hysys。
  • 《精靈寶可夢劍盾》寶可夢怎麼進入精靈球plus 進入精靈球plus方法
    導 讀 《精靈寶可夢:劍/盾》寶可夢進入精靈球plus方法介紹。寶可夢劍盾怎麼進精靈球Plus?
  • 蘋果6 plus怎麼刪不用軟體卸載不用的app
    刪軟體卸載app可是手機使用過程中經常要做的事,所以,一定要會的,蘋果6 plus怎麼刪軟體卸載app,你知道嗎?不知道也沒關係,下面為大家介紹下具體的操作步驟,感興趣的朋友不要錯過蘋果6 plus怎麼刪軟體卸載app,接下來我為用戶們介紹一下蘋果6 plus怎樣刪軟體卸載app一起來看看吧。  蘋果6 plus如何刪軟體卸載app教程:  最簡單的辦法,就是手指按住屏幕,直到屏幕畫面出現震動,應用圖片出現X,選擇那個X。接著出現提示,點擊刪除就可以卸載這個APP了。
  • 為啥用枚舉,枚舉有哪些用法?
    我們來看看怎麼使用它:class Test{    public static void main(String[] args){        System.out.println(Season.SUMMER);  //輸出:SUMMER    }}