一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuà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ù)字電路中,萬物皆為二進制,甚至在Systemverilog的演進過程中連wire和reg都不做區(qū)分,統(tǒng)一成logic。有利也有弊,因為在統(tǒng)一的過程其實也丟失了一些信息。也許可以在注釋中進行增補描述,但總是不夠直接,而且變量聲明出錯的話,也無法進行檢查。

有以下兩種情況容易出現(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中應該在方法的聲明開始和結(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都編譯進一個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會更加清晰。例如我們經(jīng)常定位uvm源碼問題時很難通過vcs.log里面的編譯文件名稱直接找到相應的class定義位置。


9、Check that $cast() calls complete successfully

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

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

10、Check that randomize() calls complete succesfully。

在使用class的randomize()方式隨機變量時,建議始終檢查隨機的結(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)造會被設計的RTL信號牽引。

13、Only samplecovergroups using the sample() method

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

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)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 二進制
    +關注

    關注

    2

    文章

    807

    瀏覽量

    42319
  • Verilog
    +關注

    關注

    29

    文章

    1367

    瀏覽量

    112258
  • 數(shù)字電路

    關注

    193

    文章

    1639

    瀏覽量

    81904
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19538

原文標題:SystemVerilog的coding guideline

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    systemverilog學習教程

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

    CAM 350一些基本操作

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

    一些電子公司的簡稱

    一些電子公司的簡稱
    發(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模塊的一些基本應用

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

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

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

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

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

    SystemVerilog中枚舉類型的使用建議

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

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

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

    INCA的一些用法

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

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

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

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

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

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

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