前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【日更计划099】数字IC基础题【SV部分】

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

作者头像
空白的贝塔
发布2021-04-23 15:26:32
5230
发布2021-04-23 15:26:32
举报
文章被收录于专栏:摸鱼范式摸鱼范式

欢迎大家加入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()方法?何时使用它?

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上期答案
  • 本期题目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档