chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

分享一些SystemVerilog的coding guideline

sanyue7758 ? 來源:數(shù)字芯片實驗室 ? 2023-11-22 09:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文分享一些SystemVerilog的coding guideline。

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

1、Use a descriptive typedef for variables

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

有以下兩種情況容易出現(xiàn)編碼錯誤:

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

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

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

基本格式為:

typedef 已有類型 新類型;

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

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中應(yīng)該在方法的聲明開始和結(jié)束加上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驗證環(huán)境中如果使用到一些公共組件,建議采用下面這個形式,即package+`include,將同一個組件內(nèi)的多個class都編譯進(jìn)一個package。

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

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會更加清晰。例如我們經(jīng)常定位uvm源碼問題時很難通過vcs.log里面的編譯文件名稱直接找到相應(yīng)的class定義位置。


9、Check that $cast() calls complete successfully

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

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

10、Check that randomize() calls complete succesfully。

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

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

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

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

12、Wrap covergroups in class objects

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

13、Only samplecovergroups using the sample() method

對于cover group的采樣要非常精細(xì)地控制采樣時刻,不然會覆蓋很多非關(guān)鍵時刻點的數(shù)據(jù)值,也會誤導(dǎo)覆蓋率分析

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中某些代碼執(zhí)行時刻是同一個step,但是執(zhí)行順序仍然是確定性的。但是建議盡量不要依賴這樣工具行為。







審核編輯:劉清

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

    關(guān)注

    2

    文章

    807

    瀏覽量

    42333
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112286
  • 數(shù)字電路
    +關(guān)注

    關(guān)注

    193

    文章

    1639

    瀏覽量

    81921
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19548

原文標(biāo)題:SystemVerilog的coding guideline

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    關(guān)于一些對OpenMP優(yōu)化的方式

    本文調(diào)研了一些對OpenMP優(yōu)化的方式。
    發(fā)表于 11-22 09:36 ?1280次閱讀

    systemverilog學(xué)習(xí)教程

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

    CAM 350一些基本操作

    CAM 350一些基本操作 G
    發(fā)表于 01-25 11:26 ?2436次閱讀

    一些電子公司的簡稱

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

    Autium_designer的一些經(jīng)驗

    Autium_designer的一些經(jīng)驗
    發(fā)表于 02-28 21:16 ?0次下載

    一些制作1969的分享經(jīng)驗

    一些制作1969的分享經(jīng)驗
    發(fā)表于 03-04 18:25 ?37次下載

    VICOR模塊的一些基本應(yīng)用

      VICOR模塊的一些基本應(yīng)用
    發(fā)表于 11-24 11:42 ?17次下載

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

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

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

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

    SystemVerilog中枚舉類型的使用建議

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

    get與post的請求一些區(qū)別

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

    INCA的一些用法

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

    一些有趣的數(shù)組相關(guān)的SystemVerilog約束

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

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

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

    一些有趣的數(shù)組相關(guān)的SystemVerilog約束

    我們在工作中常常會針對數(shù)組施加各式的約束,下面列舉下有趣的**Systemverilog數(shù)組約束**示例
    的頭像 發(fā)表于 05-30 11:13 ?1071次閱讀