女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

分享一些SystemVerilog的coding guideline

sanyue7758 ? 來(lái)源:數(shù)字芯片實(shí)驗(yàn)室 ? 2023-11-22 09:17 ? 次閱讀

本文分享一些SystemVerilog的coding guideline。

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

1、Use a descriptive typedef for variables

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

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

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

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

對(duì)此,引入自定義類型語(yǔ)法typedef

基本格式為:

typedef 已有類型 新類型;

一般自定義類型后面添加一個(gè)_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)該在方法的聲明開(kāi)始和結(jié)束加上label,方便代碼review時(shí)清晰地看出來(lái)task聲明的語(yǔ)句塊范圍

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驗(yàn)證環(huán)境中如果使用到一些公共組件,建議采用下面這個(gè)形式,即package+`include,將同一個(gè)組件內(nèi)的多個(gè)class都編譯進(jìn)一個(gè)package。

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

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


importA::A_driver;
A_drivera_driver;

8、Define one class per file

顯而易見(jiàn),一個(gè)文件只定義一個(gè)class會(huì)更加清晰。例如我們經(jīng)常定位uvm源碼問(wèn)題時(shí)很難通過(guò)vcs.log里面的編譯文件名稱直接找到相應(yīng)的class定義位置。


9、Check that $cast() calls complete successfully

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

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

10、Check that randomize() calls complete succesfully。

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

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

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

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

12、Wrap covergroups in class objects

在class里面構(gòu)造功能覆蓋率,因?yàn)槿绻苯映槿TL信號(hào)的話,那么后仿真時(shí)這個(gè)信號(hào)可能就會(huì)丟失了。而且功能覆蓋率的構(gòu)造會(huì)被設(shè)計(jì)的RTL信號(hào)牽引

13、Only samplecovergroups using the sample() method

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

14、Label covergroup coverpoints and crosses

和前面的class加上label一樣,coverpoint也要手動(dòng)加上label,方便verdi打開(kāi)vdb文件時(shí)清晰地看出未覆蓋的場(chǎng)景。

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







審核編輯:劉清

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

    關(guān)注

    2

    文章

    803

    瀏覽量

    42128
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1365

    瀏覽量

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

    關(guān)注

    193

    文章

    1637

    瀏覽量

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19422

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

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

收藏 人收藏

    評(píng)論

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

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

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

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

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

    CAM 350一些基本操作

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

    一些電子公司的簡(jiǎn)稱

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

    Autium_designer的一些經(jīng)驗(yàn)

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

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

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

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

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

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

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

    一些簡(jiǎn)單趣味小電子制作教程

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

    SystemVerilog中枚舉類型的使用建議

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

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

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

    INCA的一些用法

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

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

    我們?cè)诠ぷ髦谐3?huì)針對(duì)數(shù)組施加各式的約束,下面列舉下有趣的Systemverilog數(shù)組約束示例。
    的頭像 發(fā)表于 03-08 13:12 ?1204次閱讀

    開(kāi)始使用AXI VIP,對(duì)UVM有一些基本的了解

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

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

    我們?cè)诠ぷ髦谐3?huì)針對(duì)數(shù)組施加各式的約束,下面列舉下有趣的**Systemverilog數(shù)組約束**示例
    的頭像 發(fā)表于 05-30 11:13 ?1002次閱讀