【日更计划099】数字IC基础题【SV部分】

2021-04-23 15:26:32 浏览数 (2)

欢迎大家加入2022届数字IC交流群,QQ群号 1060380138

上期答案

[216] 下面的代码会产生多少个并行的线程?
代码语言:javascript复制
fork
    for (int i=0; i < 10; i   ) begin 
        ABC();
    end
join

for循环在fork join内,所以只有一个线程。

[217] 下面的约束有什么错误?
代码语言:javascript复制
class packet;
    rand bit [15:0] a, b, c;
    constraint pkt_c { 0 < a < b < c; }
endclass

约束表达式中,至多只有一个关系运算符(<,<=,==,>=或>)。如果要实现变量的顺序约束,需要多个表达式。

代码语言:javascript复制
constraint  pkt_c { 0 < a;  a < b ;  b < c; }
[218] systemverilog中的虚方法和纯虚方法的区别是?

在类中将方法定义为虚方法,则在派生类中可以重写这个方法。基类可以定义具有实现或不实现的虚函数,在派生类中也可以选择覆盖或不覆盖。而纯虚函数只具备函数声明,没有具体实现,在派生类中必须有具体实现。纯虚函数常用在抽象类中使用,下面是一个示例。

代码语言:javascript复制
virtual class BasePacket;  // No implementation
    pure virtual function integer send(bit[31:0] data);
endclass
 
class EtherPacket extends BasePacket;
    virtual function integer send(bit[31:0] data);
        // body of the function
        // that implements the send
        ….… 
    endfunction
endclass
[219] 什么是Semaphores?何时使用?

Semaphores是用于控制对公用资源的机制。Semaphores可以视为在创建时具有多个钥匙的存储池,使用Semaphores访问资源时,首先要取得要是,然后才能够继续执行。通过这种机制,可以确保没有要是的进程一直等待到获取钥匙。Semaphores通常用于相互排斥,对公用资源进行访问控制以及简单同步。下面是简单的Semaphores的创建方法。

代码语言:javascript复制
semaphore smTx; 
smTx = new(1);  //create the semaphore with 1 keys.

get()和try_get()分别是阻塞和非阻塞的获取钥匙的方法,put()用于返还钥匙。

[220] 下面两个约束有什么不同?
代码语言:javascript复制
1) 
class ABSolveBefore; 
    rand bit A;
    rand bit [1:0] B;
    constraint c_ab {    (A==0) -> B==0;    solve A before B;  } 
endclass 
2)      
class ABSolveBefore; 
    rand bit A; 
    rand bit [1:0] B; 
    constraint c_ab {    (A==0) -> B==0;    solve B before A;  }
endclass

两种情况下,A都能取到0和1,B能取到0123,并且A为0时B都为0。但是求解顺序会导致两者的分布会不一致。

如果先求解A再求解B,那么概率分布表为

A

B

概率

0

0

0.5

0

1

0

0

2

0

0

3

0

1

0

0.5*0.25

1

1

0.5*0.25

1

2

0.5*0.25

1

3

0.5*0.25

如果先求解B再求解A,那么概率分布表为

A

B

概率

0

0

0.5*0.25

0

1

0

0

2

0

0

3

0

1

0

0.5*0.25

1

1

0.25

1

2

0.25

1

3

0.25

本期题目

[221] 什么是mailbox?如何使用mailbox?
[222] 有限容量和无限容量的mailbox有什么区别?如何创建?
[223] 什么是systemverilog中的event?如何触发event?
[224] 如何合并两个event?
[225] 什么是systemverilog中的std::randomize()方法?何时使用它?

正确答案将在下一期公布,或者到下面的文章获取答案

0 人点赞