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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

分享一些SystemVerilog的coding guideline

sanyue7758 ? 來源:數字芯片實驗室 ? 2023-11-22 09:17 ? 次閱讀

本文分享一些SystemVerilog的coding guideline。

1fc67d88-8882-11ee-939d-92fbcf53809c.png

1、Use a descriptive typedef for variables

數字電路中,萬物皆為二進制,甚至在Systemverilog的演進過程中連wire和reg都不做區分,統一成logic。有利也有弊,因為在統一的過程其實也丟失了一些信息。也許可以在注釋中進行增補描述,但總是不夠直接,而且變量聲明出錯的話,也無法進行檢查。

有以下兩種情況容易出現編碼錯誤:

1、例如地址變量,地址的位寬變化時可能需要大面積的修改(或者用宏代替)

2、相同位寬的信號,可能意義完全不同。例如,logic [4:0] cnt,fsm;

對此,引入自定義類型語法typedef。

基本格式為:

typedef 已有類型 新類型;

一般自定義類型后面添加一個_t,方便區分。

typedeflogic[31:0]word_t;//32位data
typedeflogic[15:0]addr_t;//16位addr

2、Use an end label for methods, classes and packages

task local_task();
  $display("Insidetask");
endtask:local_task

在systemverilog中應該在方法的聲明開始和結束加上label,方便代碼review時清晰地看出來task聲明的語句塊范圍。

3、Use `includes to compile classes into packages

4、Define classes within packages

5、Only `include a file in one package

6、Import packages to reference their contents

7、Avoid `including the same class in multiple locations

在systemverilog驗證環境中如果使用到一些公共組件,建議采用下面這個形式,即package+`include,將同一個組件內的多個class都編譯進一個package。

避免在多個地方去include 一個class的定義,不然很容易導致類型重復定義的問題。

package A;
`include "A_driver.sv";
`include "A_monitor.sv";
...
endpackage : A


importA::A_driver;
A_drivera_driver;

8、Define one class per file

顯而易見,一個文件只定義一個class會更加清晰。例如我們經常定位uvm源碼問題時很難通過vcs.log里面的編譯文件名稱直接找到相應的class定義位置。


9、Check that $cast() calls complete successfully

當我們使用類的多態特性時,需要始終使用$cast()。判斷返回值,以確定是否確實是其子類。類似:

if(!$cast(color,c))     
  $display("cast failedforc=%0d",c);

10、Check that randomize() calls complete succesfully。

在使用class的randomize()方式隨機變量時,建議始終檢查隨機的結果。不然就只能依賴仿真工具報Warning。

if(p.randomize() == 0);
$display("Randomize fail!!!!");

11、Use if rather than assert to check the status of method calls。

在判斷方法執行結果時,建議使用if-else,而不是使用assert。一般對于assert fail時,工具只是上報warning,而不是error。

12、Wrap covergroups in class objects

在class里面構造功能覆蓋率,因為如果直接抽取RTL信號的話,那么后仿真時這個信號可能就會丟失了。而且功能覆蓋率的構造會被設計的RTL信號牽引

13、Only samplecovergroups using the sample() method

對于cover group的采樣要非常精細地控制采樣時刻,不然會覆蓋很多非關鍵時刻點的數據值,也會誤導覆蓋率分析

14、Label covergroup coverpoints and crosses

和前面的class加上label一樣,coverpoint也要手動加上label,方便verdi打開vdb文件時清晰地看出未覆蓋的場景。

classtest;
logic[3:0]port_a;
  covergroup demo_cg with function sample(bit[3:0] i);
    label:coverpoint i;
  endgroup
  ...
port_a=1;
  demo_cg.sample(port_a);
endclass

15、Don't rely on static initialization order

SV或者UVM中某些代碼執行時刻是同一個step,但是執行順序仍然是確定性的。但是建議盡量不要依賴這樣工具行為。







審核編輯:劉清

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

    關注

    2

    文章

    803

    瀏覽量

    42151
  • Verilog
    +關注

    關注

    28

    文章

    1366

    瀏覽量

    111812
  • 數字電路
    +關注

    關注

    193

    文章

    1637

    瀏覽量

    81578
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19430

原文標題:SystemVerilog的coding guideline

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

