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

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

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

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

上期答案

[206] 如何选择性的激活或者关闭一个类中的约束?
代码语言:javascript
复制
//<object>.constraint_mode(0) :: 关闭对象中的所有约束
//<constraint>.constraint_mode(0) :: 选择性关闭某一个约束
class  ABC;
    rand int length;
    rand  byte SA;
    constraint c_length { length inside [1:64];}
    constraint c_sa {SA inside [1:16];}
endclass ABC abc = new();
abc.constraint_mode(0) // 关闭所有约束
abc.c_length.constraint_mode(0) // 只关闭约束c_length
[207] 现有下面的一个类,如何生成addr大于200的Packet对象?
代码语言:javascript
复制
class  Packet;
    rand bit[31:0] addr;
    constraint c_addr { addr inside [0:100];}
endclass

大于200与内置约束冲突,所以需要先关闭内置约束,然后通过内联约束进行随机化

代码语言:javascript
复制
Packet p = new();
p.c_addr.constraint_mode(0);
p.randomize with {addr > 200;};
[208] 什么是pre_randomize()和post_randomize()函数?

这些是systemverilog内建的回调函数。在调用randomize之前会自动调用pre_randomize函数,之后会自动调用post_randomize函数。可以通过定义这两个函数,完成在随机化之前或者之后进行某些操作。

[209] 编写一个约束,为下面对象中的动态数组生成约束,使得每个元素都小于10,数组大小也小于10
代码语言:javascript
复制
class  dynamic_array;
    rand unsigned int abc[];
endclass
代码语言:javascript
复制
constraint c_abc_len {
    abc.size() < 10;
    foreach (abc[i])
        abc[i] < 10;
}
[210] 编写约束,创建随机整数数组,使数组大小在10-16之间,并且数组按照降序排列
代码语言:javascript
复制
class array_abc;
    rand unsigned int  myarray[];
endclass
代码语言:javascript
复制
constraint  c_abc_val {
    myarray.size inside { [10:16] };
    foreach (myarray[i])
        if (i>0) myarray[i] < myarray[i-1];
}

你答对了吗

本期题目

[211] 如何对一个生成一个随机动态数组,并且元素两两各不相同?参考下面的代码
代码语言:javascript
复制
class TestClass;
    rand bit[3:0] my_array[];//dynamic array of bit[3:0]
endclass
[212] “fork - join”, “fork - join_any” 和“fork - join_none”之间有什么区别?
[213] “wait fork”和“disable fork”的作用是什么?
[214] 硬约束和软约束有什么区别?
[215] 下面每个线程的输出是什么?
代码语言:javascript
复制
initial begin
 for (int j=0; j<3; j++) begin
     fork
         automatic int result;
         begin
             result= j*j;
             $display("Thread=%0d value=%0d", j, value);
         end
     join_none
     wait
     fork;
 end
end

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

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

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

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

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

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