在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

uvm命令行傳遞參數的小技巧

我快閉嘴 ? 來源:杰瑞IC驗證 ? 作者:Q哥 ? 2022-08-19 11:53 ? 次閱讀

當我們在創建動態仿真case時,使用命令行參數可以非常方便地控制DUT和TB的行為,比如配置寄存器、控制激勵的發送數量、打開或關閉某些scoreboard等。

當面對很多驗證組件,并且有很多命令行參數需要傳遞的時候,如何才能簡單地實現給這些組件傳遞命令行參數呢?

大家首先想到的可能是plusargs。

沒錯,plusargs的確是一個非常簡單易用的機制。對于規模小的項目,完全夠用。但是對于像包含了100個agent、涉及多個工程師共同開發的復雜大項目,plusargs的缺陷就暴露出來了。

1plusargs的缺陷

首先,plusargs使用的位置太隨意了,可以在module、class、interface等等任何能使用begin/end塊的地方解析命令行參數。這就埋下了彼此影響的坑??催^jerry之前文章“$test$plusargs(),$value$plusargs()怎么用?有什么坑?”的朋友們還記得,plusargs不僅僅認為“張三”和“張三”同名,連“張三”和“張三豐”也算同名!使用的時候,稍有不慎,可能會因為同名誤傷了其他組件。

其次,plusargs使用的時候,命令行參數的格式必須跟解析的格式一樣,否則會傳遞失敗,甚至傳遞錯誤的值。比如:按照16進制解析的參數,如果按10進制傳遞,就會傳遞錯誤的值。即使傳遞16進制,到底是按照+data=‘hff00傳遞,還是按照+data=32’hff00傳遞,又或者按照+data=ff00傳遞,也需要提前約定并統一風格。這在大型項目里,直接增加了溝通成本。

另外,plusargs不支持數組和枚舉類型的數據。用戶必須自己編寫額外代碼進行解析。

2uvm命令行參數簡介

uvm定義了一套自己的命令行參數規則,可以非常方便地從命令行傳遞常用類型數據到tb里,完美地解決了上面提到的幾個缺陷。下面逐一舉例說明。

2.1 傳遞int類型參數

圖1 代碼片段1

如圖1代碼片段所示,32和33行定義了40-bit變量data和int變量data_vld,為了讓uvm命令行參數可以傳遞值給它們,需要添加36和37行的聲明。

這里需要注意下,uvm_field_int只是聲明這個變量按照整數數據類型解析(而不是real浮點數、string字符串、enum枚舉或者數組等類型), 大家不用擔心40比特data的高位會丟失。

然后使用下面的命令行參數就可以分別傳遞參數值給data和data_vld。

圖2 uvm命令行傳遞int參數

眼尖的朋友們有沒有發現,這個命令行參數是不是有些眼熟?沒錯,之前我們聊uvm_info高級技巧的時候,用到的也是類似的命令行參數。(uvm_info高級技巧(1) ---如何屏蔽某些刷屏的啰嗦調試信息)

1. 等號后面第一個參數就是component的路徑,也就是當你調用get_full_name所返回的完整路徑名。因為有路徑限制,可以避免不同component的同名問題。類似之前講過的,這里的路徑可以使用星號通配符。

2. 第二個參數就是要賦值的變量名字,不用再擔心plusargs誤把“張三”和“張三豐”當作同名的問題了。

3. 第三個參數是傳遞的數值,這個值可以是10進制也可以是16進制、2進制、8進制,只要符合verilog語法就可以了,uvm會自動解析的。因為要符合verilog語法,所以16進制不能只寫ff00,可以寫32’hff00, ‘hff00, ‘shff00。除此之外,寫成0xff00也是可以的。

2.2 傳遞string類型參數

對于string類型的數據,使用方法跟int類似。定義方法如圖3所示,命令行參數如圖4所示。

圖3 定義string類型參數

圖4 傳遞string類型參數

2.3 傳遞enum類型參數

對于plusargs傳參數,如果要處理enum變量,要么放棄可讀性按照int傳遞,要么先按照string傳遞然后再另外寫case語句解析enum。

對于uvm命令行參數,處理enum就簡單多了。閑言少敘,直接上代碼,如圖5所示。

圖5 定義枚舉類型變量

82行定義了fruit_e這個枚舉類型,85行定義了fruit_e類型的枚舉變量m_frt。88行聲明枚舉變量的時候,相比int或string類型,多了第一個參數,就是枚舉變量具體的枚舉類型。

命令行參數如圖6所示,直接按照枚舉進行傳遞就好了,uvm會自動解析。勘誤,下圖參數enum當為string

圖6 傳遞枚舉類型參數

2.4 傳遞int數組參數