收藏 0人收藏

    評論

    相關推薦
    熱點推薦

    關于一些對OpenMP優化的方式

    本文調研了一些對OpenMP優化的方式。
    發表于 11-22 09:36 ?1246次閱讀

    systemverilog學習教程

    systemverilog一些基本語法以及和verilog語言之間的區別。
    發表于 04-01 14:24

    CAM 350一些基本操作

    CAM 350一些基本操作 G
    發表于 01-25 11:26 ?2372次閱讀

    一些電子公司的簡稱

    一些電子公司的簡稱
    發表于 07-10 14:21 ?20次下載

    Autium_designer的一些經驗

    Autium_designer的一些經驗
    發表于 02-28 21:16 ?0次下載

    一些制作1969的分享經驗

    一些制作1969的分享經驗
    發表于 03-04 18:25 ?37次下載

    VICOR模塊的一些基本應用

      VICOR模塊的一些基本應用
    發表于 11-24 11:42 ?17次下載

    一些能夠解決生活中一些具體問題的常用算法的整理集合

    這是篇八千字的長文,是一些算法筆記的整理集合,希望能給你幫助。
    的頭像 發表于 06-18 11:41 ?1.8w次閱讀

    一些簡單趣味小電子制作教程

    一些簡單趣味小電子制作教程
    發表于 09-26 14:05 ?31次下載

    SystemVerilog中枚舉類型的使用建議

    SystemVerilog中枚舉類型雖然屬于種“強類型”,但是枚舉類型還是提供了一些“不正經”的用法可以實現一些很常見的功能,本文將示例一些
    的頭像 發表于 09-01 14:20 ?2040次閱讀

    get與post的請求一些區別

    今天再次看到這個問題,我也有了一些新的理解和感觸,臨時回顧了下 get 與 post 的請求的一些區別。
    的頭像 發表于 09-07 10:00 ?1582次閱讀

    INCA的一些用法

    INCA的一些用法
    的頭像 發表于 11-10 15:32 ?1.1w次閱讀

    一些有趣的數組相關的SystemVerilog約束

    我們在工作中常常會針對數組施加各式的約束,下面列舉下有趣的Systemverilog數組約束示例。
    的頭像 發表于 03-08 13:12 ?1210次閱讀

    開始使用AXI VIP,對UVM有一些基本的了解

    Synopsys 的 VIP 以 SystemVerilog 包的形式提供。這些包為 VIP 定義唯的命名空間,但為了使 VIP 更易于使用,可以將 VIP 命名空間導入到全局命名空間中。除了
    的頭像 發表于 05-25 14:44 ?8762次閱讀

    一些有趣的數組相關的SystemVerilog約束

    我們在工作中常常會針對數組施加各式的約束,下面列舉下有趣的**Systemverilog數組約束**示例
    的頭像 發表于 05-30 11:13 ?1009次閱讀
    主站蜘蛛池模板: 精品国产乱码久久久久久人妻 | 国产精品嫩草免费视频 | 51精品国产AV无码久久久密桃 | 美女撒尿无遮挡免费中国 | 在线精品视频免费观看 | 日本午夜精品一区二区三区电影 | 国产高清亚洲日韩字幕一区 | 人人听力网mp3下载 人人舔人人爱 | beeg日本高清xxxx | 97夜夜澡人人爽人人模人人喊 | 岳打开双腿开始配合日韩视频 | 第一福利在线永久视频 | 国产一区日韩二区欧美三区 | TUBE8最新日本护士 | 国语92电影网午夜福利 | 国产精品久久久久久久久久免费 | 伸进同桌奶罩里摸她胸作文 | 男人把女人桶到高潮嗷嗷叫 | 日韩一区精品视频一区二区 | 久久国产高清视频 | 亚洲 欧美 国产 综合五月天 | 世界上第一个得抑郁症的人是谁 | 久久精品亚洲AV高清网站性色 | 人人射人人插 | 男人插曲视频大全免费网站 | 征服丝袜旗袍人妻 | 国产成人综合在线视频 | 免费无码国产欧美久久18 | 欧美性xxxx18| 蜜臀AV熟女人妻中文字幕 | 99久久免热在线观看 | 国产精品一国产精品免费 | 精品国产成a人在线观看 | 色欲天天天综合网免费 | 俄罗斯美幼| 最新黄yyid| 亚洲精品视频免费在线观看 | 最近中文字幕在线看免费完整版 | 午夜片无码区在线观看 | 国产ZZJJZZJJ视频全免费 | 久久婷婷色香五月综合激情 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品