- 博客(28)
- 资源 (9)
- 收藏
- 关注
原创 Systemverilog(绿皮书)第二章——数据类型
在Verilog中,初学者经常分不清reg和wire两者的区别,应该使用它们中哪个来驱动端口?连接不同模块时又该如何做?Systemverilog中对此做了改进,如图1所示:图中,黄色的logic、bit、logic和reg为 无符号类型;蓝色的integer、byte、shortint、int和longint为有符号类型。针对四值逻辑和二值逻辑的赋值问题,如下问题1:logic...
2020-03-31 21:16:24 2825
原创 Systemverilog(绿皮书)第八章——OOP进阶(一)类型转换
class Transaction; //父类 rand bit [31:0] src; function void display(input string prefix = ""); //成员函数display $display("%sTransaction: src = %0d", prefix, src); endfun...
2020-05-06 23:06:24 772
原创 Systemverilog(绿皮书)第九章——功能覆盖率(四)覆盖选项
covergroup CoverLength; coverpoint tr.length; option.per_intance = 1; //单独计算每个实例覆盖率endgroup注释如果有多个covergroup实例,可以通过参数来对每个实例传入单独的注释,这些注释最终会显示在覆盖总结数据的 报告中。covergroup CoverPort(int ...
2020-05-05 15:01:50 4077 1
原创 Systemverilog(绿皮书)第九章——功能覆盖率(三)数据采样
covergroup CovPort; options.auto_bin_max = 8; //所有的coverpoint auto_bin数量是8 coverpoint tr.port { option.auto_bin_max = 2} //特定的covepoint auto_bin数量2 endgroupcovergrou...
2020-05-04 15:09:05 3322
原创 Systemverilog(绿皮书)第九章——功能覆盖率(二)覆盖组
//在类中定义covergroupclass Transactor; Transaction tr; mailbox mbx_in; covergroup CovPort; coverpoint tr.port; //定义的采样数值 endgroup function new(mailbox mbx_in); ...
2020-05-03 10:26:52 1260
原创 Systemverilog(绿皮书)第七章——线程及其通信(三)线程通信
event e1,e2; initial begin $display("@%0t: 1:before trigger", $time); -> e1; @e2; $display("@%0t: 1:after trigger", $time); end initial begin ...
2020-05-02 15:10:20 1345 1
原创 Systemverilog(绿皮书)第七章——线程及其通信(二)线程控制
initial begin $display("@%0t: start fork ... join example", $time); #10 $display("@$0t: sequential after #10", $time); fork $display("@%0t: parallel start", $time); #50 ...
2020-04-21 18:26:59 875 1
原创 Systemverilog(绿皮书)第六章——随机化(三)随机函数
我们更希望把随机变量用rand和randc修饰,之后把它们封装到 一个类里面。类是 一些变量的自洽体,可以把一些相关的变量放到这个软件的变量盒子中,变量 与变量之间的约束关系也可以放到类中。如果我们在调用randomize时候,给randomize函数中添加一些参数,来指定随机化哪些变量。这时只有写进参数列表中的变量会被随机化,其他变量 都会被当做状态不会被随机化。其它变量即便有rand修...
2020-04-21 08:42:00 641
原创 Systemverilog(绿皮书)第六章——随机化(五)随机控制
随机序列(1)产生随机事务序列的另一种方法就是使用SV的 randsequence结构。这对于随机安排组织原子(atomic)测试序列很有帮助。initial begin for (int i=0; i<15; i++) begin//按照要求发送激励 randsequence (stream) stream : cfg_read...
2020-04-21 07:24:03 714
原创 Systemverilog(绿皮书)第六章——随机化(四)数组的约束
在约束随机标量 的同时,我们还可以对随机化的数组进行约束class dyn_size; rand logic [31:0] d[]; //随机化d[]数组; constraint d_size (d.size() inside {[1:10]};) //调用d.size对数组长度范围进行约束endclass动态数组分别可以对其长度和内容做随机...
2020-04-20 23:39:03 2738 1
原创 Systemverilog(绿皮书)第六章——随机化(二)约束块控制
约束的时候通过约束块控制,实现 冲突约束的不同 情况下的通过。class Packet; rand int length;//进行两个冲突的约束length constraint c_short {length inside [1:32];} constraint c_long {length inside [1000:1023];}endclassP...
2020-04-20 10:09:19 1387
原创 Systemverilog(绿皮书)第六章——随机化(一)随机约束和分布
class Packet; //The random variable rand bit [31:0] src, dst, data[8]; randc bit [7:0] kind; //Limit the values for src constraint c { src > 10; src < 1...
2020-04-19 22:25:28 1598
原创 Systemverilog(绿皮书)第四章——连接设计(三)测试的开始于结束
module tb; bit clk; initial begin forever #5ns clk <= !clk; end counter dut(clk); initial begin #500ns; $finish(); endendmoduleprogram pg...
2020-04-19 17:53:41 633
原创 Systemverilog(绿皮书)第四章——连接设计(二)采样与数据驱动
在仿真的行为 中,为了尽量避免时序电路中时钟和驱动信号的时序竞争问题,我们需要尽量明确驱动时序和采样时序。默认情况下,时钟对于组合电路的驱动会 添加一个无线小 的时间延迟(delta-cycle),驱动信号和被驱动信号之间的延迟。它比最小 时间单位精度还小。在仿真的过程中,输入命令“run 0”,就是 让仿真其运行一个delta-cycle时间。timescale 1ns/1nsm...
2020-04-19 16:39:46 2712 1
原创 Systemverilog(绿皮书)第四章——连接设计(一)接口
module top;bit clk;always #5 clk = ~clk;arb_if arbif(clk); //例化一个接口,将时钟传入arb a1 (arbif); //例化一个设计模块,接口作为参数传入test t1 (arbif); //例化一个测试模块,接口作为参数传入end...
2020-04-19 11:20:27 1190
原创 Systemverilog(绿皮书)第五章——类与对象(四)句柄的使用
由于句柄可以作为函数的参数进行传递,此时就涉及 一个问题, 函数参数方向的问题。若不给函数形式参数指明方向可能会出现报错。function void create Transaction (tr); tr = new(); tr addr = 100; ......endfunctionTransaction t;initial begin cre...
2020-04-19 09:08:06 1689
原创 Systemverilog(绿皮书)第五章——类与对象(三)类的继承
在OOP中我们通过继承的方式给子类赋值或者增加新的功能:class cat; protected color_t color; local bit is_good; function set_good(bit s); this.is_good = s; endfunctionendclass/声明黑猫类/class black_cat ...
2020-04-18 21:37:30 2395 1
原创 Systemverilog(绿皮书)第五章——类与对象(一)类的概述
如下题目所示:class Transaction logic [31:0] addr = 'h10; logic [31:0] crc,data[8]; function new(logic [31:0] a =3, d =5); addr = a; foreach (data[i]) data[i] = d...
2020-04-16 10:19:36 964
原创 Systemverilog(绿皮书)第五章——类与对象(二)类的成员
类的成员具有封装性,默认的成员类型为public,有限制的成员类型为protected和local:class clock local bit is_summer = 0; local int nclock = 6; function int get_clock(); if(!is_summer) return this.nclock; ...
2020-04-16 08:37:20 1108
原创 Systemverilog(绿皮书)第三章——过程块和方法
在做设计验证机需要写很多的代码,其中大部分在任务和函数中使用。systemverilog在这方面增加了很多改进,使其更加接近C语言,从而使代码的编写变得更加容易,尤其是在处理参数的传递上。在Systemverilog中,过程块和其方法通过域进行划分,分为硬件部分和软件部分,具体的内容如下图:针对function参数类型设置考题如下:typedef struct{ b...
2020-04-06 11:22:34 1777
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人