除了單個的變量,uvm也支持命令行傳遞數組類型的參數。如圖7所示。

圖7 聲明數組類型變量

那么問題來了,對于這100個參數,如果傳遞的大部分參數都是同樣的值,只有少數值不一樣,難道還要寫100個命令行參數嗎?

答案當然是否定的。uvm命令行參數不僅支持component路徑使用通配符,傳遞數組的時候,也可以通配。

圖8 使用通配符給數組傳遞參數

如圖8所示。先給所有的data元素賦值’hff, 然后單獨給data[88]賦值1。因為命令行參數后面賦值會覆蓋掉前面的賦值,所以data[88]最終傳遞的是1.

這里大家注意下,數組類型聲明的是uvm_field_sarray_int, 傳遞參數的時候還是按照int的方式傳遞,只不過變量名字帶了數組元素下表,并且支持星號通配符。

2.5 傳遞string數組和enum數組

string數組、enum數組的使用方法和int數組類似,沒什么可說的。參照圖9的聲明方法和圖10的命令行參數。

圖9 聲明string數組和enum數組

圖10 傳遞參數給string數組和enum數組

除了上面提到的這些簡單常用的參數類型,還有類似real浮點數、動態數組、關聯數組等類型。大家如果有需求,可以自行參考uvm官方文檔學習使用。限于篇幅,不再贅述。

2.6 uvm命令行參數什么時候生效的?

善于思考的朋友們,有沒有想到一個問題:既然uvm會自動解析uvm_set_config命令行參數,那么這些參數值是什么時候傳遞給tb里面的變量的?會不會跟我們初始化的值沖突?

圖11的示例代碼,我們加上變量初始化和打印語句。

圖11 調試uvm命令行參數生效時間

傳遞命令行參數+uvm_set_config_int = uvm_test_top.env.agt[0],data,’hdeadbeef,根據圖12的測試結果可以看到,40行打印出的data值是32行初始化的,45行打印的data值是uvm_set_config_int命令行參數傳遞的,41行的賦值被命令行參數給覆蓋掉。

也就是說,uvm_set_config_int是在new之后,build_phase之前完成的。大家在使用的時候一定要注意這個失效時間,避免多次賦值互相干擾。

圖12 uvm_set_config參數生效時間測試結果

3uvm命令行參數的限制

1. uvm命令行參數目前只能給component傳遞,不能給object傳遞。不過大家可以換一個思路,比如sequence里面要用參數mydata的話,可以傳遞到對應的sequencer,在sequence里面通過調用p_sequencer.mydata就可以了。

圖13 間接傳遞uvm命令行參數給sequence

2. uvm命令行參數指定component路徑的時候,如果要使用星號通配符,需要格外注意。因為uvm會把env*.sequencer匹配成env.sequencer、env0.sequencer、env0.agent.sequencer、env1.sequencer、env1.agent.sequencer等等(精通正則表達式的朋友們可以繼續發散)。

3. uvm命令行參數會自動在new之后,build phase之前解析。使用的時候注意不要被覆蓋了。

總結

Q哥今天給大家安利了uvm命令行傳遞參數的小技巧。相比plusargs,uvm命令行參數當然不是完美的,但是用到恰當的場景下,還是可以事半功倍的。大家在使用的時候,注意下上面的提到的幾個問題。

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 參數
    +關注

    關注

    11

    文章

    1865

    瀏覽量

    32745
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19356
  • 代碼
    +關注

    關注

    30

    文章

    4874

    瀏覽量

    69934
  • 命令行
    +關注

    關注

    0

    文章

    80

    瀏覽量

    10505

原文標題:你還在用plusargs傳遞參數嗎?來試試這個玩法~

