0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取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

    文章

    708

    浏览量

    41254
  • Verilog
    +关注

    关注

    28

    文章

    1327

    浏览量

    109312
  • 数字电路
    +关注

    关注

    192

    文章

    1397

    浏览量

    79753
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18970

原文标题:SystemVerilog的coding guideline

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    avr的一些资料

    本帖最后由 912293097 于 2012-10-25 21:58 编辑 分享一些avr的一些资料
    发表于 10-25 21:54

    [启芯公开课] SystemVerilog for Verification

    设计验证相关的公开课!SystemVerilog作为IEEE-1800,将VLSI设计、验证和断言属性集中在起,是数字超大规模集成电路设计和验证领域最流行的语言。从2006年至今
    发表于 06-10 09:25

    systemverilog--语法详解

    官方的systemverilog详解,很详细。推荐给打算往IC方面发展的朋友。
    发表于 06-02 09:30

    systemverilog学习教程

    systemverilog一些基本语法以及和verilog语言之间的区别。
    发表于 04-01 14:24

    一些资料

    一些资料
    发表于 08-13 17:24

    round robin 的 systemverilog 代码

    大家好,我对个 round robin 的 systemverilog 代码有疑惑。https://www.edaplayground.com/x/2TzD代码第49和54行是怎么解析呢 ?
    发表于 03-14 19:16

    分享一些AD资料

    分享一些资料
    发表于 03-13 17:31

    SystemVerilog有哪些标准?

    SystemVerilog有哪些标准?
    发表于 06-21 08:09

    SystemVerilog Assertion Handbo

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:08 188次下载

    SystemVerilog的断言手册

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:12 20次下载

    什么是Channel coding

    什么是Channel coding  英文缩写: Channel coding 中文译名: 信道编码,纠错编码 分  类: 运营与支撑 解  释:
    发表于 02-22 17:22 1515次阅读

    罗森伯格HSD的Coding种类介绍

    大家好,罗森伯格HSD连接器作为罗森伯格汽车连接器的产品之一,被广泛的应用于车载娱乐系统和高速数据传输中,不过一些客户经常对HSD的Coding有些疑问。这里,就让小编带领大家了解下罗森伯格HSD
    的头像 发表于 10-13 10:48 2458次阅读

    SystemVerilog中枚举类型的使用建议

    SystemVerilog中枚举类型虽然属于一种“强类型”,但是枚举类型还是提供了一些“不正经”的用法可以实现一些很常见的功能,本文将示例一些在枚举类型使用过程中的
    的头像 发表于 09-01 14:20 1137次阅读

    一些有趣的数组相关的SystemVerilog约束

    我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的Systemverilog数组约束示例。
    的头像 发表于 03-08 13:12 625次阅读

    一些有趣的数组相关的SystemVerilog约束

    我们在工作中常常会针对数组施加各式的约束,下面列举一下有趣的**Systemverilog数组约束**示例
    的头像 发表于 05-30 11:13 451次阅读