SystemVerilog
文章平均质量分 73
甲六乙
这个作者很懒,什么都没留下…
展开
-
systemverilog $cast
cast既可以将子类对象转给父类句柄,也可以将父类对象转给子类句柄。原创 2023-03-17 14:13:32 · 267 阅读 · 1 评论 -
【转载】System Verilog 上下文context的含义以及设置导入函数的作用域
导入函数的上下文是该函数定义所在的位置,比如$unit 、模块、program或者package作用域(scope),这一点跟普通的sv方法是一样的。当top模块调用c_display()方法时,该方法将作用域设置回block,这样它调用的便是block模块中的sv_display(),而非top模块中的同名方法。如同SV代码可以在局部作用域调用方法,导入的C方法也可以在它默认的上下文之外调用方法。返回的作用域被打印了两次,一次是C代码首次被调用时的作用域,另一次是先前保存过的作用域。原创 2023-03-07 10:37:35 · 656 阅读 · 0 评论 -
在verilog或者systemverilog中通过systemverilog获得环境变量setenv,getenv
在verilog或者systemverilog中通过systemverilog获得环境变量setenv,getenv原创 2022-08-08 08:21:33 · 2083 阅读 · 0 评论 -
systemverilog线程及线程间的通信(二)
1. 旗语 semaphore如果把进程执行看成“开车”这个行为,开车需要钥匙,旗语就类似于“钥匙”。一个线程执行要先申请钥匙(旗语),如果只有一个钥匙(旗语)并且被其他线程申请了,那么这个线程阻塞。当那个线程执行完了,返回钥匙(旗语),被阻塞的线程可以再申请钥匙(旗语)。旗语可以用在多个进程共享资源的时候。 new方法创建一个或多个旗语 get获取一个或多个旗语,获取失败阻塞 put返回一个或多个旗语 try_get()试图获取旗语,但不阻塞。返回1表示...原创 2022-05-28 20:02:12 · 699 阅读 · 0 评论 -
systemverilog线程及线程间的通信(一)
实际硬件中,计算是并发进行的,在Verilog中通过initial、always、连续赋值来模拟,在测试平台中为了模拟、检验Verilog中的这些语句块,tb使用许多并发的线程。1. 线程的定义和使用1.1 定义线程initial 、always、assign都是进程,初次之外还有: fork join 其内的语句并发,fork-join块执行完才执行后面的语句。 fork join_none 其内 的语句并发,并且不会阻塞块之后的语句,块内语句与块之后的语句是并发关系.原创 2022-05-28 19:55:52 · 902 阅读 · 0 评论 -
systemverilog中的几个系统函数收藏
1 随机化相关函数1) std::randomize() with对于随机对象,可以采用object.randomize()的方式进行随机化,但有的时候可以通过更简单的方式,不必定义类和例化对象,甚至变量都不是随机类型,也可以对其进行随机化,这就是系统随机化 函数std::randomize。initial begin //SV int value; std::randomize(value) with {value>=0 && value&l...原创 2022-05-28 19:00:51 · 3484 阅读 · 0 评论 -
SystemVerilog interface详细介绍,附带参考代码,收藏加关注哦
本文将介绍Systemverilog 中interface的主要内容,如果有问题欢迎指出,喜欢的话,点赞、收藏、关注哦。1. Interface概念System Verilog中引入了接口定义,接口与module 等价的定义,是要在其他的接口、module中直接定义,不能写在块语句中,跟class是不同的。接口是将一组线捆绑起来,可以将接口传递给module。2. 接口的优点一)通过接口在module之间或内部进行信号,模块的输入列表就是一个接口,这样简单,避免手动连线的错误..原创 2022-05-28 18:18:41 · 5954 阅读 · 0 评论 -
systemverilog中$monitor使用
在SV中$monitor的使用格式与$display相同,语义上有所不同,$display是将双引号中的参数列表内容打印出来,而$monitor是在参数列表发生改变的时候,将参数列表内容打印出来。如果同时使用两个$monitor函数,那么会发生冲突module Mon; bit[7:0] addr; bit[7:0] data; initial begin for(int i=0;i<5;i++) begin #...原创 2021-04-22 21:00:54 · 7567 阅读 · 7 评论 -
子module可以直接用父module中实例化的接口interface
在module中定义一个interface,子module中可以直接用这个interface,而不需要传递什么的。interface bfm; logic[7:0] data; logic[7:0] addr;endinterface;module parent; bfm bif(); initial begin bif.data=0; bif.addr=0; $display("@ %0t : [parent] b原创 2021-04-22 20:37:30 · 532 阅读 · 0 评论 -
Verilog和System Verilog中字面值表示
0. 介绍字面值(literal integer)就是类似5、'h10这种值。1. syntax<size>'s<base><value><size> is optional. If given, it specifies the total number of bitsrepresented by the liter...原创 2019-10-26 17:42:35 · 1506 阅读 · 0 评论 -
在Verilog和Systemverilog的block中定义局部变量
0. 介绍在Verilog和systemverilog中的begin..end和fork..join block中都可以定义局部变量。但有区别。1. VerilogVerilog allows local variables to be declared in named begin...end andfork...join blocks. These variable...原创 2019-10-26 16:58:51 · 3083 阅读 · 0 评论 -
【论文研读】Yikes Why is My SystemVerilog Still So
0. 介绍这个Cummings在2019年DVCon会议上的论文《 Yikes! Why is My SystemVerilog Still So Slooooow 》,主要讲关于systemverilog仿真速度与coding之间关系。1. System Verilog语义1.1 logic类型有两种语义Introduced in SystemVerilog, t...原创 2019-10-24 08:59:18 · 603 阅读 · 0 评论 -
systemverilog中的generate constructs
0. 介绍 generate构建是用来例化一个或者多个generate block;generate block可以是module item、一段语句或者嵌套的generate block。但不能有端口声明。 generate 调度是在elaboration阶段,而不是在simulation。generate scheme的结果在simulation之前就确定了。所有在gene...原创 2019-10-22 11:44:03 · 2644 阅读 · 0 评论 -
systemverilog中static关键字
static class property如果变量需要在不同的对象中共享,那么可以把这个变成定义成静态变量。静态变量在声明对象句柄的时候就分配内存空间。The static class properties can be used without creating an object of that type. 1 2 3 4 ...原创 2019-10-19 20:02:24 · 891 阅读 · 0 评论 -
systemverilog中class override用法
0. 介绍SV中引入OPP,也会有类似于C++里的override和overload考虑。1. override 重写重写有数据成员重写和方法重写,看下面例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...原创 2019-10-19 20:01:31 · 3170 阅读 · 2 评论 -
systemverilog 中class的声明和例化
1. class constructor ---- newSV中通过new构造函数来创建对象,在创建对象的过程中,可以做一些初始化工作。new函数没有返回值,他的返回类型就是赋值表达式中左值的类型。如果没有自己定义new函数,那么SV会调用默认的new函数;一个派生类的new函数会先调用父类的new函数。2. super Thesuperkeyword is use...原创 2019-10-19 20:00:44 · 6442 阅读 · 0 评论 -
systemverilog中的automatic关键字,定义动态存储变量
参考:IEEE 18006.21 Scope and lifetime1. SV中变量存储 Variables declaredoutsideamodule, program, interface, checker, task, or functionare local to thecompilation unit andhave a static lifetim...原创 2019-10-19 20:00:01 · 3528 阅读 · 4 评论 -
systemverilog中的类型转换$cast
0. 介绍在SV中类型转换有很多,在这里先将类型转换分成两种,静态类型转换和动态转换。静态转换就是用cast operator——单引号(‘)。动态转换用$cast。1. 静态转换 static cast(’)语法如下: 1 2 constant_cast ::=// from A.8.4(来自1800) casting_...原创 2019-10-19 18:32:17 · 6006 阅读 · 0 评论 -
SystemVerilog——数据类型
SystemVerilog中扩展了Verilog中的数据类型,增加双状态数据、动态数组、队列等。1. 内建类型1.1 logic类型SV中将reg类型替换成logic关键字,logic既可以在块语句中被赋值,也可以在assign中被赋值,可以用wire的地方都可以用logic来替换,但logic不能有多个驱动,比如双向总线建模的时候需要用wire。1.2 双状态数据类型只...原创 2019-07-22 09:36:44 · 8853 阅读 · 0 评论