文章出處:【微信號:處芯積律,微信公眾號:處芯積律】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    支持命令行傳遞參數嗎?

    的每一個。要手動嘗試在Makefile中設置CFLAGS。可以在預處理器宏部分訪問命令行傳遞參數嗎?如果這是在命令行值不是構建的一部分的IDE中構建的,那么我還需要能夠支持默認值。
    發表于 03-17 06:03

    cmd網絡經典命令行

    cmd網絡經典命令行:
    發表于 06-11 15:17 ?36次下載
    cmd網絡經典<b class='flag-5'>命令行</b>

    如何獲取其它程序的命令行參數

    開發環境:VC6 Windows XP 測試環境:WindowsXP 我們都知道,在程序里獲取命令行參數很簡單,WinMain函數會以參數的形式傳遞給我們,或者可以調用API Ge
    發表于 10-14 09:24 ?1次下載

    C語言入門教程-命令行參數

    命令行參數 在C中,獲取用戶輸入的命令行參數是很方便的。程序的主函數會接受一個argv參數。有許多高級的庫函數都會用到argv結構,所以了
    發表于 07-29 14:22 ?2659次閱讀

    caxa命令行中的應用

    caxa命令行中的應用 命令行對于大多用戶來說往往只是輸入數據的作用,但是其中的奧妙還有很多,下面就給大家
    發表于 10-18 18:18 ?2363次閱讀

    博達環網配置命令行

    博達工業交換要環網配置命令行
    發表于 12-27 16:24 ?0次下載

    CMD的命令行高級教程

    CMD的命令行高級教程
    發表于 10-24 08:31 ?30次下載
    CMD的<b class='flag-5'>命令行</b>高級教程

    C語言中一個簡單的實例,檢查命令行是否有提供參數

    多個命令行參數之間用空格分隔,但是如果參數本身帶有空格,那么傳遞參數的時候應把參數放置在雙引號
    的頭像 發表于 11-12 14:49 ?3530次閱讀

    如何從命令行獲取和解析參數

    這是一篇技術干貨快文,能夠快速閱讀完。文章內容是關于如何從命令行獲取和解析參數,包括SystemVerilog本身支持的系統函數和UVM提供的函數封裝,并給出示例代碼和仿真結果。
    的頭像 發表于 05-30 14:05 ?3410次閱讀

    Linux命令行與shell腳本編寫

    Linux命令行與shell腳本編寫
    發表于 01-11 16:50 ?4次下載

    LabVIEW命令行調用exe傳入的參數如何獲取

    有些場景下,我們用LabVIEW開發的應用程序,需要通過命令行來調用,并向該應用程序傳遞參數,那么在程序中如何才能獲取這些參數呢?
    發表于 10-11 09:28 ?3096次閱讀
    LabVIEW<b class='flag-5'>命令行</b>調用exe傳入的<b class='flag-5'>參數</b>如何獲取

    linux虛擬機怎么調出命令行

    在Linux虛擬機中調出命令行界面,可以通過以下步驟實現: 打開虛擬機,進入到Linux系統。 在桌面或應用菜單中找到終端或命令行圖標,點擊打開。 輸入命令行指令,執行相應的操作。 另外,也可以通過
    的頭像 發表于 11-08 11:28 ?3490次閱讀

    linux切換到命令行模式

    在Linux中,可以通過以下步驟切換到命令行模式: 打開終端??梢栽趹貌藛沃姓业浇K端或命令行終端。 在終端中輸入命令“exit”或“logout”,然后按回車鍵。 系統會提示您輸入管理員密碼。輸入
    的頭像 發表于 11-13 16:47 ?2041次閱讀

    eclipse怎么使用命令行

    命令行中使用Eclipse來完成一些特定的任務。本文將詳細介紹如何在命令行中使用Eclipse。 首先,我們需要確保已經正確安裝了JDK(Java Development Kit)和Eclipse
    的頭像 發表于 12-06 11:26 ?3243次閱讀

    idea如何輸入命令行參數

    在許多軟件開發和系統管理的任務中,我們經常需要向應用程序傳遞命令行參數命令行參數是在運行時傳遞
    的頭像 發表于 12-06 15:01 ?1469次閱讀
    主站蜘蛛池模板: 5x性区m免费毛片视频看看 | 中文字幕色婷婷在线精品中 | 四虎国产精品成人永久免费影视 | 国产性片在线 | 久久久精品2021免费观看 | 婷婷在线影院 | 老司机午夜永久在线观看 | 一区二区三区免费视频播放器 | 国产成人91青青草原精品 | 亚洲成人在线电影 | 五月婷婷影院 | 三级色网站 | 夜夜夜爽bbbb性视频 | 天堂网最新版中文 | 高清视频黄色录像免费 | 四虎影视色费永久在线观看 | 天天做天天爰夜夜爽 | 欧美一级视频在线观看欧美 | 九月丁香婷婷亚洲综合色 | 美女视频黄的免费视频网页 | 午夜毛片免费观看视频 | 色综合中文字幕 | 男女交性拍拍拍高清视频 | 日韩大尺度视频 | 亚洲成a人不卡在线观看 | 最新理论三级中文在线观看 | 三级黄色一级视频 | 成年美女黄网站色大免费视频 | 九九热精品在线观看 | 美女拍拍拍爽爽爽爽爽爽 | 欧美性猛交aa一级 | 免费欧美黄色 | 欧美色惰| 人人人干 | 免费在线观看大片影视大全 | 国产精品久久永久免费 | 全免费a级毛片免费看不卡 全日本爽视频在线 | 在线a亚洲老鸭窝天堂新地址 | 天天综合色天天桴色 | 婷婷色网 | 狠狠干b|